管理 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 資訊套件目錄的本機路徑。

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

使用 Kustomize 算繪

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

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

每個這類定義如下所示:

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

其中:

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

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

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

通常每個目標都需要略有不同的設定。舉例來說,正式版部署中的副本可能比測試版部署中的副本多。

您可以為每個目標提供不同的Skaffold 設定檔,轉譯不同的資訊清單集。

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

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

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

使用 Kustomize 設定檔

以下範例 skaffold.yaml 使用 Kustomize 為測試和正式環境設定不同的設定檔,每個設定檔都指向不同的 Kustomization:

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

推送管道中參照的設定檔

這些設定檔 (定義於 skaffold.yaml) 會在推送 pipeline 設定中,依據目標參照:

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

後續步驟