本指南說明如何從 Artifact Registry 提取映像檔,並部署至 Google Kubernetes Engine。如果您想部署至自架構或第三方 Kubernetes 服務,必須先設定驗證機制,才能從 Artifact Registry 擷取映像檔。 Google Cloud 如要從 Google Cloud 以外的 Kubernetes 工作負載驗證至 Google Cloud,請參閱「使用 Kubernetes 設定 Workload Identity 聯盟」。
Google Kubernetes Engine 可直接從 Docker 存放區提取映像檔。部分版本提供預先設定的支援功能,可從 Artifact Registry Docker 存放區提取映像檔。
需求條件
本節說明與 GKE 整合時的必要條件。
權限
建立節點集區或叢集時,GKE 會使用下列預設值:
- Compute Engine 預設服務帳戶是節點的身份。
-
根據貴機構的政策設定,系統可能會自動為預設服務帳戶授予專案的編輯者角色。強烈建議您 套用
iam.automaticIamGrantsForDefaultServiceAccounts
機構政策限制,停用自動角色授予功能。如果您是在 2024 年 5 月 3 日之後建立機構,系統預設會強制執行這項限制。如果您停用自動角色授予功能,就必須決定要將哪些角色授予預設服務帳戶,然後自行授予這些角色。
如果預設服務帳戶已具有「編輯者」角色,建議您將「編輯者」角色替換為權限較低的角色。如要安全地修改服務帳戶的角色,請使用政策模擬器查看變更的影響,然後授予及撤銷適當的角色。
- 您使用預設服務帳戶建立的節點具有 Compute Engine 預設存取權範圍,包括儲存空間的唯讀存取權。您無法變更現有節點的存取權範圍。
如果您已停用授予基本編輯者角色的權限,請為 Compute Engine 預設服務帳戶授予「Artifact Registry Reader」角色 (roles/artifactregistry.reader
)。
如果您使用這些預設值,並授予 Compute Engine 預設服務帳戶 Artifact Registry Reader 角色 (roles/artifactregistry.reader
),GKE 就能從相同 Google Cloud 專案中的 Artifact Registry 存放區提取映像檔。如果您需要從節點推送映像檔、跨專案提取或推送映像檔、使用使用者提供的服務帳戶,或有其他預設設定不支援的需求,請參閱存取權控管說明文件,瞭解如何設定存取權。
如果您遇到「權限遭拒」錯誤,請參閱4xx 錯誤。
GKE 版本
下表列出建立叢集時,所需的最低 GKE 版本,這些叢集具有從相同專案中的 Docker 存放區提取容器的預設權限。
版本 | 最低所需修補程式集 |
---|---|
1.14 | 1.14.10-gke.22 |
1.15 | 1.15.9-gke.8 |
如果您使用的 GKE 版本低於最低版本,則必須設定 Kubernetes imagePullSecrets,讓 GKE 能夠擷取映像檔。
如果 GKE 位於與 Artifact Registry 不同的專案中,請授予 Artifact Registry 權限給 GKE 節點使用的服務帳戶。根據預設,節點會使用 Compute Engine 預設服務帳戶。
執行映像檔
您可以使用下列指令,在 Google Kubernetes Engine 叢集中執行 Artifact Registry 映像檔:
kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
其中:
-
LOCATION
是存放區的地區或多地區位置。 PROJECT
是您的 Google Cloud 主控台專案 ID。如果您的專案 ID 包含冒號 (:
),請參閱網域範圍專案。REPOSITORY
是儲存映像檔的存放區名稱。IMAGE
是存放區中的映像檔名稱。TAG
是您要提取的圖片版本標記。
如要進一步瞭解 Kubernetes 指令,請參閱 kubectl 總覽。
排解 containerd 節點映像檔問題
自 GKE 節點 1.19 版起,Linux 節點的預設節點映像檔為含有 containerd 的 Container-Optimized OS (cos_containerd
) 變化版本,而非含有 Docker (cos
) 的 Container-Optimized OS 變化版本。
雖然 Docker 二進位檔可在使用 containerd 做為執行階段的 Linux 節點上使用,但我們不建議使用。Docker 不會管理 Kubernetes 在容器節點上執行的容器,因此您無法使用 Docker 指令或 Docker API 查看或與執行中的 Kubernetes 容器互動。
如要針對 Linux 節點進行偵錯或疑難排解,您可以利用專為 Kubernetes 容器執行階段建構的可攜式指令列工具 (crictl
) 與 Containerd 互動。crictl
支援檢視容器和映像檔、讀取記錄檔,以及在容器中執行指令等常用功能。
詳情請參閱 crictl 使用者指南,以及 containerd 的 GKE 說明文件。
針對 Windows Server 節點,containerd 守護程序會以名為 containerd
的 Windows 服務形式執行。記錄檔可在下列記錄檔目錄中取得:C:\etc\kubernetes\logs\containerd.log
,並會顯示在 記錄檔探索工具的 LOG NAME: "container-runtime"
下方。
從公開 Artifact Registry 存放區提取
將映像檔部署至含有容器化節點的 GKE 叢集後,您可以使用 SSH 連線至 VM 執行個體,並執行 crictl
指令進行疑難排解。
公開的 Artifact Registry 存放區不需要驗證。crictl
也可以用來提取私人 Artifact Registry 存放區中的映像檔。
控制台
前往 Google Cloud 控制台的「VM Instances」(VM 執行個體) 頁面。
在虛擬機器執行個體清單中,找到您要建立連線的執行個體,然後在該列中按一下 SSH 旁邊的箭頭。
從下拉式選項中選取「在瀏覽器視窗中開啟」或所需的連線方式。
Google Cloud 控制台會開啟新的終端機視窗。使用
crictl
從 Artifact Registry 提取映像檔:crictl pull IMAGE_LOCATION:TAG
輸出內容如下:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
從 Artifact Registry 私人存放區提取映像檔時,您必須對存放區進行驗證。您可以使用存取權杖來提供憑證。
gcloud
確認您已安裝最新版 Google Cloud CLI
gcloud components update
連線至 VM:
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
更改下列內容:
PROJECT_ID
:含有 VM 的專案 IDZONE
:VM 所在的可用區名稱VM_NAME
:VM 名稱
如果已為 Google Cloud CLI 設定預設屬性,則可省略此指令中的
--project
與--zone
旗標。例如:gcloud compute ssh VM_NAME
如果您尚未建立安全殼層金鑰,SSH Keygen 會為您產生一個金鑰。輸入通關密語,或在系統提示時留空。
使用
crictl
從 Artifact Registry 提取映像檔:crictl pull IMAGE_LOCATION:TAG
輸出內容如下:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
從 Artifact Registry 私人存放區提取映像檔時,您必須對存放區進行驗證。您可以使用存取權杖來提供憑證。
從私人 Artifact Registry 存放區提取
控制台
前往 Google Cloud 控制台的「VM Instances」(VM 執行個體) 頁面。
在虛擬機器執行個體清單中,找到您要建立連線的執行個體,然後在該列中按一下 SSH 旁邊的箭頭。
從下拉式選單中選取「在瀏覽器視窗中開啟」。
Google Cloud 控制台會開啟新的終端機視窗。使用
curl
產生 Compute Engine 服務帳戶存取權憑證。curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
輸出內容如下所示:
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
從傳回的輸出內容複製
access_token
的值,但不要複製引號。使用
crictl pull --creds
和上一個步驟複製的access_token
值,擷取圖片。crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
輸出內容如下:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
gcloud
確認您已安裝最新版 Google Cloud CLI
gcloud components update
連線至 VM:
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
替換下列變數:
PROJECT_ID
:含有 VM 的專案 IDZONE
:VM 所在的可用區名稱VM_NAME
:VM 名稱
如果已為 Google Cloud CLI 設定預設屬性,則可省略此指令中的
--project
與--zone
旗標。例如:gcloud compute ssh VM_NAME
如果您尚未建立安全殼層金鑰,SSH Keygen 會為您產生一個金鑰。輸入通關密語,或在系統提示時留空。
使用
curl
產生 Compute Engine 服務帳戶存取權權杖。curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
輸出內容如下:
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
從傳回的輸出內容複製
access_token
的值,但不要複製引號。使用
crictl pull --creds
和上一個步驟複製的access_token
值,擷取圖片。crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
輸出內容如下:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
crictl
可讓開發人員在不需要設定 Kubernetes 元件的情況下,對執行階段進行偵錯。如需完整的指令清單,請參閱 crictl
說明文件和 Kubernetes 偵錯說明文件。