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上に手作業で構築)で内部を理解する。