本教學課程適用於將容器部署至 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,在所有部署作業中加入摘要,對目前建構及部署容器映像檔的程序影響極小。此外,由於只需要在命名空間中新增標籤,因此採用二進位授權時,也更簡單方便。
如果您需要彈性工具來操控 Kubernetes 資訊清單,就很適合選用 kpt。摘要工具可用於 kpt 管道中的用戶端 KRM 函式。
如果您已使用 kustomize 管理各環境的 Kubernetes 資訊清單,建議您善用其映像檔轉換器,依摘要部署映像檔。
是建構及發布 Go 應用程式映像檔的絕佳方式,而且 Knative、Tekton 和 sigstore 等開放原始碼專案也使用這項工具。
ko
如果您未使用本文所述的任何工具,建議您先從 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。
完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。
事前準備
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry API.
-
In the Google Cloud console, activate 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
:圖片摘要值
使用摘要器
Digester 會在 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 執行,也可以做為用戶端 KRM 函式,搭配 kpt 或 kustomize 指令列工具執行。
使用消化器 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
建立參照映像檔
gcr.io/google-containers/echoserver
的 Kubernetes 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
使用 kpt 執行 digester 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 cluster
kind 是一項指令列工具,可使用 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
摘要 Webhook 會將摘要新增至具有這個標籤的命名空間中的 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
這項輸出內容顯示,摘要器 Webhook 已將映像檔摘要新增至 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"
建立參照映像檔
gcr.io/google-containers/echoserver
的 Kubernetes 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
使用 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 image transformer,更新現有資訊清單中的映像檔名稱、標記和摘要。
下列 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 部署資訊清單中的映像檔標記替換為映像檔摘要,請按照下列步驟操作:
在 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
引數,會設定展開資訊清單中部署和 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.yaml
ko
會將資訊清單連同映像檔名稱和摘要列印到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 專案。或者,您也可以刪除個別資源。
刪除專案
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
刪除資源
如要保留您在本教學課程中使用的 Google Cloud 專案,請刪除個別的資源:
在 Cloud Shell 中,刪除您在本教學課程中建立的檔案:
cd rm -rf ~/container-image-digests-tutorial
刪除 Artifact Registry 中的容器映像檔存放區:
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION --async --quiet