Kubernetes
コンテナオーケストレーションプラットフォーム
Kubernetes(K8s)はコンテナ化されたアプリケーションのデプロイ、スケーリング、 管理を自動化するオープンソースプラットフォームです。 宣言的な設定とセルフヒーリングにより、大規模な本番環境の運用を実現します。
アーキテクチャ
┌─────────────────────────────────────────────────────────────────────────────┐ │ Kubernetes Cluster │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ Control Plane (Master) │ │ │ │ 「クラスタの頭脳」 │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ │ │ │ │ kube-api │ │ etcd │ │ kube- │ │ kube- │ │ │ │ │ │ server │ │ │ │ scheduler │ │ controller │ │ │ │ │ │ │ │ 分散KVS │ │ │ │ manager │ │ │ │ │ │ APIの入口 │◀▶│ 状態保存 │ │ Pod配置決定 │ │ 状態維持 │ │ │ │ │ └──────┬──────┘ └─────────────┘ └──────────────┘ └─────────────┘ │ │ │ │ │ │ │ │ └─────────┼──────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ kubectl / API │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ Worker Node (Data Plane) │ │ │ │ 「実際の作業場」 │ │ │ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ │ │ kubelet │ │ │ │ │ │ - API Serverと通信 │ │ │ │ │ │ - Podのライフサイクル管理 │ │ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ │ │ kube-proxy │ │ │ │ │ │ - Service の仮想IP管理 │ │ │ │ │ │ - iptables / IPVS ルール │ │ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ │ │ Container Runtime (containerd / CRI-O) │ │ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ │ │ Pod A │ │ Pod B │ │ Pod C │ ... │ │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘
Control Plane コンポーネント
クラスタ全体の管理・制御を担当。通常は複数台で冗長化。
🚪
kube-apiserver
Kubernetes のフロントエンド。全ての操作はここを経由する。
- • REST API を提供(kubectl, ダッシュボード, 他コンポーネント)
- • 認証(Authentication)・認可(Authorization)を処理
- • etcd への唯一のアクセス経路
- • Admission Controller でリクエストを検証・変更
💾
etcd
クラスタの唯一の真実の源(Single Source of Truth)。
- • 分散キーバリューストア(Raft consensus)
- • 全リソースの状態を保存(Pod, Service, ConfigMap...)
- • 高可用性のため奇数台(3, 5, 7)で構成
- • 定期的なバックアップが重要
📋
kube-scheduler
新しい Pod をどのノードに配置するかを決定。
- • リソース要求(CPU, Memory)を確認
- • NodeSelector, Affinity/Anti-Affinity を評価
- • Taint/Toleration を考慮
- • スコアリングで最適なノードを選択
🔄
kube-controller-manager
望ましい状態(Desired State)を維持する各種コントローラを実行。
- • Node Controller: ノードの死活監視
- • ReplicaSet Controller: Pod のレプリカ数を維持
- • Deployment Controller: ローリングアップデート
- • Service Controller: ロードバランサー作成(クラウド)
- • Endpoint Controller: Service と Pod の紐付け
Worker Node(Data Plane)コンポーネント
実際にコンテナを実行するノード。通常は複数台で構成。
🤖
kubelet
各ノードで動作するエージェント。Pod のライフサイクルを管理。
- • API Server から Pod Spec を受け取る
- • Container Runtime に指示してコンテナを起動
- • Pod の状態を監視し API Server に報告
- • Liveness/Readiness Probe を実行
- • Volume のマウント処理
🔀
kube-proxy
Service の仮想ネットワークを実現するネットワークプロキシ。
- • Service の ClusterIP へのトラフィックを Pod に転送
- • iptables / IPVS ルールを管理
- • ロードバランシング(ラウンドロビン等)
- • NodePort, LoadBalancer タイプの処理
📦
Container Runtime
実際にコンテナを実行するソフトウェア。
- • containerd: Docker から分離、現在の標準
- • CRI-O: Red Hat 主導、軽量
- • CRI(Container Runtime Interface)経由で kubelet と連携
- • イメージの pull、コンテナの起動/停止
⚠️ Docker は K8s 1.24 以降で非推奨(dockershim 削除)
通信フロー例:Pod作成
- 1kubectl apply
ユーザーがマニフェストを API Server に送信
- 2API Server → etcd
Pod の定義を etcd に保存
- 3Scheduler
未割り当ての Pod を検知し、最適なノードを決定
- 4kubelet
割り当てられた Pod を検知し、Container Runtime に指示
- 5Container Runtime
イメージを pull してコンテナを起動
基本コマンド(kubectl)
kubectl get podsPod一覧
kubectl apply -f manifest.yamlマニフェスト適用
kubectl describe pod NAME詳細情報
kubectl logs PODログ確認
Docker vs Kubernetes
Docker (Compose)
- • 単一ホスト
- • 開発・テスト向け
- • シンプルな設定
- • 手動スケーリング
Kubernetes
- • マルチホストクラスタ
- • 本番向け
- • 宣言的設定
- • 自動スケーリング・自己修復