Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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/

y_taka_23

January 16, 2020
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

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

    • マネージドだと小回りが効かない ◦ 最新バージョンがなかなか使えない ◦ 最小構成でもそれなりに料金がかかる #dockertokyo
  2. クラスタ構築ツール Kind • マルチノードクラスタが構築可能 ◦ 複数のコンテナを立ち上げ Node と見なす • カスタマイズできるポイントが多い

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

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

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

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

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

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

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

    コンテナによってマルチノードを実現 ◦ 構成や設定のカスタマイズも容易 • より手軽に Kubernetes で実験ができる ◦ マネージドでは不可能な設定項目も触れる #dockertokyo