1. Kubernetes概要
Kubernetes(K8s)は、Googleが開発しオープンソース化したコンテナオーケストレーションプラットフォームで、2014年にCNCFに寄贈されました。Kubernetesはコンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化します。
試験のポイント: KCNAドメイン1は試験の46%を占めます。「どのコンポーネントが~を担当するか」という質問がよく出ます。各コンポーネントの役割を覚えましょう。
2. Kubernetesアーキテクチャ
Kubernetesクラスターは2種類のノードで構成されます:コントロールプレーンとワーカーノード。
┌─────────────────────────────────────────────────────────┐
│ CONTROL PLANE │
│ ┌──────────────┐ ┌─────────┐ ┌────────────────────┐ │
│ │ kube-apiserver│ │ etcd │ │kube-controller-mgr │ │
│ │ (REST API) │ │(DB key- │ │ - Node Controller │ │
│ │ front door │ │ value) │ │ - ReplicaSet Ctrl │ │
│ └──────────────┘ └─────────┘ │ - Endpoints Ctrl │ │
│ ┌──────────────┐ └────────────────────┘ │
│ │kube-scheduler│ │
│ │ (assign node)│ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
│ │ │
┌────────▼──────┐ ┌─────▼──────┐ ┌───▼────────────┐
│ WORKER NODE 1│ │WORKER NODE 2│ │ WORKER NODE 3 │
│ ┌──────────┐ │ │ ┌────────┐ │ │ ┌──────────┐ │
│ │ kubelet │ │ │ │kubelet │ │ │ │ kubelet │ │
│ │kube-proxy│ │ │ │k-proxy │ │ │ │kube-proxy│ │
│ │ Pod Pod │ │ │ │Pod Pod │ │ │ │ Pod Pod │ │
│ └──────────┘ │ │ └────────┘ │ │ └──────────┘ │
└───────────────┘ └────────────┘ └────────────────┘
3. コントロールプレーンコンポーネント
| コンポーネント | 役割 | 試験キーワード |
|---|---|---|
| kube-apiserver | クラスターの唯一の入口。REST APIを処理し、すべての通信がここを経由します。 | "single point of truth"、"REST API"、"authentication & authorization" |
| etcd | クラスター全体のステートを保存するKey-Valueストア。KubernetesのDBです。 | "cluster state"、"consistent"、"distributed key-value" |
| kube-scheduler | ノードが未割り当てのPodを確認し、リソースや制約に基づいて適切なノードを選択します。 | "schedule"、"assign node"、"resource fit" |
| kube-controller-manager | 複数のコントローラーループを実行:Node、ReplicaSet、Endpoints、ServiceAccountなど。 | "reconciliation loop"、"desired state"、"controller" |
| cloud-controller-manager | クラウドプロバイダーAPI(AWS、GCP、Azure)との統合(オプション)。 | "cloud integration"、"LoadBalancer provisioning" |
4. ワーカーノードコンポーネント
| コンポーネント | 役割 | 試験キーワード |
|---|---|---|
| kubelet | 各ノードで動作するエージェント。apiserverからPodSpecを受け取り、コンテナが正しく動作することを保証します。 | "node agent"、"PodSpec"、"container health" |
| kube-proxy | Serviceのネットワークルール(iptables/IPVS)を管理し、Podへのネットワーク通信を可能にします。 | "networking"、"iptables"、"Service load balancing" |
| Container Runtime | コンテナを実行するソフトウェア:containerd、CRI-O。Dockerは非推奨になりました。 | "CRI"、"containerd"、"run containers" |
試験のポイント: kubeletはコンテナ内で動作しない唯一のコンポーネントです。ノード上のsystemdサービスとして直接動作します。kubeletがクラッシュするとノードはNotReadyになります。
5. 基本的なKubernetesオブジェクト
Kubernetesのすべてはetcdに保存される宣言型リソースであるオブジェクトです。
| オブジェクト | 説明 | スコープ |
|---|---|---|
| Pod | 最小単位。1つ以上のコンテナがネットワークとストレージを共有 | Namespaced |
| Namespace | 仮想クラスター、リソースの分離 | Cluster-wide |
| Node | ワーカーマシン(VMまたは物理) | Cluster-wide |
| Deployment | ローリングアップデートでステートレスアプリのレプリカを管理 | Namespaced |
| Service | Podへの安定したネットワークエンドポイント | Namespaced |
| ConfigMap / Secret | 設定データ | Namespaced |
| PersistentVolume | ストレージリソース | Cluster-wide |
6. チートシート — コンポーネント → 役割
| 質問 | 回答 |
|---|---|
| クラスターステートはどこに保存される? | etcd |
| Podにノードを割り当てるコンポーネントは? | kube-scheduler |
| 各ワーカーで動作しPodを管理するコンポーネントは? | kubelet |
| すべてのAPIコールを処理するコンポーネントは? | kube-apiserver |
| Serviceのネットワークルールを管理するコンポーネントは? | kube-proxy |
| 望ましい状態を監視・調整するコンポーネントは? | kube-controller-manager |
7. 練習問題
Q1: ノードが未割り当ての新しく作成されたPodを監視し、それらにノードを選択するKubernetesコントロールプレーンコンポーネントはどれですか?
- A) kube-apiserver
- B) kube-scheduler ✓
- C) kube-controller-manager
- D) kubelet
解説:kube-schedulerはスケジュールされていないPodを監視し、リソース要件、アフィニティルール、制約に基づいて適切なノードに割り当てます。
Q2: Kubernetesはすべてのクラスター構成とステートをどこに保存しますか?
- A) kube-apiserverのメモリ
- B) 各ノードの/etc/kubernetes/
- C) etcd ✓
- D) kubeletデータベース
解説:etcdは一貫性のある高可用Key-Valueストアで、すべてのKubernetesクラスターデータのバッキングストアとして機能します。etcdのバックアップ=クラスター全体のバックアップです。
Q3: ワーカーノード上で、PodSpecに記述されたコンテナが実行されて正常であることを保証するコンポーネントはどれですか?
- A) kube-proxy
- B) Container runtime
- C) kubelet ✓
- D) kube-controller-manager
解説:kubeletはkube-apiserverからPodSpecを受け取り、記述されたコンテナが動作していることを保証するノードエージェントです。ノードとPodのステータスをコントロールプレーンに報告します。