1. Kubernetes 概覽
Kubernetes(K8s)是由 Google 開發的開源容器編排平台,於 2014 年捐贈給 CNCF。Kubernetes 自動化容器化應用程式的部署、擴展和管理。
考試重點: KCNA Domain 1 佔考試的 46%。題目常問「Which component is responsible for...」——需牢記每個元件的角色。
2. Kubernetes 架構
Kubernetes 叢集由兩種節點組成:Control Plane 與 Worker Node。
┌─────────────────────────────────────────────────────────┐
│ 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. Control Plane 元件
| 元件 | 角色 | 考試關鍵詞 |
|---|---|---|
| kube-apiserver | 叢集的唯一入口,處理 REST API。所有通訊都經過此元件。 | "single point of truth"、"REST API"、"authentication & authorization" |
| etcd | 儲存所有叢集狀態的 Key-Value 存儲。是 Kubernetes 的資料庫。 | "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. Worker Node 元件
| 元件 | 角色 | 考試關鍵詞 |
|---|---|---|
| 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 中的一切都是 object——儲存在 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 |
| 哪個元件在每個 Worker 上執行並管理 Pod? | kubelet |
| 哪個元件處理所有 API 呼叫? | kube-apiserver |
| 哪個元件管理 Service 的網路規則? | kube-proxy |
| 哪個元件監視並協調期望狀態? | kube-controller-manager |
7. 練習題
Q1: 哪個 Kubernetes Control Plane 元件負責監視新建立但尚未分配節點的 Pod,並為它們選擇節點?
- 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: Worker Node 上哪個元件負責確保 PodSpec 中描述的容器正在執行且健康?
- A) kube-proxy
- B) Container runtime
- C) kubelet ✓
- D) kube-controller-manager
解析:kubelet 是節點代理程式,從 kube-apiserver 接收 PodSpec 並確保所描述的容器正在執行。它將節點/Pod 狀態回報給 Control Plane。