本頁說明如何設定 Cloud Deploy,以便轉譯推送管道中的各項目標設定。
Cloud Deploy 會使用 Skaffold 算繪 Kubernetes 資訊清單。這項服務支援算繪原始資訊清單,以及更進階的資訊清單管理工具,例如 Helm、Kustomize 和 kpt。
算繪程序分為兩個階段:
資訊清單管理工具會產生資訊清單。
Skaffold 會將資訊清單中的映像檔參照,替換為您要在發布版本中部署的映像檔。
本頁面提供使用 Helm 和 Kustomize 的設定範例。
使用 Skaffold 產生設定
如果還沒有 Skaffold 設定檔 (skaffold.yaml),可以讓 Skaffold 根據存放區內容產生一個。
使用 Google Cloud CLI 安裝 Skaffold:
gcloud components install skaffold在包含資訊清單的存放區中執行
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。
後續步驟
- 進一步瞭解 Cloud Deploy 推送管道設定。
- 試用 Cloud Deploy Skaffold 設定檔逐步操作說明。
- 進一步瞭解 Kustomize。
- 進一步瞭解 Helm。
- 進一步瞭解 Kpt
- 建議使用 Artifact Registry 儲存構件,例如 Helm 資訊套件或 Kustomization。