本頁面說明如何設定 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 圖表目錄的本機路徑。
您可以使用其他 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
。
後續步驟
- 進一步瞭解 Cloud Deploy 發布管道設定。
- 試試 Cloud Deploy Skaffold 設定檔逐步操作說明
- 進一步瞭解 Kustomize。
- 進一步瞭解 Helm。
- 進一步瞭解 Kpt
- 建議您使用 Artifact Registry 儲存構件,例如 Helm 圖表或 Kustomizations。