Slide 1

Slide 1 text

Kind (Kubernetes in Docker) カスタマイズ完全ガイド チェシャ猫 (@y_taka_23) Docker Meetup Tokyo #34 (2020/01/16) #dockertokyo

Slide 2

Slide 2 text

#dockertokyo

Slide 3

Slide 3 text

よくある思い込み 「初心者には学習コストが辛い」 #dockertokyo

Slide 4

Slide 4 text

現実 「初心者じゃなくても辛い」 #dockertokyo

Slide 5

Slide 5 text

ここが辛いよ Kubernetes ● そもそもシステムとして複雑 ○ 非同期ベースの多数のコンポーネント ● 周辺ツールを含め進化が速い ○ 運用上のプラクティスも時代遅れになりがち ● マネージドだと小回りが効かない ○ 最新バージョンがなかなか使えない ○ 最小構成でもそれなりに料金がかかる #dockertokyo

Slide 6

Slide 6 text

充分に Disposable かつ 充分に Configurable なサーバ #dockertokyo

Slide 7

Slide 7 text

#dockertokyo

Slide 8

Slide 8 text

Kubernetes クラスタ自体が コンテナなら使い捨て可能では #dockertokyo

Slide 9

Slide 9 text

Kind (Kubernetes IN Docker) https://github.com/kubernetes-sigs/kind #dockertokyo

Slide 10

Slide 10 text

クラスタ構築ツール Kind ● マルチノードクラスタが構築可能 ○ 複数のコンテナを立ち上げ Node と見なす ● カスタマイズできるポイントが多い ○ 立ち上げに使用する kubeadm に設定を注入 ● 比較的、安定していて実績も十分 ○ SIG Testing が開発を主導 ○ k8s 本体の E2E テストで採用 #dockertokyo

Slide 11

Slide 11 text

Physical Machine docker #dockertokyo

Slide 12

Slide 12 text

Physical Machine docker kubelet containerd Container = Worker Node kubelet containerd etcd kube-apiserver kube-scheduler, etc Container = Control Plane $ kind create cluster #dockertokyo

Slide 13

Slide 13 text

Physical Machine docker kubelet containerd pod pod pod Container = Worker Node kubelet containerd etcd kube-apiserver kube-scheduler, etc Container = Control Plane $ kubectl apply #dockertokyo

Slide 14

Slide 14 text

Kind で設定可能な項目 ● クラスタ全体の設定 ○ ネットワークや Control Plane / Worker の構成 ● Node ごとの設定 ○ Host マシンとのマウント・ポートマッピング ● Kubernetes のビルドバージョン ○ ツール類のクロスバージョンテストが可能 #dockertokyo

Slide 15

Slide 15 text

クラスタ全体の設定 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker kubeadmConfigPatches: ... containerdConfigPatches: ... #dockertokyo クラスタの構成 HA Control Plane も可能

Slide 16

Slide 16 text

クラスタ全体の設定 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker kubeadmConfigPatches: ... containerdConfigPatches: ... #dockertokyo kubeadm の設定を上書き

Slide 17

Slide 17 text

クラスタ全体の設定 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker kubeadmConfigPatches: ... containerdConfigPatches: ... #dockertokyo containerd の設定を上書き

Slide 18

Slide 18 text

例 : Feature Gates の上書き kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 kubeadmConfigPatches - | kind: CluterConfiguration apiVersion: kubeadm.k8s.io/v1beta2 apiServer: extraArgs: feature-gates: EvenPodsSpread=true scheduler: extraArgs: feature-gates: EvenPodsSpread=true #dockertokyo

Slide 19

Slide 19 text

例 : Feature Gates の上書き kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 kubeadmConfigPatches - | kind: CluterConfiguration apiVersion: kubeadm.k8s.io/v1beta2 apiServer: extraArgs: feature-gates: EvenPodsSpread=true scheduler: extraArgs: feature-gates: EvenPodsSpread=true #dockertokyo コンポーネントごとに 起動時引数を与えられる

Slide 20

Slide 20 text

Node ごとの設定 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - worker: extraPortMappings: - hostPort: 80 containerPort: 30080 extraMounts: - hostPath: /path/to/my/config containerPath: /etc/config #dockertokyo

Slide 21

Slide 21 text

Node ごとの設定 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - worker: extraPortMappings: - hostPort: 80 containerPort: 30080 extraMounts: - hostPath: /path/to/my/config containerPath: /etc/config #dockertokyo NodePort や Ingress と組み合わせて localhost で Service にアクセス可能

Slide 22

Slide 22 text

Node ごとの設定 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - worker: extraPortMappings: - hostPort: 80 containerPort: 30080 extraMounts: - hostPath: /path/to/my/config containerPath: /etc/config #dockertokyo 物理マシン上のファイルが Node 内から見える

Slide 23

Slide 23 text

Kubernetes のバージョン変更 ● ビルド済み Docker イメージを指定 ○ kind create cluster \ --image kindest/node:v1.7.0 ● ローカルで Kubernetes ごとビルド ○ K8s 自体に変更を入れた際に確認が可能 ○ kind build node-image で、Docker を使って k8s と kindest/node:latest をビルド #dockertokyo

Slide 24

Slide 24 text

まとめ ● Kubernetes の学習コスト問題 ○ 簡単に触れる環境で経験値を稼ぎたい ● Kind によるローカルクラスタ構築 ○ コンテナによってマルチノードを実現 ○ 構成や設定のカスタマイズも容易 ● より手軽に Kubernetes で実験ができる ○ マネージドでは不可能な設定項目も触れる #dockertokyo

Slide 25

Slide 25 text

Customize Kubernetes as You Like! Presented by チェシャ猫 (@y_taka_23) #dockertokyo