導入
頭脳であるコントロールプレーンは、ひとつの塊ではなく、役割の違う小さな部品が協力して動いています。主要な4つ――API Server・etcd・Scheduler・Controller Manager――を1つずつ見ていきましょう。
説明
コントロールプレーンの中心的な部品は次のとおりです。
- API Server(エーピーアイ・サーバー) … クラスタへの唯一の入口。kubectl も他の部品も、すべてここを通してやり取りします。受付窓口であり交換台です。
- etcd(エトセディー) … クラスタの全状態を保存する台帳。KVS(キー・バリュー・ストア。「鍵→値」で保存するデータベース)で、「あるべき状態」も「現実の状態」もすべてここに記録されます。ここが失われるとクラスタの記憶が消えるため、最重要データです。
- Scheduler(スケジューラ) … 新しい Pod をどのワーカーノードに載せるかを決める配置係。各ノードの空き(CPU・メモリ)を見て最適な置き場所を選びます。
- Controller Manager(コントローラ・マネージャ) … 各種のリコンサイルループを回す担当。「あるべき数と現実の数がずれていないか」を絶えず見張り、ずれていれば API Server に「増やして/減らして」と依頼します。
利用者が kubectl apply(後述)で何かを宣言すると、情報は次のように流れます。
sequenceDiagram
participant U as あなた(kubectl)
participant API as API Server(入口)
participant E as etcd(台帳)
participant S as Scheduler(配置係)
U->>API: 「Podを1個動かして」と宣言
API->>E: あるべき状態を保存
API-->>U: 受け付けました
S->>API: 未配置のPodはある?
API->>E: 問い合わせ
E-->>API: 未配置のPodが1個あります
API-->>S: これです
S->>API: 「ノード2に載せる」と決定
API->>E: 配置先を記録
ポイントは、どの部品も直接おしゃべりせず、必ず API Server と etcd を介すること。入口を1つに絞り、状態を1か所(etcd)に集めることで、大きなシステムでも整合性が保たれます。