Kubernetes 概要¶
Kubernetes は、複数のサーバー上でコンテナを安定して動かすためのオーケストレーション基盤。
個人的な理解としては、docker run を 1 台で手作業運用する世界を、宣言的に複数台へ広げたもの。
ざっくり何をしてくれるか¶
- コンテナをどのノードで動かすか決める
- 落ちたコンテナを自動で復旧する
- 同じアプリを複数台に増やす
- サービス名で通信できるようにする
- 設定値やシークレットを外出しする
- ローリングアップデートで安全に入れ替える
まず押さえたい見方¶
- Kubernetes は「コンテナそのもの」ではなく「コンテナの運用基盤」
- 重要なのは手作業ではなく、望ましい状態を定義する考え方
- 1 個の Pod を起動するより、
Deploymentで維持する前提で考える - アプリ公開、内部通信、設定管理、永続化は役割を分けて考える
よくある構成イメージ¶
Deploymentでアプリ Pod を複数起動するServiceで Pod 群に安定した名前を付ける- 必要なら
Ingressで HTTP/HTTPS を外部公開する - 設定値は
ConfigMap、機密情報はSecretに分ける
クラスタ全体の簡易図¶
以下は Kubernetes 公式ドキュメントのクラスタアーキテクチャ説明をもとにした簡易図。
+-------------------------------------------------------+
| Control Plane |
| - kube-apiserver |
| - etcd |
| - kube-scheduler |
| - kube-controller-manager |
+-------------------------------------------------------+
|
manages cluster state
|
+---------------------------+ +---------------------------+
| Worker Node | | Worker Node |
| - kubelet | | - kubelet |
| - kube-proxy | | - kube-proxy |
| - Pods | | - Pods |
+---------------------------+ +---------------------------+
出典:
- Kubernetes Docs, Cluster Architecture https://kubernetes.io/docs/concepts/architecture/
周辺知識¶
- パッケージ管理: Helm
- ローカル検証: kind / minikube
- ネットワーク: CNI
- ストレージ: CSI
- GitOps や継続運用: Argo CD など
メモ¶
- 最初は
Pod -> Deployment -> Service -> Ingressの流れを押さえる - Kubernetes を学ぶ前提として、Docker とネットワークの基礎があると理解しやすい