部署無狀態應用程式

本頁說明如何使用 Google Kubernetes Engine 部署無狀態的應用程式。

總覽

無狀態應用程式是指不會將資料或應用程式狀態儲存到叢集或永久儲存空間的應用程式。資料和應用程式狀態將留在用戶端,這使得無狀態應用程式更具擴充性。例如,當您有一個無狀態的前端應用程式,您可以部署多個備用資源以提高其可用性,並在需求較低時縮減資源,而備用資源亦不需要獨特身分識別資訊。

Kubernetes 使用 Deployment 控制器將無狀態應用程式部署為統一且非唯一的 Pod。Deployment 管理應用程式的「所需狀態」:應用程式中應執行的 Pod 數量、應執行的容器映像檔版本、應標記的 Pod 內容等等。您可以透過更新 Deployment 的 Pod 規格來動態變更所需狀態。

相較於無狀態的應用程式,有狀態的應用程式會使用永久儲存空間來儲存資料,並使用 StatefulSet 部署具有獨特識別資訊的 Pod。

事前準備

如要準備這項工作,請執行下列步驟:

  • 確認您已啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 確認您已安裝 Cloud SDK
  • 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  • 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud 更新到最新版本:
    gcloud components update
  • 確保您的容器化應用程式儲存在映像檔註冊資料庫中,如 Container Registry

  • 如果您是第一次使用 GKE,請先完成快速入門導覽課程,您將在課程中啟用 GKE API,並瞭解產品的運作方式。

剖析 Deployment

以下是簡易 Deployment 資訊清單檔案的範例:此 Deployment 會建立三個複製的 Pod (其標籤為 app=my-app),以執行儲存於 Container Registryhello-app 映像檔:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - name: hello-app
        image: gcr.io/google-samples/hello-app:1.0

其中:

  • spec: replicas: 是 Deployment 管理的複製 Pod 數量。
  • spec: template: metadata: labels: 是指派給每個 Pod 的標籤,讓 Deployment 用來管理 Pod。
  • spec: template: spec:Pod 規格,定義了每個 Pod 應該如何運行。spec: containers 包含要在每個 Pod 中執行的容器的名稱,以及應執行的容器映像檔。

如要進一步瞭解 Deployment 規格,請參閱 Deployment API 參考資料

建立 Deployment

您可以使用下列其中一個方法建立 Deployment:

  • 您可以使用 Google Cloud Platform 主控台的「工作負載」選單,從您儲存於 Container Registry 的容器映像檔建立簡易的 Deployment。
  • 您可以撰寫 Deployment 資訊清單,並執行 kubectl apply,以建立資源

kubectl 套用

您可以透過宣告方式,使用 kubectl apply 從資訊清單檔案建立和更新 Deployment。這種方法保留對使用中資源所做的更新,而不會將變更併回資訊清單檔案。

若要從資訊清單檔案建立 Deployment,請執行下列指令:

kubectl apply -f [DEPLOYMENT_FILE]

其中 [DEPLOYMENT_FILE] 是資訊清單檔案,例如 config.yaml

您也可以使用 kubectl apply -f [DIRECTORY]/ 建立資訊清單檔案中定義的所有物件 (現有物件除外)。

主控台

若要建立 Deployment,請執行下列步驟:

  1. 造訪 GCP 主控台中的 Google Kubernetes Engine「工作負載」選單。

    造訪「工作負載」選單

  2. 按一下 [部署]

  3. 在「容器映像檔」中填入容器映像檔及其版本 (例如 nginx:latest),或是按一下 [選取現有的 Google Container Registry 映像檔],然後選擇映像檔。

  4. 根據需要設定容器:新增環境變數、初始指令、應用程式名稱、命名空間和標籤。

  5. 從「叢集」下拉式選單中,選擇需要的叢集。

  6. 按一下 [部署]

檢查 Deployment

建立 Deployment 後,您可以使用下列其中一種方法進行檢查:

kubectl

若要取得 Deployment 的詳細資訊,請執行下列指令:

kubectl describe deployment [DEPLOYMENT_NAME]

其中 [DEPLOYMENT_NAME] 是 Deployment 的名稱。

若要列出 Deployment 建立的 Pod,請執行下列指令:

kubectl get pods -l [KEY]=[VALUE]

在這個指令中,-l 標記會指示 kubectl 為所有的 Pod 取得一個鍵/值標籤。例如,如果您標記了 Deployment app: my-app,您可以執行 kubectl get pods -l app=my-app 查看有該標籤的 Pod。

如要取得特定 Pod 的資訊:

kubectl describe pod [POD_NAME]

要查看 Deployment 的資訊清單,請執行下列命令:

kubectl get deployments [DEPLOYMENT_NAME] -o yaml

這個指令會以 YAML 格式顯示 Deployment 的使用中設定。

主控台

如要檢查 Deployment,請執行下列步驟:

  1. 造訪 GCP 主控台的 Google Kubernetes Engine「工作負載」選單。

    造訪「工作負載」選單

  2. 若要取得工作負載的詳細資訊,請從選單中選取需要的工作負載。

「工作負載」選單會提供幾個選單:

  • 如要查看 Deployment 的使用中設定,請按一下 [YAML]
  • 如要查看與 Deployment 相關的所有事件,請按一下 [事件]
  • 如要查看 Deployment 的修訂版本記錄,請按一下 [修訂版本記錄]

更新 Deployment

您可以將更新發佈到 Deployment 的 Pod 規格,如映像檔、資源用量/要求,或設定等。

