部署無狀態 Linux 應用程式

本頁說明如何使用 Google Kubernetes Engine (GKE) 部署無狀態 Linux 應用程式。您也可以瞭解如何部署無狀態 Windows 應用程式。

總覽

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

Kubernetes 會使用 Deployment 控制器,將無狀態應用程式部署為一致且不重複的 Pod。Deployment 會管理應用程式的所需狀態,包括應執行應用程式的 Pod 數量、應執行的容器映像檔版本,以及 Pod 應標示的標籤等。只要更新 Deployment 的 Pod 規格,即可動態變更所需狀態。

無狀態應用程式與有狀態應用程式不同,後者會使用永久儲存空間儲存資料,並使用 StatefulSets 部署具有不重複身分的 Pod。

事前準備

開始之前,請務必先完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

剖析 Deployment

以下是簡易 Deployment 資訊清單檔案的範例:這個 Deployment 會建立三個標示為 run=my-app 的複製 Pod,這些 Pod 會執行儲存在 Artifact Registry 中的 hello-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: us-docker.pkg.dev/google-samples/containers/gke/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:

  • 您可以使用 Cloud de Confiance 控制台「Workloads」選單中的「Deploy」功能,從儲存在 Artifact Registry 中的容器映像檔建立簡單的 Deployment。
  • 您可以編寫 Deployment 資訊清單,然後執行 kubectl apply 建立資源

kubectl apply

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

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

kubectl apply -f DEPLOYMENT_FILE

將 DEPLOYMENT_FILE 替換為資訊清單檔案,例如 config.yaml。

您也可以使用 kubectl apply -f DIRECTORY/,在目錄中儲存的資訊清單檔案中,建立所有物件 (現有物件除外)。

控制台

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

  1. 前往 Cloud de Confiance 控制台的「Workloads」(工作負載) 頁面。

    前往「Workloads」(工作負載)

  2. 按一下「部署」。

  3. 在「指定容器」下方,選取下列其中一個選項:

    • 現有容器映像檔:選擇 Artifact Registry 或 DockerHub 提供的容器映像檔。在「映像檔路徑」中,輸入容器映像檔的路徑和版本。

    • 新的容器映像檔:使用透過 Cloud Source Repositories 和 Cloud Build 建立的映像檔。

  4. (選用) 使用以下項目設定您的 Deployment:

    • 要傳遞到容器內的環境變數。
    • 用於自訂執行階段的容器 entrypoint 的初始指令。
  5. 依序點選「完成」和「繼續」。

  6. 在「Configuration」(設定) 專區中,為部署作業提供「Application name」(應用程式名稱),並指定要部署的 Kubernetes「Namespace」(命名空間)。

  7. (選用) 在「標籤」下方,您可以為部署項目新增 Kubernetes 標籤。

  8. 如要儲存建立這個部署項目的 YAML,以便日後更新,請按一下「查看 YAML」。將 YAML 複製並貼到檔案中,然後儲存檔案,並點選「YAML Output」(YAML 輸出) 對話方塊中的「Close」(關閉)。

  9. 從「Kubernetes Cluster」(Kubernetes 叢集) 下拉式選單中,選擇所需叢集。

  10. 點選「Deploy」(部署)。

檢查 Deployment

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

kubectl

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

kubectl describe deployment DEPLOYMENT_NAME

將 DEPLOYMENT_NAME 替換為 Deployment 名稱。

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

kubectl get pods -l KEY=VALUE

在這個指令中,-l 旗標會指示 kubectl 取得所有含有鍵值標籤的 Pod。舉例來說,如果您為 Deployment 加上 run: my-app 標籤,執行 kubectl get pods -l run=my-app 即可查看帶有該標籤的 Pod。

如要取得特定 Pod 的資訊:

kubectl describe pod POD_NAME

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

kubectl get deployments DEPLOYMENT_NAME -o yaml

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

主控台

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

  1. 前往 Cloud de Confiance 控制台的「Workloads」(工作負載) 頁面。

    前往「Workloads」(工作負載)

  2. 在工作負載清單中,按一下要檢查的部署作業名稱。

  3. 在「Deployment details」(部署詳細資料) 頁面中,執行下列任一操作:

    • 按一下「修訂版本記錄」分頁標籤,即可查看部署作業的修訂版本記錄。
    • 按一下「事件」分頁標籤,即可查看與部署作業相關的所有事件。
    • 按一下「記錄」分頁標籤,查看部署作業中的容器活動記錄。
    • 點選「YAML」YAML分頁標籤,即可查看、複製及下載 Deployment 的 YAML 資訊清單。

更新 Deployment

您可以推出 Deployment 的 Pod 規格更新,例如映像檔、資源用量/要求或設定。

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

  • 您可以透過控制台Cloud de Confiance 的「工作負載」選單,使用「滾動式更新」選單和 YAML 編輯器。
  • 您可以變更資訊清單檔案,並使用 kubectl apply 套用變更。
  • 您可以使用 kubectl set 更新 Pod 規格的 image、resources 或 selector 欄位。
  • 您可以直接從殼層或慣用的編輯器,使用 kubectl edit 更新 Deployment。

kubectl apply

您可以套用新的或更新的資訊清單檔案,藉此更新 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. 前往 Cloud de Confiance 控制台的「Workloads」(工作負載) 頁面。

    前往「Workloads」(工作負載)

  2. 在工作負載清單中,按一下要修改的 Deployment 名稱。

  3. 依序點選 「動作」>「滾動式更新」。

  4. 為更新策略設定下列選用參數:

    • 最短準備完成秒數:指定新建 Pod 準備完成 (即系統認定為可用時) 的最短秒數。
    • 節點數擴充上限:指定可建立的 Pod 數量上限,這個值會與所需 Pod 數量比較。該值可以是絕對值或百分比。
    • 無法使用數量的上限:指定更新程序期間無法使用的 Pod 數量上限。該值可以是絕對值或百分比。
  5. 在「容器映像檔」下方,輸入更新後容器映像檔的路徑和版本。

  6. 按一下「Update」。

復原更新

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

您可以將進行中或已完成的更新復原為先前的修訂版本:

kubectl rollout undo deployment my-deployment

您也可以復原為特定修訂版本:

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

調度 Deployment 資源

您可以使用 Cloud de Confiance 控制台或 kubectl scale 手動調度 Deployment 的資源。

您可以進一步瞭解如何自動調度 Deployment 的資源。

kubectl

您隨時可以使用 kubectl scale 擴充 Deployment。

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

kubectl scale deployment DEPLOYMENT_NAME --replicas NUMBER_OF_REPLICAS

將 NUMBER_OF_REPLICAS 替換為所需的複製 Pod 數量。

控制台

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

  1. 前往 Cloud de Confiance 控制台的「Workloads」(工作負載) 頁面。

    前往「Workloads」(工作負載)

  2. 在工作負載清單中,按一下要修改的 Deployment 名稱。

  3. 依序點選 「動作」>「規模」>「編輯備用資源」

  4. 輸入 Deployment 的新「副本」數量。

  5. 按一下 [Scale] (擴充)。

刪除部署作業

您可以使用 Cloud de Confiance 控制台或 kubectl delete 刪除部署作業。

kubectl

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

kubectl delete deployment DEPLOYMENT_NAME

主控台

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

  1. 前往 Cloud de Confiance 控制台的「Workloads」(工作負載) 頁面。

    前往「Workloads」(工作負載)

  2. 在工作負載清單中,選取要刪除的一或多個部署項目。

  3. 按一下「刪除」圖示 。

  4. 當系統提示時,按一下「Delete」(刪除)。

後續步驟