本教學課程說明如何使用容器映像檔摘要,識別將容器部署至 Kubernetes 的開發人員和操作人員。容器映像檔摘要會以獨一無二且不可變動的方式識別容器映像檔。
與使用映像檔標記相比,使用映像檔摘要部署容器映像檔有幾項優點。如要進一步瞭解映像檔摘要,請先參閱使用容器映像檔摘要的隨附文件,再繼續進行本教學課程。
Kubernetes Pod 規格中容器的 image 引數會接受含有摘要的映像檔。這個引數適用於您使用 Pod 規格的任何位置,例如 Deployment、StatefulSet、DaemonSet、ReplicaSet、CronJob 和 Job 資源的 template 部分。
如要使用摘要部署映像檔,請使用映像檔名稱,後面加上 @sha256: 和摘要值。以下是使用含有摘要的映像檔的 Deployment 資源範例。Deployment 是 Kubernetes API 物件,可讓您執行多個 Pod 副本,並分散在叢集中的節點。
apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment spec: selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 ports: - containerPort: 8080
使用映像檔摘要的缺點之一是,您必須先將映像檔發布至登錄檔,才能得知摘要值。建構新映像檔時,摘要值會變更,因此每次部署時,您都需要更新 Kubernetes 資訊清單。
本教學課程說明如何使用 Skaffold、kpt、digester、kustomize、gke-deploy 和 ko 等工具,在資訊清單中使用映像檔摘要。
建議
本文說明在 Kubernetes 部署作業中使用映像檔摘要的幾種方式。本文所述工具是互補的。
舉例來說,您可以將 kpt 函式的輸出內容與 kustomize 搭配使用,為不同環境建立變化版本。Skaffold 可以
使用 ko
建構映像檔,並使用 kubectl 或 kpt 將映像檔部署至 Kubernetes 叢集。
這些工具之所以能相輔相成,是因為它們會根據 Kubernetes 資源模型 (KRM) 執行結構化編輯。這個模型可讓工具外掛,您可以逐步使用工具建立程序和管道,協助您部署應用程式和服務。
建議您根據現有的工具和流程,選擇最適合的方法:
Skaffold 可將摘要新增至圖片參照。只要稍微調整設定,即可啟用這項功能。採用 Skaffold 可帶來其他好處,例如抽象化不同工具建構及部署容器映像檔的方式。
在 Kubernetes 叢集中,將摘要工具做為變動許可 Webhook 使用,即可在所有部署作業中加入摘要,同時盡可能減少對建構和部署容器映像檔的現有程序造成影響。摘要產生器 Webhook 也簡化了二進位授權的採用,因為只需要在命名空間中新增標籤。
如果您需要靈活的工具來操控 Kubernetes 資訊清單,kpt 是絕佳選擇。摘要工具可用於kpt 管道,做為用戶端 KRM 函式。
如果您已使用 kustomize 跨環境管理 Kubernetes 資訊清單,建議您利用其映像檔轉換器,依摘要部署映像檔。
ko是建構及發布 Go 應用程式映像檔的絕佳方式,而且 Knative、TektonTekton 和 sigstoresigstore 等開放原始碼專案也使用這項工具。
如果您未使用本文所述的任何工具,建議先從 Skaffold 和摘要網路鉤子著手。Skaffold 是開發人員和發布團隊常用的工具,可與本教學課程中介紹的其他工具整合。您可以隨著需求變化,善用這些整合選項。digester Kubernetes Webhook 可為整個叢集啟用摘要式部署作業,補足 Skaffold 的不足。
目標
- 使用 Skaffold 建構及推送映像檔,並在 Kubernetes 資訊清單中插入映像檔名稱和摘要。
- 使用摘要用戶端函式和變異准入 Webhook,將摘要新增至 Kubernetes Pod 和 Pod 範本中的映像檔。
- 使用 kpt 設定器,以映像檔摘要取代 Kubernetes 資訊清單中的映像檔標記。
- 使用 kustomize 產生含有映像檔摘要的 Kubernetes 資訊清單。
- 使用
gke-deploy將 Kubernetes 資訊清單中的映像檔標記解析為摘要。 - 使用
ko建構及推送映像檔,並在 Kubernetes 資訊清單中插入映像檔名稱和摘要。
費用
在本文件中,您將使用下列 Google Cloud計費元件:
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。
事前準備
-
在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
-
建立專案:如要建立專案,您需要專案建立者角色 (
roles/resourcemanager.projectCreator),其中包含resourcemanager.projects.create權限。瞭解如何授予角色。
-
啟用 Artifact Registry API (如果尚未啟用)。
啟用 API 時所需的角色
如要啟用 API,您必須具備
serviceusage.services.enable權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。 -
在 Google Cloud 控制台中啟用 Cloud Shell。
在 Cloud Shell 中,為 Google Cloud CLI 設定預設專案:
gcloud config set project PROJECT_ID將
PROJECT_ID替換為 [專案 ID]。在 Artifact Registry 中建立容器映像檔存放區:
gcloud artifacts repositories create REPOSITORY \ --location=LOCATION \ --repository-format=docker更改下列內容:
REPOSITORY:要用於存放區的名稱,例如digest-tutorial。LOCATION:Artifact Registry 位置,例如us-central1。
為本教學課程中使用的 CLI 工具設定 Artifact Registry 位置的驗證機制:
gcloud auth configure-docker LOCATION-docker.pkg.dev
使用 Skaffold
Skaffold 是一項指令列工具,可持續開發應用程式並部署至 Kubernetes 叢集。
使用 Skaffold 建構映像檔、將映像檔推送至 Artifact Registry,並在 Kubernetes 資訊清單範本中,將 image 預留位置值替換為推送映像檔的名稱、標記和摘要:
在 Cloud Shell 中建立並前往目錄,儲存您在本節建立的檔案:
mkdir -p ~/container-image-digests-tutorial/skaffold cd ~/container-image-digests-tutorial/skaffold複製 Skaffold Git 存放區:
git clone https://github.com/GoogleContainerTools/skaffold.git前往
getting-started範例的目錄:cd skaffold/examples/getting-started簽出與 Skaffold 版本相符的 Git 標記:
git checkout $(skaffold version)查看
skaffold.yaml設定檔:cat skaffold.yaml檔案內容應如下所示:
apiVersion: skaffold/v4beta6 kind: Config build: artifacts: - image: skaffold-example manifests: rawYaml: - k8s-pod.yaml
build.artifacts部分包含預留位置圖片名稱。 Skaffold 會在輸入資訊清單檔案中尋找這個預留位置。manifests區段會告知 Skaffold 從目前目錄讀取名為k8s-pod.yaml的輸入資訊清單。如要概覽所有可用選項,請參閱
skaffold.yaml參考文件。查看 Kubernetes 資訊清單範本:
cat k8s-pod.yaml檔案如下:
apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: getting-started image: skaffold-example
image欄位中的skaffold-example預留位置值與skaffold.yaml檔案中image欄位的值相符。Skaffold 會在算繪的輸出內容中,將這個預留位置值替換為完整圖片名稱和摘要。建構映像檔並推送至 Artifact Registry:
skaffold build \ --default-repo=LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY \ --file-output=artifacts.json \ --interactive=false \ --push=true \ --update-check=false這個指令會使用下列旗標:
--file-output旗標會指定 Skaffold 儲存所建構映像檔相關資訊的檔案,包括摘要值。--push標記會指示 Skaffold 將建構的映像檔推送至--default-repo標記指定的容器映像檔登錄檔。--interactive和--update-check旗標都設為false。在非互動式環境 (例如建構管道) 中,請將這些旗標設為false,但在本機開發時,請保留預設值 (兩個旗標皆為true)。
如果您使用 Cloud Deploy 部署至 GKE,請在建立發布內容時,使用
--file-output旗標中的檔案做為--build-artifacts旗標的值。使用上一步的容器映像檔名稱、標記和摘要,算繪展開的 Kubernetes 資訊清單:
skaffold render \ --build-artifacts=artifacts.json \ --digest-source=none \ --interactive=false \ --offline=true \ --output=rendered.yaml \ --update-check=false這個指令會使用下列旗標:
--build-artifacts標記會參照上一個步驟中skaffold build指令的輸出檔案。--digest-source=none旗標表示 Skaffold 會使用--build-artifacts旗標所提供檔案中的摘要值,而不是從容器映像檔登錄檔解析摘要。--offline=true旗標表示您可以執行指令,不必存取 Kubernetes 叢集。--output標記用於指定已算繪資訊清單的輸出檔案。
查看轉譯後的資訊清單:
cat rendered.yaml輸出結果會與下列內容相似:
apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - image: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/skaffold-example:TAG@sha256:DIGEST name: getting-started
在這個輸出內容中,您會看到下列值:
TAG:Skaffold 指派給映像檔的標記。DIGEST:圖片摘要值
使用消化器
摘要會在 Kubernetes Pod 和 Pod 範本規格中,將摘要新增至容器和 init 容器映像檔。Digester 會取代使用標記的容器映像檔參照:
spec:
containers:
- image: gcr.io/google-containers/echoserver:1.10
使用映像檔摘要的參照:
spec:
containers:
- image: gcr.io/google-containers/echoserver:1.10@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
Digester 可在 Kubernetes 叢集中做為變動許可 Webhook 執行,或透過 kpt 或 kustomize 指令列工具做為用戶端 KRM 函式執行。
使用消化器 KRM 函式
在 Cloud Shell 中,建立並前往目錄,儲存您在本節中建立的檔案:
mkdir -p ~/container-image-digests-tutorial/digester-fn cd ~/container-image-digests-tutorial/digester-fn下載摘要二進位檔:
mkdir -p ${HOME}/bin export PATH=${HOME}/bin:${PATH} DIGESTER_VERSION=$(curl -sL https://api.github.com/repos/google/k8s-digester/releases/latest | jq -r .tag_name) curl -L "https://github.com/google/k8s-digester/releases/download/${DIGESTER_VERSION}/digester_$(uname -s)_$(uname -m)" --output ${HOME}/bin/digester chmod +x ${HOME}/bin/digester建立 Kubernetes Pod 資訊清單,並使用
1.10標記參照gcr.io/google-containers/echoserver映像檔:cat << EOF > pod.yaml apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOF使用 kpt 執行摘要 KRM 函式,並在目前目錄 (
.) 中使用資訊清單:kpt fn eval . --exec digester執行這項指令時,kpt 會就地更新目前目錄中的資訊清單。如果希望 kpt 在控制台顯示更新後的資訊清單,並保留資訊清單檔案,請新增
--output unwrap旗標。查看更新後的資訊清單:
cat pod.yaml檔案如下:
apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 ports: - containerPort: 8080
使用摘要器許可 Webhook
在 Cloud Shell 中,建立並前往目錄,儲存您在本節中建立的檔案:
mkdir -p ~/container-image-digests-tutorial/digester-webhook cd ~/container-image-digests-tutorial/digester-webhook使用 kind 建立本機 Kubernetes 叢集:
kind create clusterkind 是一項指令列工具,可使用 Docker 執行本機 Kubernetes 叢集。
部署摘要 Webhook:
DIGESTER_VERSION=$(curl -sL https://api.github.com/repos/google/k8s-digester/releases/latest | jq -r .tag_name) kustomize build "https://github.com/google/k8s-digester.git/manifests?ref=${DIGESTER_VERSION}" | kubectl apply -f -在 kind 叢集中建立名為
digester-demo的 Kubernetes 命名空間:kubectl create namespace digester-demo將
digest-resolution: enabled標籤新增至digester-demo命名空間:kubectl label namespace digester-demo digest-resolution=enabled摘要網路鉤子會將摘要新增至具有這個標籤的命名空間中的 Pod。
建立 Kubernetes Deployment 資訊清單,並使用
1.10標記參照映像檔gcr.io/google-containers/echoserver:cat << EOF > deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment spec: selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOF在
digester-demo命名空間中套用資訊清單:kubectl apply --filename deployment.yaml --namespace digester-demo \ --output jsonpath='{.spec.template.spec.containers[].image}{"\n"}'--output旗標會指示kubectl將映像檔名稱輸出至控制台,後面加上換行字元。輸出內容如下:gcr.io/google-containers/echoserver:1.10@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229這項輸出內容顯示,摘要網路鉤子已將映像檔摘要新增至 Deployment 資源的 Pod 範本規格。
刪除 kind 叢集,釋出 Cloud Shell 工作階段中的資源:
kind delete cluster
使用 kpt 設定器
kpt 是一種指令列工具,可管理、操控、自訂及套用 Kubernetes 資源資訊清單。
建構新映像檔時,您可以使用 kpt 函式目錄中的 create-setters 和 apply-setters KRM 函式,更新 Kubernetes 資訊清單中的映像檔摘要。
在 Cloud Shell 中建立並前往目錄,儲存您在本節建立的檔案:
mkdir -p ~/container-image-digests-tutorial/kpt cd ~/container-image-digests-tutorial/kpt在目前目錄中建立 kpt 套件:
kpt pkg init --description "Container image digest tutorial"建立 Kubernetes Pod 資訊清單,並使用
1.10標記參照gcr.io/google-containers/echoserver映像檔:cat << EOF > pod.yaml apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOF使用 kpt 為資訊清單欄位建立名為
echoimage的設定器,現有值為gcr.io/google-containers/echoserver:1.10:kpt fn eval . \ --image gcr.io/kpt-fn/create-setters@sha256:0220cc87f29ff9abfa3a3b5643aa50f18d355d5e9dc9e1f518119633ddc4895c \ -- "echoimage=gcr.io/google-containers/echoserver:1.10"查看資訊清單:
cat pod.yaml檔案如下:
apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 # kpt-set: ${echoimage} ports: - containerPort: 8080
取得容器映像檔的摘要值:
DIGEST=$(gcloud container images describe \ gcr.io/google-containers/echoserver:1.10 \ --format='value(image_summary.digest)')設定新欄位值:
kpt fn eval . \ --image gcr.io/kpt-fn/apply-setters@sha256:4d4295727183396f0c3c6a75d2560254c2f9041a39e95dc1e5beffeb49cc1a12 \ -- "echoimage=gcr.io/google-containers/echoserver:1.10@$DIGEST"執行這項指令時,kpt 會在資訊清單中就地取代
image欄位值。查看更新後的資訊清單:
cat pod.yaml檔案如下:
apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 # kpt-set: ${echoimage} ports: - containerPort: 8080
使用 kustomize 圖片轉換器
kustomize 是一項指令列工具,可讓您使用疊加層、修補程式和轉換器自訂 Kubernetes 資訊清單。
您可以使用 kustomize 映像檔轉換器,更新現有資訊清單中的映像檔名稱、標記和摘要。
下列 kustomization.yaml 片段說明如何設定圖片轉換器,針對 Pod 規格 image 值與轉換器 name 值相符的圖片,使用轉換器 digest 值:
images: - name: gcr.io/google-containers/echoserver digest: sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
如要搭配使用 kustomize 圖片轉換器和圖片摘要,請按照下列步驟操作:
在 Cloud Shell 中,建立並前往目錄,儲存您在本節中建立的檔案:
mkdir -p ~/container-image-digests-tutorial/kustomize cd ~/container-image-digests-tutorial/kustomize建立
kustomization.yaml檔案:kustomize init建立 Kubernetes 資訊清單,其中包含參照映像檔
gcr.io/google-containers/echoserver的 Pod 規格,並使用1.10標記:cat << EOF > pod.yaml apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOF在
kustomization.yaml檔案中將資訊清單新增為資源:kustomize edit add resource pod.yaml使用映像檔轉換器更新映像檔摘要:
kustomize edit set image \ gcr.io/google-containers/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229查看
kustomization.yaml檔案中的圖片轉換器:cat kustomization.yaml檔案如下:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - pod.yaml images: - digest: sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 name: gcr.io/google-containers/echoserver
查看產生的資訊清單:
kustomize build .輸出內容如下:
apiVersion: v1 kind: Pod metadata: name: echo spec: containers: - image: gcr.io/google-containers/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 name: echoserver ports: - containerPort: 8080
如要執行 kustomize 轉換器,並將產生的資訊清單套用至 Kubernetes 叢集,請使用
kubectl apply指令搭配--kustomize旗標:kubectl apply --kustomize .如要稍後套用輸出內容,可以將
kustomize build指令的輸出內容重新導向至檔案。
正在使用 gke-deploy
gke-deploy 是搭配 Google Kubernetes Engine (GKE) 使用的指令列工具。gke-deploy 會包裝 kubectl 指令列工具,並可修改您按照 Google 建議做法建立的資源。
如果您使用 gke-deploy 子指令 prepare 或 run,gke-deploy 會將映像檔標記解析為摘要,並預設將展開的資訊清單與映像檔摘要儲存在 output/expanded/aggregated-resources.yaml 檔案中。
您可以使用 gke-deploy run 同時將摘要取代為圖片標記,並將擴充資訊清單套用至 GKE 叢集。雖然這個指令很方便,但也有缺點:圖片標記會在部署時替換。您決定部署標記與實際部署標記之間的時間差,可能導致與標記相關聯的圖片有所變更,進而部署非預期的圖片。如為實際工作環境的部署作業,建議您分開執行生成和套用資訊清單的步驟。
如要將 Kubernetes Deployment 資訊清單中的映像檔標記替換為映像檔摘要,請按照下列步驟操作:
在 Cloud Shell 中,建立並前往目錄,儲存您在本節中建立的檔案:
mkdir -p ~/container-image-digests-tutorial/gke-deploy cd ~/container-image-digests-tutorial/gke-deploy安裝
gke-deploy:go install github.com/GoogleCloudPlatform/cloud-builders/gke-deploy@latest建立 Kubernetes Deployment 資訊清單,並使用
1.10標記參照映像檔gcr.io/google-containers/echoserver:cat << EOF > deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: echo-deployment spec: selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echoserver image: gcr.io/google-containers/echoserver:1.10 ports: - containerPort: 8080 EOF根據
deployment.yaml資訊清單生成擴充資訊清單:gke-deploy prepare \ --filename deployment.yaml \ --image gcr.io/google-containers/echoserver:1.10 \ --version 1.10查看展開的資訊清單:
cat output/expanded/aggregated-resources.yaml輸出內容如下:
apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/managed-by: gcp-cloud-build-deploy app.kubernetes.io/version: "1.10" name: echo-deployment namespace: default spec: selector: matchLabels: app: echo template: metadata: labels: app: echo app.kubernetes.io/managed-by: gcp-cloud-build-deploy app.kubernetes.io/version: "1.10" spec: containers: - image: gcr.io/google-containers/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 name: echoserver ports: - containerPort: 8080
在展開的資訊清單中,圖片標記會替換為摘要。
您在
gke-deploy指令中使用的--version引數,會設定展開資訊清單中 Deployment 和 Pod 範本中繼資料的app.kubernetes.io/version標籤值。如要瞭解如何搭配 Cloud Build 使用
gke-deploy,請參閱 Cloud Buildgke-deploy說明文件。
正在使用 ko
ko 是指令列工具和程式庫,用於建構 Go 容器映像檔,並部署至 Kubernetes 叢集。ko 會建構映像檔,而不使用 Docker Daemon,因此您可以在無法安裝 Docker 的環境中使用。
ko 子指令
build
會建構映像檔,並將映像檔發布至容器映像檔登錄檔,或將映像檔載入本機 Docker Daemon。
ko 子指令 resolve 會執行下列動作:
- 在您使用
--filename引數提供的 Kubernetes 資訊清單image欄位中尋找預留位置,藉此識別要建構的映像檔。 - 建構及發布映像檔。
- 將
image值預留位置替換為所建構映像檔的名稱和摘要。 - 列印展開的資訊清單。
ko 子指令 apply、create 和 run 會執行與 resolve 相同的步驟,然後使用擴充資訊清單執行 kubectl apply、create 或 run。
如要從 Go 原始碼建構映像檔,並將映像檔的摘要新增至 Kubernetes 部署資訊清單,請按照下列步驟操作:
在 Cloud Shell 中,建立並前往目錄,儲存您在本節中建立的檔案:
mkdir -p ~/container-image-digests-tutorial/ko cd ~/container-image-digests-tutorial/ko下載
ko並新增至PATH:mkdir -p ${HOME}/bin export PATH=${HOME}/bin:${PATH} KO_VERSION=$(curl -sL https://api.github.com/repos/ko-build/ko/releases/latest | jq -r .tag_name | cut -c2-) curl -L "https://github.com/ko-build/ko/releases/download/v${KO_VERSION}/ko_${KO_VERSION}_$(uname -s)_$(uname -m).tar.gz" | tar -zxC ${HOME}/bin ko在名為
app的新目錄中,建立模組名稱為example.com/hello-world的 Go 應用程式:mkdir -p app/cmd/ko-example cd app go mod init example.com/hello-world cat << EOF > cmd/ko-example/main.go package main import "fmt" func main() { fmt.Println("hello world") } EOF定義
ko用來發布圖片的圖片存放區:export KO_DOCKER_REPO=LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY本範例使用 Artifact Registry,但您也可以搭配其他容器映像檔登錄服務使用
ko。如要建構及發布應用程式映像檔,請執行下列任一步驟:
提供 Go 主要套件的路徑,為應用程式建構及發布映像檔:
ko build --base-import-paths ./cmd/ko-example選用引數
--base-import-paths表示ko會使用主要套件目錄的簡稱做為映像檔名稱。ko會以以下格式將映像檔名稱和摘要列印至stdout:LOCATION-docker.pkg.dev/PROJECT_ID/ko-example@sha256:DIGEST在這個輸出內容中,
DIGEST是映像檔摘要值。使用
ko將資訊清單預留位置,替換為所建構及發布映像檔的名稱和摘要:建立 Kubernetes Pod 資訊清單。資訊清單會使用預留位置
ko://IMPORT_PATH_OF_YOUR_MAIN_PACKAGE做為image欄位的值:cat << EOF > ko-pod.yaml apiVersion: v1 kind: Pod metadata: name: ko-example spec: containers: - name: hello-world image: ko://example.com/hello-world/cmd/ko-example EOF為應用程式建構及發布映像檔,並將資訊清單預留位置替換為映像檔名稱和摘要:
ko resolve --base-import-paths --filename ko-pod.yamlko會將資訊清單連同映像檔名稱和摘要列印至stdout:apiVersion: v1 kind: Pod metadata: name: ko-example spec: containers: - name: hello-world image: LOCATION-docker.pkg.dev/PROJECT_ID/ko-example@sha256:DIGEST
在這個輸出內容中,
DIGEST是映像檔摘要值。
清除所用資源
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的 Google Cloud 專案。或者,你也可以刪除個別資源。
刪除專案
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
刪除資源
如要保留在本教學課程中使用的 Google Cloud 專案,請刪除個別資源:
在 Cloud Shell 中,刪除您在本教學課程中建立的檔案:
cd rm -rf ~/container-image-digests-tutorial刪除 Artifact Registry 中的容器映像檔存放區:
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION --async --quiet