管理 Cloud Deploy 中的資訊清單

本頁面說明如何設定 Cloud Deploy,以便轉譯推送管道中的各項目標設定。

Cloud Deploy 會使用 Skaffold 算繪 Kubernetes 資訊清單。這項服務支援原始資訊清單的算繪作業,以及更進階的資訊清單管理工具,例如 HelmKustomizekpt

轉譯程序分為兩個階段:

  1. 資訊清單管理工具會產生資訊清單。

  2. Skaffold 會將資訊清單中的圖片參照替換為您要在版本中部署的圖片。

本頁面提供使用 Helm 和 Kustomize 的設定範例。

使用 Skaffold 產生設定

如果您尚未建立 Skaffold 設定檔 (skaffold.yaml),可以使用 Skaffold 根據存放區中的內容產生一個設定檔。

  1. 使用 Google Cloud CLI 安裝 Skaffold:

    gcloud components install skaffold

  2. 在包含資訊清單的存放區中執行 skaffold init

    skaffold init --skip-build

這個指令會在存放區中建立 skaffold.yaml 檔案。該檔案會參照該存放區中的資訊清單。內容如下所示:

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: sample-app
manifests:
  rawYaml:
    - k8s-manifests/deployment.yaml
    - k8s-manifests/rbac.yaml
    - k8s-manifests/redis.yaml
    - k8s-manifests/service.yaml

轉譯原始資訊清單

原始資訊清單是指未由 Helm 或 Kustomize 等工具管理的資訊清單,因此在補充及部署至叢集前,不需要進行任何預先處理。

根據預設,Cloud Deploy 會使用 skaffold render 算繪 Kubernetes 資訊清單,將未標記的映像檔名稱替換為您要部署的容器映像檔的標記映像檔名稱。接著,當您升級版本時,Cloud Deploy 會使用 skaffold apply 套用資訊清單,並將映像檔部署至 Google Kubernetes Engine 叢集。

基本設定中的 manifests 節如下所示:

manifests:
  rawYaml:
    - PATH_TO_MANIFEST

如要進一步瞭解可在此傳遞的值,請參閱 Skaffold 說明文件

使用 Helm 算繪

您可以使用 Cloud Deploy 算繪 Helm 圖表。如要這麼做,請在 Skaffold 設定檔的 deploy 節中加入 Helm 圖表詳細資料。

每個定義如下所示:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  helm:
    releases:
      - name: RELEASE_NAME
        chartPath: PATH_TO_HELM_CHART

其中:

RELEASE_NAME 是這個版本的 Helm 圖表執行個體名稱。

PATH_TO_HELM_CHART 是已封裝 Helm 圖表或未封裝 Helm 圖表目錄的本機路徑。

您可以使用其他 Helm 設定選項,如 Skaffold 說明文件所述

使用 Kustomize 算繪

您可以搭配使用 Kustomize 和 Cloud Deploy。如要這樣做,請在 skaffold.yaml 設定檔設定的 deploy 段落中,指向 Kustomization 檔案。

您可以為每個使用 Kustomize 的目標,在 skaffold.yaml 的每個對應 profile 下方加入個別的 Kustomize 設定。

每個定義如下所示:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  kustomize:
    paths:
      - PATH_TO_KUSTOMIZE

其中:

PATH_TO_KUSTOMIZE 會指向 Kustomization 檔案。預設值為 ["."]

您可以使用其他 Kustomize 設定選項,如 Skaffold 說明文件所述

為每個目標設定不同的資訊清單

通常每個目標都需要略有不同的設定。舉例來說,實際工作環境部署的副本可能比測試環境部署的副本多。

您可以將每個變化版本做為不同的 Skaffold 設定檔,為每個目標轉譯不同的資訊清單。

含有原始資訊清單的設定檔

使用原始資訊清單時,您可以根據目標將 Cloud Deploy 指向不同的檔案。您可以按照下列方式設定:

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      rawYaml:
        - prod.yaml
  - name: staging
    manifests:
      rawYaml:
        - staging.yaml

使用 Kustomize 的剖析檔

以下是使用 Kustomize 為測試環境和實際工作環境建立不同設定檔的 skaffold.yaml 範例,其中每個設定檔都會指向不同的 Kustomization:

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      kustomize:
        paths:
          - environments/prod
  - name: staging
    manifests:
      kustomize:
        paths:
          - environments/staging

在傳送管道中參照的設定檔

這些在 skaffold.yaml 中定義的設定檔,會在每個目標的提交管道設定中參照:

serialPipeline:
  stages:
  - targetId: staging-target
    profiles:
    - staging
  - targetId: prod-target
    profiles:
    - prod

在建立版本時替換特定圖片

您可以在資訊清單中使用圖片名稱的預留位置,並在建立版本時替換。

以下是資訊清單範例,其中包含圖片的預留位置:

apiVersion: v1
kind: Deployment
metadata:
  name: getting-started
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: my-app-image

建立版本時,您可以使用 --images= 旗標來識別要部署的特定映像檔。舉例來說,下列指令會建立版本,並將 SHA 限定的映像檔名稱替換為預留位置名稱:

gcloud deploy releases create test-release-001 \
  --project=test-gke-using-deployment \
  --region=us-central1 \
  --delivery-pipeline=my-gke-demo-app-1 \
  --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa

產生的轉譯資訊清單現在會參照指定的圖片,而非 my-app-image

後續步驟