7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

kubernetes the hard way on PC (1.概要)

Last updated at Posted at 2020-07-08

#初めに
CKA の資格試験に向けて、 有名な kubernetes the hard way を試してみました。
ただ、いくつか苦労した点があったので、それを公開しておこうと思います。

kubernetes the hard way をやるにあたって、(私にとって)ハードルだったのは以下のようなポイントでした。

・環境の最終形がわからず やりながら初めてどんな環境なのか理解できるようになっている(と思う)
・Google Cloud 上で実施されていた
・英語だったので細かいところが理解できなかった(というか理解しようとしなかった?)
・(おそらく)コピペ等でやっていくと、訳も分からず完了する (よくできている)
・ 他にもいろいろあった気がするが忘れた

※ 2020/07/26 追記)
 kubernetes the hard way 日本語訳ページがありました。。。
 Kubernetes The Hard Way(日本語版)
 まぁ、普通に考えればありそうですよね。。。 もっと早く気づけばよかった。

今回は以下の方針でやってみました。

・ 最初にどんな環境なのか、全体像をまとめる
・ ノート PC 上で実施(ホストPC は Cent OS 8, master / worker ノードは ubuntu 20)
・ kubernetes the hard way に厳密に合わせることは考えない (ホスト名や IP, Firewalld など違いがあります)
・ つまづいた原因を突き止めた方法についてもできるだけ記載する
・ kubernetes の基礎的なコンポーネントの説明などは行わない
・ 気が向いたところは調べたことをまとめる

#環境説明(PC)
PC は以下の3台を利用しました (3台もいりません。2台目の sakura だけあればOKといえば OK です)

PC 用途・その他
assam ThinkPad の NFS サーバー。複数台のVM間でファイルを受け渡しするのに利用。 k8s勉強の中でデータ全消しされる悲劇のPC
sakura kubernetes 環境。 Cent OS 上に KVM で Ubuntu を6台 ( master x 3, worker x 3 ) 構築
??? ThinkPad の操作端末。sakura は閉じておいてあるだけなので、sakura に ssh する普段使いPC

メインの sakura の スペックは以下の通りです。 (古いPC ですが結構頑張って育てました)

PC 用途・その他
PC Think Pad X220
CPU Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
Memory 16GB
Disk HDD 1TB
SSD 256GB

なお、 SSD は kubernetes the hard way の勉強中に急遽増設しました。
後述しますが etcd の I/O を HDD ではさばききれませんでした。。。

#環境説明(VM)
メインの環境は下図の通りで、ポイントは以下の通り
・sakura (CentOS 8) 上に ブリッジ接続 (br0) を構成し、全VM が同一セグメントに所属
・kubernetes 用の各ノードは KVM で ubuntu v20 を利用

※もともとは RedHat 系を使っていたのですが、CKA は ubuntu ということで初めてubuntu を触ってみました

01.png

IP/NW 構成は以下の通りです。
なお、kubernetes the hard way に従って、 controller-0 などにしておいた方が
コピー&ペーストできるので良いですが、私がやるときは何も考えずに下記のホスト名を設定してしまいました。。。

サーバ IP kubernetes the hard wayでは。。
k8smaster0 192.168.199.200 controller-0 / 10.240.0.10
k8smaster1 192.168.199.201 controller-1 / 10.240.0.11
k8smaster2 192.168.199.202 controller-2 / 10.240.0.12
k8sworker0 192.168.199.210 worker-0 / 10.240.0.20
k8sworker1 192.168.199.211 worker-1 / 10.240.0.21
k8sworker2 192.168.199.212 worker-2 / 10.240.0.22

#環境説明(service / NW )

下記の図は、説明用ですので、厳密に正しいか、と言われるとそうではないです(正しい図を書く能力が無い。。。)
今回の環境・設定を説明するうえで関係してくるものを記載している、という感じですのでその点はご留意ください。

図の見方ですが、以下のようになっています。

パーツ 概要
青・黄色の箱 KVM 上で稼働する VM(ubuntu)
オレンジ(?)オブジェクト ubuntu の systemd 配下で稼働する Linux のサービス
緑のオブジェクト Pod/コンテナ
白のオブジェクト コマンド
青線 ネットワーク
青点線 ネットワーク間の接続。 ここでは iptables がつないでくれている、ぐらいの認識でよいです。

02.png

