部署容器映像檔

本頁面說明如何將新服務和新修訂版本部署到 Knative 服務。

事前準備

如要使用 Google Cloud CLI,請先設定及配置指令列工具

連線至 GKE 叢集

如要將服務部署至 Knative Serving,您必須先登入,才能連線至 GKE 叢集。

如要進一步瞭解如何連線至 GKE 叢集,包括其他選項,請參閱:

部署時需要的權限

您需要 apiGroup serving.knative.dev 和 kind Service 的建立、更新和刪除權限,此外,您必須具備下列其中一個 Identity and Access Management 角色:

您可部署的映像檔

您可以部署的容器映像檔大小沒有限制。

您可以使用任何容器登錄檔中的容器,例如 Docker Hub。如要瞭解如何從 Container Registry 或 Artifact Registry 以外的登錄檔部署私人映像檔,請參閱「從其他容器登錄檔部署私人容器映像檔」。

部署新服務

您可以使用標記 (例如 gcr.io/my-project/my-image:latest) 或完全相符的摘要 (例如 gcr.io/my-project/my-image@sha256:41f34ab970ee...) 指定容器映像檔。

首次部署服務時會建立服務的第一個修訂版本。請注意修訂版本無法變更。如果您透過容器映像檔標記進行部署,這會變成摘要,而修訂版本一律會提供這個特別的摘要。

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 設定檔部署容器。

按一下分頁標籤,瞭解如何使用自選工具。

預設 gcloud 位置設定

如果您先前已在 Google Cloud CLI 的default設定中設定位置,gcloud 指令預設會使用這些值,包括:

  • compute/region
  • compute/zone
  • run/cluster
  • run/cluster_location
  • run/platform
  • run/region

執行下列 gcloud config 指令,查看 default 設定的設定:

gcloud config configurations describe default

控制台

如何部署容器映像檔:

  1. 前往 Google Cloud 控制台的 Knative Serving:

    前往 Knative serving

  2. 按一下「Create service」(建立服務),顯示「Create service」(建立服務) 頁面。

    格式:

    1. 從下拉式選單中,選取服務可用的其中一個 GKE 叢集。

    2. 輸入所需的服務名稱。每個區域和專案或每個叢集的服務名稱不得重複。服務名稱一經設定即無法變更。

    3. 在「連線」下方:

      • 如果您只要將存取權限制在其他 Knative 服務或使用 Istio 之叢集中的服務,請選取「內部」
      • 選取「外部」,允許外部存取服務

      請注意,您隨時都可以按照變更服務連線設定的說明,變更連線選項。

    4. 點選「下一步」,繼續填寫服務建立表單的第二頁。

      格式:

      1. 在「Container image URL」(容器映像檔網址) 文字方塊中,提供支援的登錄檔中的映像檔網址,例如: us-docker.pkg.dev/cloudrun/container/hello:latest

      2. (選用) 按一下「顯示進階設定」和後續的 分頁標籤,設定下列項目:

      3. 按一下「建立」,將映像檔部署到 Knative 服務,然後等待部署作業完成。

    您已將服務部署到啟用 Knative serving 的叢集。

指令列

如何部署容器映像檔:

  1. 執行 gcloud run deploy 指令:

    gcloud run deploy SERVICE --image IMAGE_URL

    • SERVICE 替換為要部署的服務名稱。如果指定的服務不存在,系統會建立新服務。

    • IMAGE_URL 替換為容器映像檔的參照,例如 gcr.io/cloudrun/hello

    • 其他部署選項:

      • 如要部署到預設以外的命名空間,請使用 --namespace 參數指定該命名空間。

      • 如要部署到預設設定以外的位置,請使用 --cluster--cluster-location 參數指定叢集的 namelocation

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • 您可以按照變更服務連線設定的說明,使用 --connectivity 標記設定連線選項,來指定內部或外部存取權。

      • 如要在 VMware 上使用 Knative 服務,您必須加入 --kubeconfig 參數並指定設定檔:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. 等待部署作業完成。成功完成時,畫面會顯示成功訊息,還有已部署服務的網址。

YAML

您可以將服務規格儲存在 YAML 檔案中,然後使用 Google Cloud CLI 部署。

  1. 建立新的 service.yaml 檔案,並加入以下內容:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    取代

    • SERVICE 改為 Knative serving 服務名稱
    • IMAGE 改為容器映像檔的網址。

    您也可以指定更多設定,例如環境變數或記憶體限制。

  2. 使用下列指令部署新服務:

    gcloud run services replace service.yaml

部署現有服務的新版本

您可以使用 Google Cloud 主控台、gcloud 指令列或 YAML 設定檔部署新修訂版本。

請注意,即使容器映像檔並無更動,變更任何設定也會導致建立新的修訂版本。每個建立的修訂版本都不可變更。

按一下分頁標籤,瞭解如何使用自選工具。

主控台

如何部署現有服務的新修訂版本:

  1. 前往 Google Cloud 控制台的 Knative Serving:

    前往 Knative serving

  2. 在服務清單中找出您要更新的服務後在上面按一下,開啟該服務的詳細資料。

  3. 按一下「編輯及部署新的修訂版本」。隨即會顯示修訂版本部署表單:

  4. 如有需要,可提供您要部署新容器映像檔的網址。

  5. (選用) 設定:

  6. 如要將所有流量導向新修訂版本,請勾選標示為「立即提供這個修訂版本」的核取方塊。如要逐步推出新的修訂版本,請取消勾選該核取方塊。這樣一來,部署作業完成後,系統就不會將流量導向新的修訂版本。請按照逐步推出的操作說明進行後續步驟。

  7. 按一下「DEPLOY」(部署),然後等待部署作業完成。

