Kubernetes (k8s)

CNCF製のコンテナオーケストレーター。docker コンテナを宣言的に管理する。_moc-web-infra

アーキテクチャ

  • Control Plane: kube-apiserver / etcd(Raftによる分散KVS、設定保存) / kube-controller-manager / kube-scheduler。masterが死んでも動き続ける。
  • Node: kubelet(Podを起動)/ kube-proxy(Service に応じて通信をPodへforward)。

主要リソース

  • Pod: コンテナ集合、デプロイの最小単位。
  • ReplicaSet(指定数のPodを維持)/ Deployment(ReplicaSet管理、ローリングアップデート・ロールバック)。
  • Service: 外部IF。ClusterIP(Pod間private)/NodePort/LoadBalancer/ExternalName
  • Ingress: 外部HTTPをServiceへルーティング(L7 LB、パスベース・TLS終端)。
  • ConfigMap: 設定をコンテナに渡す。
  • コントローラはリソースをあるべき状態(宣言)に保つcontrol loop。

周辺ツール

  • Helm: k8sのパッケージマネージャ。chart(values.yaml のテンプレート変数を {{ .Values.x }} で展開)。
  • Kustomize: base + overlays でマニフェストを環境別生成。
  • Skaffold: skaffold dev でビルド→マニフェスト更新→apply→ポートフォワードを自動化(ローカル開発は docker compose の方が良いという意見も)。

自宅クラスタ構築の実体験

N100 ミニPCに Proxmox を入れ、Ubuntu VM を複数作って kubeadm init/join でクラスタ構築。CRI-O をランタイムに、CNI は Calico。カスタムクラスタでは type: LoadBalancer<pending> のままになるため Ingress Controller(nginx/traefik)で公開する。Pod から kubectl get pods -o json を叩いて Erlang クラスタのノード一覧を得る、といった応用も(antikythera-k8s 参照)。

学習

Kubernetes the hard way(GCP上に手作業で構築)で内部を理解する。

関連