kubernetes the hard way では kubernetes の各種コンポーネントは systemd 配下で動く service になっています。
ただ、 kubeadm 等で kubernetes クラスター環境を構築すると、これらのコンポーネントの多くは Pod で動きます。
目の前にある kubernetes のコンポーネントが Pod で構成されているのか、 systemd 配下のservice で動いているのか、意識しておく方が理解につながると思います。
(※ kubernetes の service と systemd 配下の service を区別するため、ここでは systemd 配下のものは systemd 配下と記載しています。 上図では、 オレンジ(?)のオブジェクトは systemd 配下のservice で、 「Service用 NW」の "Service" は kubernetes の service に相当します)

2020/08/10 追記)--
図が間違っていました。 kube-DNS はController-Plane のコンポーネントなのでわかりやすさ重視で k8smaster0 上に記載していますが、実際には (kubernetes the hard wayでは) POD として worker ノード上で稼働させています。 --

IP/NW 構成は以下の通りです。
なお、kubernetes the hard way に従って、 controller-0 などにしておいた方が
コピー&ペーストできるので良いですが、私がやるときは何も考えずに下記のホスト名を設定してしまいました。。。
また、上の図でも何も考えずに書いてしまいました。。。計画的じゃないですね。。すみません。。

ネットワーク アドレス 用途 上の図では kubernetes the hard way では。。
LAN 192.168.199.0/24 物理LAN LAN 10.240.0.0/24
cluster-ip-range 10.32.0.0/24 kubernetes の ClusterIP 等で利用される Service用NW 同じ
cluster-cidr 10.200.0.0/16 Pod のIPアドレスで利用される Pod用NW 同じ
pod-cidr (k8sworker0) 10.200.0.0/24 worker ノード#0 Pod用NW Pod用NW 同じ
pod-cidr (k8sworker1) 10.200.1.0/24 worker ノード#1 Pod用NW Pod用NW 同じ
pod-cidr (k8sworker2) 10.200.2.0/24 worker ノード#2 Pod用NW Pod用NW 同じ

※ 後述しますが、pod-cidr から、各ノードの Pod 用 IP アドレスレンジとして、 10.200.xx.0/24 を払い出していきます。

2020/08/02 追記
 cluster-cidr と pod-cidr を一部混同して記載していたため訂正しました。
 それに伴い、図も修正しました。

#環境説明 (ソフトウェア)

今回利用した各種ソフトウェアのバージョンです。(kubernetes the hard way とは異なる部分があります)
( CKA が k8s 1.16 だと思って 1.16 で頑張っていましたが、 2020/06 受験時点では 1.18 でした (T_T) )

S/W or Component バージョン 入手元
kubernetes 1.16.9
cfssl 1.4.1
ubuntu 20.04 LTS

#説明記事目次

こんなペースで書いていくととても長い記事になるため、
分けて記載していきます。 ここにそのリンク集を作成しておきます。
(リンクがつながっているものは公開済みで、リンクになっていないものは未公開です。
また目次構成自体が変わるかもしれません。)

タイトル・リンク 概要
kubernetes the hard way on PC 1.概要 当ページ。全体概要や設定まとめを記載
2.ホストPC設定 kubernetes 用 VMを立てるホストPC の Linux 設定(KVM等) について記載
3.VM作成 kubernetes 用の VM (ubuntu) の導入・設定について記載
4.Clone 作成 Provisioning Compute Resources の部分を記載
5.Client Tools Installing the Client Tools の導入部分を記載
6.Certificates Provisioning a CA and Generating TLS Certificates の部分を記載
7.k8sConfig Generating Kubernetes Configuration Files for Authentication 部分を記載
8.Encryption Config and Key Generating the Data Encryption Config and Key 部分を記載
9.etcd Bootstrapping the etcd Cluster 部分を記載
10.Control Plane Bootstrapping the Kubernetes Control Plane 部分を記載
11.Worker Nodes Bootstrapping the Kubernetes Worker Nodes 部分を記載
12.kubectl Configuring kubectl for Remote Access 部分を記載
13.Pod Network Provisioning Pod Network Routes 部分を記載
14.CoreDNS Deploying the DNS Cluster Add-on 部分を記載
15.Smoke Test Smoke Test 部分を記載
16.その他 何かあれば…

#参考情報)
kubernetes the hard way
https://github.com/kelseyhightower/kubernetes-the-hard-way

Kubernetes The Hard Way(日本語版)
https://github.com/inductor/kubernetes-the-hard-way

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?