部署至 Google Kubernetes Engine

您可以從 Artifact Registry 提取映像檔,並部署至 Google Kubernetes Engine。部分版本的 Google Kubernetes Engine 已預先設定,可直接從 Artifact Registry 的 Docker 存放區提取映像檔。

如要部署至自行託管或第三方 Kubernetes 服務,您必須先設定 Google Cloud 驗證,才能從 Artifact Registry 提取映像檔。如要從 Google Cloud以外的 Kubernetes 工作負載向 Google Cloud 進行驗證,請參閱「使用 Kubernetes 設定 Workload Identity Federation」。

需求條件

本節說明與 GKE 整合的需求。

權限

建立節點集區或叢集時,GKE 會使用下列預設值:

如果您停用授予基本編輯者角色,請將 Artifact Registry 讀取者角色 (roles/artifactregistry.reader) 授予 Compute Engine 預設服務帳戶。

如果您使用這些預設值,並將 Artifact Registry 讀取者角色 (roles/artifactregistry.reader) 授予 Compute Engine 預設服務帳戶,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 (cos_containerd) 變體的 Container-Optimized OS,而非採用 Docker (cos) 變體的 Container-Optimized OS。

雖然 Docker 二進位檔可在使用 containerd 做為執行階段的 Linux 節點上使用,但我們不建議使用。Docker 不會管理 Kubernetes 在 containerd 節點上執行的容器,因此您無法使用 Docker 指令或 Docker API,查看執行中的 Kubernetes 容器或與其互動。

如要在 Linux 節點上偵錯或排解問題,您可以使用專為 Kubernetes 容器執行階段建構的可攜式指令列工具 crictl,與 containerd 互動。crictl 支援常見功能,可查看容器和映像檔、讀取記錄,以及在容器中執行指令。

詳情請參閱 crictl 使用手冊和 containerd 的 GKE 說明文件。

如果是 Windows Server 節點,containerd daemon 會以名為 containerd 的 Windows 服務形式執行。記錄檔位於下列記錄目錄:C:\etc\kubernetes\logs\containerd.log,並顯示在 LOG NAME: "container-runtime" 下方的記錄檔探索工具中。

從公開 Artifact Registry 存放區提取

將映像檔部署至具有 containerd 節點的 GKE 叢集後,您可以使用 SSH 連線至 VM 執行個體,並執行 crictl 指令進行疑難排解。

公開 Artifact Registry 存放區不需要驗證。crictl 也可用於提取私人 Artifact Registry 存放區中的映像檔。

控制台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 在虛擬機器執行個體清單中,找到要連線的執行個體,然後點選該列中「SSH」SSH旁邊的箭頭。

    執行個體名稱旁邊的 SSH 按鈕。

  3. 從下拉式選項中選取「Open in browser window」(在瀏覽器視窗中開啟) 或您選擇的連線方法。

  4. Google Cloud 控制台會開啟新的終端機視窗。使用 crictl 從 Artifact Registry 提取映像檔:

    crictl pull IMAGE_LOCATION:TAG
    

    輸出內容如下:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    從 Artifact Registry 私人存放區提取映像檔時,您必須向存放區進行驗證。您可以使用存取權杖提供憑證。

gcloud

  1. 確認您使用的是最新版 Google Cloud CLI

    gcloud components update
    
  2. 連線至 VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    更改下列內容:

    • PROJECT_ID:VM 所在專案的 ID
    • ZONE:VM 所在的可用區名稱
    • VM_NAME:VM 名稱

    如果您已為 Google Cloud CLI 設定預設屬性,則可從這個指令中省略 --project 和 --zone 旗標。例如:

    gcloud compute ssh VM_NAME
    
  3. 如果您尚未建立安全殼層金鑰,安全殼層金鑰產生器會為您產生金鑰。系統提示時,請輸入通關密語或留空。

  4. 使用 crictl 從 Artifact Registry 提取映像檔:

    crictl pull IMAGE_LOCATION:TAG
    
  5. 輸出內容如下:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    從 Artifact Registry 私人存放區提取映像檔時,您必須向存放區進行驗證。您可以使用存取權杖提供憑證。

從私人 Artifact Registry 存放區提取

控制台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 在虛擬機器執行個體清單中,找到要連線的執行個體,然後點選該列中「SSH」SSH旁邊的箭頭。

    執行個體名稱旁邊的 SSH 按鈕。

  3. 從下拉式選單中選取「在瀏覽器視窗中開啟」。

  4. 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"}
  5. 從傳回的輸出內容中複製 access_token 的值,不含引號。

  6. 使用 crictl pull --creds 和上一步複製的 access_token 值提取映像檔。

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    輸出內容如下:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. 確認您使用的是最新版 Google Cloud CLI

    gcloud components update
    
  2. 連線至 VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    請替換下列變數:

    • PROJECT_ID:VM 所在專案的 ID
    • ZONE:VM 所在的可用區名稱
    • VM_NAME:VM 名稱

    如果您已為 Google Cloud CLI 設定預設屬性,則可從這個指令中省略 --project 和 --zone 旗標。例如:

    gcloud compute ssh VM_NAME
    
  3. 如果您尚未建立安全殼層金鑰,安全殼層金鑰產生器會為您產生金鑰。系統提示時,請輸入通關密語或留空。

  4. 使用 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"}
  5. 從傳回的輸出內容中複製 access_token 的值,不含引號。

  6. 使用 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 偵錯文件。