Chuyển đến nội dung chính

レッスン1:Kubernetesアーキテクチャとコアコンポーネント

コントロールプレーン vs ワーカーノード。kube-apiserver、etcd、kube-scheduler、 controller-manager、kubelet、kube-proxy。Kubernetesオブジェクト概要。

Kubernetesアーキテクチャ — コントロールプレーンとワーカーノードコンポーネント

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-proxyServiceのネットワークルール(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
ServicePodへの安定したネットワークエンドポイント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のステータスをコントロールプレーンに報告します。