您可以使用下列方法更新 Deployment:

  • 您可以使用 GCP 主控台「工作負載」選單中的「滾動式更新」選單與 YAML 編輯器。
  • 您可以在資訊清單中進行變更,並使用 kubectl apply 進行套用。
  • 您可以使用 kubectl set 更新 Pod 規格的 imageresourcesselector 欄位。
  • 您可以直接從殼層或在偏好的編輯器中使用 kubectl edit 更新 Deployment。

kubectl 套用

您可以「套用」新的或更新過的資訊清單檔案來更新 Deployment。這樣的做法適用於對 Deployment 進行多個變更的情況,像是資源調度,或是指定應用程式的新「版本」等。

若要更新 Deployment,請執行下列指令:

kubectl apply -f [DEPLOYMENT_FILE]

其中 [DEPLOYMENT_FILE] 是更新過的資訊清單檔案。

kubectl apply 指令會將資訊清單檔案套用至資源。如果指定的資源不存在,則這個指令會建立該資源。

kubectl 集

您可以使用 kubectl set 變更 Deployment 的映像檔、資源 (要求或限制) 或選取器欄位。

如要變更 Deployment 的映像檔,請執行下列指令:

kubectl set image deployment [DEPLOYMENT_NAME] [IMAGE] [IMAGE]:[TAG]

例如,若要將 Deployment 從 nginx 版本 1.7.9 更新到 1.9.1,請執行下列指令:

kubectl set image deployment nginx nginx=nginx:1.9.1

主控台

您可以在「工作負載」選單中找到「滾動式更新」選單。

如要存取 Deployment 的「滾動式更新」選單,請執行下列步驟:

  1. 造訪 GCP 主控台中的 Google Kubernetes Engine「工作負載」選單。

    造訪「工作負載」選單

  2. 從選單選取所需的工作負載。

  3. 依序按一下 [動作] > [滾動式更新]

您可以對 Deployment 的更新策略進行下列變更:

  • Minimum seconds ready (最短準備完成秒數):指定新建立的 Pod 準備完成可以開始使用的最短秒數。
  • Maximum surge (可建立的 Pod 數量上限):此為選填欄位,指定可建立的 Pod 數量除以需要的 Pod 數量的上限。該值可以是絕對值或百分比。
  • Maximum unavailable (無法使用的 Pod 數量上限):此為選填欄位,指定更新過程中可以停機的 Pod 數量上限。該值可以是絕對值或百分比。

    如要編輯現有的容器:

    1. 在「滾動式更新」選單中選取容器,並展開其選單。
    2. 如要變更容器名稱,請編輯 [容器名稱] 欄位。
    3. 如要更改容器映像檔或版本,請編輯 [映像檔名稱] 欄位。
    4. 按一下 [完成] 以保存變更。
    5. 若要刪除容器,請按一下垃圾桶圖示

    若要新增容器:

    1. 在「滾動式更新」選單中,按一下 [新增容器]
    2. 使用以下格式:[IMAGE_NAME]:[IMAGE_VERSION],在「映像檔名稱」 欄位中填入映像檔及版本。例如 nginx:1.7.9
    3. 如果需要,可以在 [容器名稱] 欄位中填入容器名稱。
    4. 按一下 [完成]
  • 按一下 [更新]。

如要編輯 Deployment 的使用中設定,請執行下列步驟:

  1. 造訪 GCP 主控台的 Google Kubernetes Engine「工作負載」選單。

    造訪「工作負載」選單

  2. 選取需要的工作負載。

  3. 按一下 [編輯]

  4. 使用編輯器,對物件進行您要的變更。

  5. 按一下 [儲存]

復原更新

您可以使用 kubectl rollout undo 復原更新。

您可以將正在進行或已完成的更新復原到先前版本:

kubectl rollout undo deployment my-deployment

您也可以復原到特定版本:

kubectl rollout undo deployment my-deployment --to-revision=3

調度 Deployment 資源

您可以使用 GCP 主控台或 kubectl scale 來手動調度 Deployment 的資源。

如要瞭解如何自動調度部署資源,請參閱自動調度 Deployment 的資源

kubectl

您隨時可以使用 kubectl scale 調度 Deployment 的資源。

如要手動調度 Deployment 的資源,請執行下列指令:

kubectl scale deployment [DEPLOYMENT_NAME] --replicas [NUMBER_OF_REPLICAS]

其中 [NUMBER_OF_REPLICAS] 是您所需的複製 Pod 數量。

主控台

如要調度 Deployment 的資源,請執行下列步驟:

  1. 造訪 GCP 主控台的 Google Kubernetes Engine「工作負載」選單。

    造訪「工作負載」選單

  2. 從選單選取所需的工作負載。

  3. 依序按一下 [動作] > [調度資源]

  4. 在 [備用資源] 欄位輸入您所需的備用資源數量。

  5. 按一下 [調度資源]

刪除 Deployment

您可以使用 GCP 主控台或 kubectl delete 刪除 Deployment。

kubectl

若要刪除 Deployment,請執行下列指令:

kubectl delete deployment [DEPLOYMENT_NAME]

主控台

如要刪除 Deployment,請執行下列步驟:

  1. 造訪 GCP 主控台的 Google Kubernetes Engine「工作負載」選單。

    造訪「工作負載」選單

  2. 從選單中選取需要的工作負載。

  3. 按一下 [刪除]

  4. 在確認對話方塊中,按一下 [刪除]

後續步驟

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

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

這個網頁
Kubernetes Engine 說明文件