指令列

如何部署容器映像檔:

  1. 執行 gcloud run services update 指令:

    gcloud run services update SERVICE --image IMAGE_URL
    • 系統會自動為每個修訂版本指派修訂版本後置字元。如要指定自己的修訂版本尾碼,請新增 --revision-suffix 參數。

    • SERVICE 替換為要部署的服務名稱。如果指定的服務不存在,系統會建立新服務。

    • IMAGE_URL 替換為容器映像檔的參照,例如 gcr.io/cloudrun/hello

    • 其他部署選項:

      • 如要部署到預設以外的命名空間,請使用 --namespace 參數指定該命名空間。

      • 如要部署到預設設定以外的位置,請使用 --cluster--cluster-location 參數指定叢集的 namelocation

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • 您可以按照變更服務連線設定的說明,使用 --connectivity 標記設定連線選項,來指定內部或外部存取權。

      • 如要在 VMware 上使用 Knative 服務,您必須加入 --kubeconfig 參數並指定設定檔:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. 等待部署作業完成。成功完成時,畫面會顯示成功訊息,還有已部署服務的網址。

YAML

您可以使用 gcloud run services describe 指令和 --format=export 標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace 指令部署這些變更。請務必只修改指定的屬性。

  1. 將服務設定下載到本機工作區中名為 service.yaml 的檔案:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替換為 Knative 服務服務名稱。

    1. 在本地檔案中,更新 spec.template 任何子項屬性的修訂設定

    2. 部署新的修訂版本:

      gcloud run services replace service.yaml

部署其他 Google Cloud 專案的映像檔

如果您已設定正確的 IAM 權限,則可部署其他 Google Cloud 專案的容器映像檔:

  1. 在 Google Cloud 控制台中,開啟 Knative 服務專案。

  2. 前往「IAM」頁面

  3. 取得服務帳戶資訊:

  4. 開啟擁有您要使用之 Container Registry 的專案。

  5. 前往「IAM」頁面

  6. 按一下「新增」即可新增主體。

  7. 在「New principals」(新增主體) 文字方塊中,貼上您之前複製的服務帳戶電子郵件。

  8. 在「Select a role」(選擇角色) 下拉式清單中,選取要從登錄檔讀取的角色:

  9. 將容器映像檔部署到含有 Knative 服務服務的專案。

如要加強安全性,可以限制授予存取權:

  • Artifact Registry:在儲存容器映像檔的存放區中授予角色。
  • Container Registry:在儲存容器映像檔的 Cloud Storage 值區中授予角色。

從其他容器登錄檔部署私人容器映像檔

本節說明如何設定正確的權限,以便從任意私人登錄檔將容器映像檔部署至 Knative 服務。如要存取私人容器登錄檔中的容器映像檔,必須提供憑證。請注意,如要從 Container Registry (已淘汰) 或 Artifact Registry 部署私人容器映像檔,且這些映像檔與叢集位於同一個專案中,則不需要按照這些步驟操作。

如要部署私有容器映像檔,您必須建立 imagePullSecret 類型的 Kubernetes 密鑰,並將其與服務帳戶建立關聯:

  1. 建立名為 container-registryimagePullSecret 密鑰:

    kubectl create secret docker-registry container-registry \
      --docker-server=DOCKER_REGISTRY_SERVER \
      --docker-email=REGISTRY_EMAIL \
      --docker-username=REGISTRY_USER \
      --docker-password=REGISTRY_PASSWORD
    • DOCKER_REGISTRY_SERVER 替換為私有登錄檔的 FQDN (例如 Container Registry 的 https://gcr.io/,或 DockerHub 的 https://hub.docker.com)。
    • REGISTRY_EMAIL 替換成您的電子郵件地址。
    • REGISTRY_USER 替換為容器登錄使用者名稱。

      如果您使用 Container Registry 或 Artifact Registry,且想儲存及提取長期有效的憑證,而非傳遞短期有效的存取權憑證,請參閱「驗證方法:JSON 金鑰檔」。

    • REGISTRY_PASSWORD 替換為容器登錄密碼。

  2. 開啟預設服務帳戶:

    kubectl edit serviceaccount default --namespace default

    Kubernetes 叢集中的每個命名空間都有名為 default 的預設服務帳戶。除非您在部署 Knative 服務時另有指定,否則系統會使用這個預設服務帳戶提取容器映像檔。

  3. 將新建立的 imagePullSecret 密鑰新增至預設服務帳戶:

    imagePullSecrets:
    - name: container-registry
    

    您的服務帳戶現在應如下所示:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

現在,在目前的 default 命名空間中建立的任何新 Pod,都會定義 imagePullSecret 密鑰。

部署時啟用自動補充植入功能

如要部署服務並啟用 Istio 補充資訊植入功能,請參閱 Cloud Service Mesh 說明文件中的啟用自動補充資訊植入功能

在內部網路部署服務

如要在內部網路部署服務,您必須設定私人內部網路

後續步驟

您在部署新服務後,可以進行下列作業:

您可以使用 Cloud Build Triggers 來自動執行 Knative 服務的建構和部署作業: