什麼是Kubernetes

在由許多機器(節點)組成的叢集上,配置容器、維持數量、進行更新並提供連線目標的編排平台。使用者以 Deployment、Service 等資源宣告「期望狀態」,控制器觀察實際狀態並使其接近宣告(調和)。最小單位是 Pod,Pod 消失時會自動重新建立,也支援滾動更新與依負載的自動擴展。也簡寫為 K8s。

日文名稱: Kubernetes

「Kubernetes」出現在1領域的10道練習題中(雲端與容器基礎等)。

這個名詞所屬的領域: 雲端與容器基礎

主要資源

Pod 是組合容器的最小單位,ReplicaSet 維持 Pod 的數量,Deployment 則利用它進行版本更新與回復。Service 為多個 Pod 提供穩定的名稱與位址,Ingress 依路徑或主機名稱把來自叢集外的 HTTP 要求分配給 Service。ConfigMap 與 Secret 把設定與機密值與映像檔分開傳入,namespace 則依團隊或環境劃分叢集。

宣告與調和

使用者以 YAML 等宣告「執行3個這個版本的 Pod」之類的狀態,並登錄到 Kubernetes。控制器反覆確認實際狀態,Pod 消失就建立,數量過多就減少。由於宣告的是結果而非步驟,同一個定義套用幾次都會收斂到相同狀態,也能自動從節點故障中恢復。

資源設定與探測

容器要指定希望預留的CPU與記憶體量(requests)與上限(limits),排程器依 requests 選擇放置 Pod 的節點。readiness 探測檢查能否接受要求並控制分配,liveness 探測讓停止回應的容器重新啟動。HorizontalPodAutoscaler 依相對於 requests 的使用率等指標增減 Pod 的數量。

練習Kubernetes的題目

在 Kubernetes 中,作為部署與管理的最小單位,把1個以上的容器組合在一起並讓它們共用同一IP位址與磁碟區的是下列何者?

  1. A節點(Node)
  2. BService
  3. CPod
查看答案與解析

正確答案:C. Pod

Pod 是 Kubernetes 配置並執行的最小單位,其中的容器共用網路命名空間,因此可以彼此透過 localhost 通訊,也能使用同一個磁碟區。多數情況是1個 Pod 放1個應用程式容器,有時也會在同一個 Pod 加入轉送日誌等輔助容器。Pod 是用完即丟的,重新建立時IP位址也會改變,所以通常透過 Deployment 等間接管理。節點是執行 Pod 的機器,Service 則是通往多個 Pod 的穩定連線目標。

在 Kubernetes 中,指定 replicas: 3 的 Deployment 有3個 Pod 在執行。以 kubectl delete pod 刪除其中1個 Pod 時發生的事,下列何者正確?

  1. ADeployment 的設定也會改寫成 replicas: 2,Pod 維持2個繼續執行
  2. B控制器偵測到實際數量少於指定的3個,並建立1個新的 Pod
  3. C屬於該 Deployment 的另外2個 Pod 也會被刪除,整個 Deployment 停止
查看答案與解析

正確答案:B. 控制器偵測到實際數量少於指定的3個,並建立1個新的 Pod

在 Kubernetes 中,使用者宣告「執行3個 Pod」這樣的期望狀態,控制器則反覆觀察實際狀態,若有差異就進行操作使其接近宣告(調和,reconcile)。刪除1個 Pod 後實際數量變成2,因此 ReplicaSet 的控制器會建立新的 Pod 回到3個。因節點故障而失去 Pod 時,也會以同樣的機制在其他節點上重新建立 Pod。真正想減少 Pod 數量時,不是刪除 Pod,而是變更 Deployment 的 replicas。

常見問題

Docker 與 Kubernetes 有什麼不同?

Docker 主要是在1台機器上建置映像檔並執行容器的工具。Kubernetes 則是跨越許多機器,管理在哪個節點執行、執行幾個、如何更新的平台。Kubernetes 使用以 Docker 等建置的標準格式映像檔來執行容器。

小型系統也應該使用 Kubernetes 嗎?

不一定。Kubernetes 在高可用性、自動恢復與管理大量服務上有優勢,但營運叢集需要知識與心力。規模小時,在1台機器上執行容器,或使用雲端的託管容器執行服務,可能更合適。

解析中的「Kubernetes」

出現「Kubernetes」的題目(10題)

  1. 在 Kubernetes 中,作為部署與管理的最小單位,把1個以上的容器組合在一起並讓它們共用同一IP位址與磁碟區的是下列何者?
  2. 在 Kubernetes 中,指定 replicas: 3 的 Deployment 有3個 Pod 在執行。以 kubectl delete pod 刪除其中1個 Pod 時發生的事,下列何者正確?
  3. 在 Kubernetes 的 Deployment 中,把 Pod 範本中的容器映像檔改成新版本。在預設的更新方式(RollingUpdate)下發生的事,下列何者正確?
  4. 在 Kubernetes 中,Pod 每次重新建立時IP位址都會改變。讓其他應用程式能以不變的名稱與位址,連線到以標籤選出的多個 Pod 並分散負載的資源,是下列何者?
  5. 在 Kubernetes 叢集中,希望把到達同一個主機名稱的 HTTPS 要求中,路徑以 /api 開頭的分配給 api 的 Service,其他的分配給 web 的 Service。適合用來訂定這個分配規則的資源是下列何者?
  6. 把資料庫的密碼存放在 Kubernetes 的 Secret 中。關於 Secret 的說明,下列何者正確?
  7. 在 Kubernetes 上的 Web 應用程式中,讓 liveness 探測的檢查處理連相依的資料庫能否連線都一併檢查。這個設定可能發生的問題,下列何者最適當?
  8. 在 Kubernetes 的 HorizontalPodAutoscaler 中,把 Pod 的CPU使用率目標設為70%,Pod 數的範圍設為1~10。目前5個 Pod 的平均CPU使用率為30%。以 ⌈目前數量 × 目前使用率 ÷ 目標使用率⌉(⌈ ⌉ 為無條件進位)求所需 Pod 數時,所需的 Pod 數為下列何者?
  9. 在 Kubernetes 中,關於為容器設定的資源 requests 與 limits,下列何者正確?
  10. 如上所示,不把資料庫的連線目標寫進映像檔,而是在啟動容器時以環境變數傳入。這個設計的主要優點,下列何者最適當?

相關名詞

Pod 環境變數 容器映像檔 DNS(網域名稱系統) HTTP(超文字傳輸協定) TLS 反向代理 死結(Deadlock) 不可變基礎設施 可用區域

前往名詞解釋列表