Kubernetes アーキテクチャ
Kubernetesの内部構造とコンポーネントを理解し、コンテナオーケストレーションの基盤を学びます。
目次
Kubernetesとは
概要
Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するオーケストレーションプラットフォームです。
Docker Composeとの比較:
Docker Compose:
- 単一ホストでの複数コンテナ管理
- 開発・テスト環境向け
- シンプルな設定
Kubernetes:
- 複数ノードのクラスター管理
- 本番環境向け
- 自己修復、オート スケーリング
- 宣言的な設定管理
主な機能
┌─────────────────────────────────────────────────────────────┐
│ Kubernetesの主な機能 │
├─────────────────────────────────────────────────────────────┤
│ サービスディスカバリと負荷分散 │
│ - DNSベースのサービス検出 │
│ - 自動負荷分散 │
│ │
│ ストレージオーケストレーション │
│ - 永続ボリュームの自動プロビジョニング │
│ - クラウドストレージとの統合 │
│ │
│ 自動ロールアウト/ロールバック │
│ - 段階的なデプロイ │
│ - 問題発生時の自動ロールバック │
│ │
│ 自己修復 │
│ - 異常コンテナの自動再起動 │
│ - ノード障害時の再スケジュール │
│ │
│ シークレットと設定管理 │
│ - 機密情報の安全な管理 │
│ - 設定の外部化 │
│ │
│ オートスケーリング │
│ - 負荷に応じた自動スケール │
│ - リソース使用率ベースのスケーリング │
└──────────────────────────────────────── ─────────────────────┘
クラスター構成
全体アーキテクチャ
┌─────────────────────────────────────────────────────────────────────┐
│ Kubernetes Cluster │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Control Plane (Master) │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │
│ │ │ kube-apiserver│ │kube-scheduler│ │kube-controller-manager│ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────────────┘ │ │
│ │ ┌──────────────────────────────────────────────────────────┐ │ │
│ │ │ etcd │ │ │
│ │ └──────────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ API │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Worker Nodes │ │
│ │ │ │
│ │ ┌─────────────────────┐ ┌─────────────────────┐ │ │
│ │ │ Node 1 │ │ Node 2 │ │ │
│ │ │ ┌───────────────┐ │ │ ┌───────────────┐ │ │ │
│ │ │ │ kubelet │ │ │ │ kubelet │ │ │ │
│ │ │ ├───────────────┤ │ │ ├───────────────┤ │ │ │
│ │ │ │ kube-proxy │ │ │ │ kube-proxy │ │ │ │
│ │ │ ├───────────────┤ │ │ ├───────────────┤ │ │ │
│ │ │ │Container │ │ │ │Container │ │ │ │
│ │ │ │Runtime │ │ │ │Runtime │ │ │ │
│ │ │ │(containerd) │ │ │ │(containerd) │ │ │ │
│ │ │ └───────────────┘ │ │ └───────────────┘ │ │ │
│ │ │ ┌─────┐ ┌─────┐ │ │ ┌─────┐ ┌─────┐ │ │ │
│ │ │ │ Pod │ │ Pod │ │ │ │ Pod │ │ Pod │ │ │ │
│ │ │ └─────┘ └─────┘ │ │ └─────┘ └─────┘ │ │ │
│ │ └─────────────────────┘ └─────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
コントロールプレーン
コンポーネント
1. kube-apiserver
Kubernetes APIのエントリーポイント。すべての操作はAPI Serverを経由します。
┌─────────────────────────────────────────────────────────────┐
│ kube-apiserver │
├─────────────────────────────────────────────────────────────┤
│ 役割: │
│ - REST APIの提供 │
│ - 認証・認可 │
│ - アドミッションコントロール │
│ - etcdとの通信 │
│ │
│ アクセス方法: │
│ - kubectl │
│ - クライアントライブラリ │
│ - REST API直接 │
└─────────────────────────────────────────────────────────────┘
# APIサーバーへの直接アクセス
kubectl proxy &
curl http://localhost:8001/api/v1/namespaces/default/pods
# クラスター情報の確認
kubectl cluster-info
2. etcd
分散キーバリューストア。クラスターの全状態を保存します。
┌─────────────────────────────────────────────────────────────┐
│ etcd │
├─────────────────────────────────────────────────────────────┤
│ 保存データ: │
│ - クラスター設定 │
│ - Secrets、ConfigMaps │
│ - サービスディスカバリ情報 │
│ - Pod、Deploymentなどの状態 │
│ │
│ 特徴: │
│ - 強整合性(Raft consensus) │
│ - 高可用性(3または5ノード推奨) │
│ - 監視機能(Watch API) │
└─────────────────────────────────────────────────────────────┘