Kind (Kubernetes in Docker) カスタマイズ完全ガイド #dockertokyo / Docker Meetup Tokyo 34th

332f89cc697355902a817506b6995f2b?s=47 y_taka_23
January 16, 2020

Kind (Kubernetes in Docker) カスタマイズ完全ガイド #dockertokyo / Docker Meetup Tokyo 34th

Docker Meetup Tokyo #34 で使用したスライドです。

Kind は、Docker を利用してマルチノードの Kubernetes クラスタをローカルで簡単に構築できるツールです。他の類似ツールと比較して手軽かつ多彩なカスタマイズが可能ですが、その柔軟さに比して具体的なドキュメントがやや不足している感があります。そこでこのスライドでは、Kind 自体の簡単な紹介に加え、ユーザがカスタマイズ可能な項目とその設定例について解説してみました。

イベント概要:https://dockerjp.connpass.com/event/159781/

332f89cc697355902a817506b6995f2b?s=128

y_taka_23

January 16, 2020
Tweet

Transcript

  1. Kind (Kubernetes in Docker) カスタマイズ完全ガイド チェシャ猫 (@y_taka_23) Docker Meetup Tokyo

    #34 (2020/01/16) #dockertokyo
  2. #dockertokyo

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

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

  5. ここが辛いよ Kubernetes • そもそもシステムとして複雑 ◦ 非同期ベースの多数のコンポーネント • 周辺ツールを含め進化が速い ◦ 運用上のプラクティスも時代遅れになりがち

    • マネージドだと小回りが効かない ◦ 最新バージョンがなかなか使えない ◦ 最小構成でもそれなりに料金がかかる #dockertokyo
  6. 充分に Disposable かつ 充分に Configurable なサーバ #dockertokyo

  7. #dockertokyo

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

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

  10. クラスタ構築ツール Kind • マルチノードクラスタが構築可能 ◦ 複数のコンテナを立ち上げ Node と見なす • カスタマイズできるポイントが多い

    ◦ 立ち上げに使用する kubeadm に設定を注入 • 比較的、安定していて実績も十分 ◦ SIG Testing が開発を主導 ◦ k8s 本体の E2E テストで採用 #dockertokyo
  11. Physical Machine docker #dockertokyo

  12. Physical Machine docker kubelet containerd Container = Worker Node kubelet

    containerd etcd kube-apiserver kube-scheduler, etc Container = Control Plane $ kind create cluster #dockertokyo
  13. 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
  14. Kind で設定可能な項目 • クラスタ全体の設定 ◦ ネットワークや Control Plane / Worker

    の構成 • Node ごとの設定 ◦ Host マシンとのマウント・ポートマッピング • Kubernetes のビルドバージョン ◦ ツール類のクロスバージョンテストが可能 #dockertokyo
  15. クラスタ全体の設定 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane -

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

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

    role: worker - role: worker kubeadmConfigPatches: ... containerdConfigPatches: ... #dockertokyo containerd の設定を上書き
  18. 例 : 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
  19. 例 : 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 コンポーネントごとに 起動時引数を与えられる
  20. 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
  21. 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 にアクセス可能
  22. 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 内から見える
  23. Kubernetes のバージョン変更 • ビルド済み Docker イメージを指定 ◦ kind create cluster

    \ --image kindest/node:v1.7.0 • ローカルで Kubernetes ごとビルド ◦ K8s 自体に変更を入れた際に確認が可能 ◦ kind build node-image で、Docker を使って k8s と kindest/node:latest をビルド #dockertokyo
  24. まとめ • Kubernetes の学習コスト問題 ◦ 簡単に触れる環境で経験値を稼ぎたい • Kind によるローカルクラスタ構築 ◦

    コンテナによってマルチノードを実現 ◦ 構成や設定のカスタマイズも容易 • より手軽に Kubernetes で実験ができる ◦ マネージドでは不可能な設定項目も触れる #dockertokyo
  25. Customize Kubernetes as You Like! Presented by チェシャ猫 (@y_taka_23) #dockertokyo