部署

本頁面說明 Kubernetes 部署物件及其在 Google Kubernetes Engine 上的使用方式。

什麼是部署?

「部署」代表一組沒有獨特身分識別資訊的多個相同 Pod。部署會執行應用程式的多個備用資源,並自動取代失敗或無法回應的執行個體。透過這種方式,部署可協助確保應用程式可以有一或多個執行個體處理使用者要求。部署是由 Kubernetes 部署控制器代管。

部署會使用 Pod 範本,其中包含 Pod 的規格。Pod 規格會決定每個 Pod 的型態:應在其容器內執行哪些應用程式、Pod 應掛接哪些磁碟區、其標籤等等。

部署的 Pod 範本變更時,系統會自動一次建立一個新的 Pod。

使用模式

部署非常適合使用掛接在多個備用資源上的 ReadOnlyMany 或 ReadWriteMany 磁碟區的無狀態應用程式,但不適合使用 ReadWriteOnce 磁碟區的工作負載。針對使用 ReadWriteOnce 磁碟區的有狀態應程式,請使用 StatefulSets。StatefulSets 是專門用來部署有狀態應用程式及叢集應用程式,以將資料儲存到永久儲存空間 (如 Compute Engine 永久磁碟)。StatefulSets 適合用來部署 Kafka、MySQL、Redis、ZooKeeper,以及其他需要專屬永久身分和穩定主機名稱的應用程式。

建立部署

您可以使用 kubectl runkubectl applykubectl create 指令來建立部署

建立程序完成後,部署可確保隨時都有所需數量的 Pod 正在執行中且可供使用。部署會自動取代失敗或已從節點中移除的 Pod。

下列範例為 YAML 格式的部署資訊清單檔案:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

在本範例中:

  • 建立名為 nginx 的部署,由 metadata: name 欄位指示。
  • 部署建立三個複製的 Pod,由 replicas 欄位指示。
  • Pod 範本或 spec: template 欄位指示已為 Pod 加上 app: nginx 標籤。
  • Pod 範本規格或 template: spec 欄位指示 Pod 執行 nginx 容器,而此容器執行的是 1.7.9 版的 nginx Docker Hub 映像檔。
  • 部署會開啟通訊埠 80 供 Pod 使用。

總結來說,Pod 範本包含下列指示,適用於此部署所建立的 Pod:

  • 每個 Pod 均加上 app: nginx 標籤。
  • 建立一個容器並命名為 nginx
  • 執行 1.7.9 版的 nginx 映像檔。
  • 開啟通訊埠 80 以傳送和接收流量。

如要進一步瞭解如何建立部署,請參閱建立部署

更新部署

您可以透過變更部署的 Pod 範本規格來更新部署。變更規格欄位會自動觸發更新推行。您可以在 Google Cloud Platform 主控台中使用 kubectl、Kubernetes API 或 GKE 工作負載選單。

根據預設,當部署觸發更新時,部署即會停止 Pod,將 Pod 的數量逐漸減至零,然後排除並終止 Pod。接著,部署會使用更新後的 Pod 範本來啟動新的 Pod。

執行中的新 Pod 數量足夠時,系統才會移除舊 Pod,並且在移除足夠數量的舊 Pod 後,才會建立新的 Pod。如要查看 Pod 的啟動和移除順序,您可以執行 kubectl describe deployments

部署可確保執行中的備用資源數量比所需數量至少少一個,因此最多只會有一個 Pod 無法使用。同樣地,部署也可確保備用資源數量比所需數量至少多出一個,因此執行中的 Pod 數量只會比所需數量多出一個。

您可以使用 kubectl rollout undo 指令來復原更新,也可以使用 kubectl rollout pause 暫時停止部署。

管理部署

以下是部署的常見管理工作清單:

狀態和生命週期

部署的生命週期可分成三種狀態:進行中、完成或失敗。

「進行中」狀態表示部署正在執行啟動 Pod 或調度 Pod 資源等的工作。

「完成」狀態表示部署已成功完成其工作、所有執行中的 Pod 均採用最新規格且可供使用,並且沒有任何舊的 Pod 仍在執行中。

「失敗」狀態表示部署發生一或多個問題,造成部署無法完成工作。部分問題的發生原因包括配額或權限不足、映像檔提取錯誤、限制範圍或執行階段錯誤。若要調查部署失敗的原因,您可以執行 kubectl get deployment [DEPLOYMENT+NAME] -o yaml 並檢查 status: conditions 欄位中的訊息。

您可以使用 kubectl rollout status 指令監控部署進度或檢查其狀態。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件