本頁面說明如何將新服務和新修訂版本部署到 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
控制台
如何部署容器映像檔:
前往 Google Cloud 控制台的 Knative Serving:
按一下「Create service」(建立服務),顯示「Create service」(建立服務) 頁面。
格式:
從下拉式選單中,選取服務可用的其中一個 GKE 叢集。
輸入所需的服務名稱。每個區域和專案或每個叢集的服務名稱不得重複。服務名稱一經設定即無法變更。
在「連線」下方:
- 如果您只要將存取權限制在其他 Knative 服務或使用 Istio 之叢集中的服務,請選取「內部」。
- 選取「外部」,允許外部存取服務
請注意,您隨時都可以按照變更服務連線設定的說明,變更連線選項。
點選「下一步」,繼續填寫服務建立表單的第二頁。
格式:
您已將服務部署到啟用 Knative serving 的叢集。
指令列
如何部署容器映像檔:
執行
gcloud run deploy
指令:gcloud run deploy SERVICE --image IMAGE_URL
將 SERVICE 替換為要部署的服務名稱。如果指定的服務不存在,系統會建立新服務。
將 IMAGE_URL 替換為容器映像檔的參照,例如
gcr.io/cloudrun/hello
。其他部署選項:
如要部署到預設以外的命名空間,請使用
--namespace
參數指定該命名空間。如要部署到預設設定以外的位置,請使用
--cluster
和--cluster-location
參數指定叢集的name
和location
: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
等待部署作業完成。成功完成時,畫面會顯示成功訊息,還有已部署服務的網址。
YAML
您可以將服務規格儲存在 YAML
檔案中,然後使用 Google Cloud CLI 部署。
建立新的
service.yaml
檔案,並加入以下內容:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
取代
- SERVICE 改為 Knative serving 服務名稱
- IMAGE 改為容器映像檔的網址。
您也可以指定更多設定,例如環境變數或記憶體限制。
使用下列指令部署新服務:
gcloud run services replace service.yaml
部署現有服務的新版本
您可以使用 Google Cloud 主控台、gcloud
指令列或 YAML 設定檔部署新修訂版本。
請注意,即使容器映像檔並無更動,變更任何設定也會導致建立新的修訂版本。每個建立的修訂版本都不可變更。
按一下分頁標籤,瞭解如何使用自選工具。
主控台
如何部署現有服務的新修訂版本:
前往 Google Cloud 控制台的 Knative Serving:
在服務清單中找出您要更新的服務後在上面按一下,開啟該服務的詳細資料。
按一下「編輯及部署新的修訂版本」。隨即會顯示修訂版本部署表單:
如有需要,可提供您要部署新容器映像檔的網址。
(選用) 設定:
如要將所有流量導向新修訂版本,請勾選標示為「立即提供這個修訂版本」的核取方塊。如要逐步推出新的修訂版本,請取消勾選該核取方塊。這樣一來,部署作業完成後,系統就不會將流量導向新的修訂版本。請按照逐步推出的操作說明進行後續步驟。
按一下「DEPLOY」(部署),然後等待部署作業完成。
指令列
如何部署容器映像檔:
執行
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
參數指定叢集的name
和location
: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
等待部署作業完成。成功完成時,畫面會顯示成功訊息,還有已部署服務的網址。
YAML
您可以使用 gcloud run services describe
指令和 --format=export
標記,將現有服務的設定下載到 YAML 檔案中。然後修改該 YAML 檔案,並使用 gcloud run services replace
指令部署這些變更。請務必只修改指定的屬性。
將服務設定下載到本機工作區中名為
service.yaml
的檔案:gcloud run services describe SERVICE --format export > service.yaml
將 SERVICE 替換為 Knative 服務服務名稱。
在本地檔案中,更新
spec.template
任何子項屬性的修訂設定。部署新的修訂版本:
gcloud run services replace service.yaml
部署其他 Google Cloud 專案的映像檔
如果您已設定正確的 IAM 權限,則可部署其他 Google Cloud 專案的容器映像檔:
在 Google Cloud 控制台中,開啟 Knative 服務專案。
取得服務帳戶資訊:
如果是 Google Cloud上的叢集,請複製 Compute Engine 預設服務帳戶的電子郵件地址。 其後置字串為 @developer.gserviceaccount.com
如果是其他叢集,請建立 Google Cloud 服務帳戶 並下載憑證。 將這些憑證新增為 Kubernetes 服務帳戶的預設
imagePullSecrets
憑證。
開啟擁有您要使用之 Container Registry 的專案。
按一下「新增」即可新增主體。
在「New principals」(新增主體) 文字方塊中,貼上您之前複製的服務帳戶電子郵件。
在「Select a role」(選擇角色) 下拉式清單中,選取要從登錄檔讀取的角色:
- Artifact Registry,包括 Artifact Registry 中的 gcr.io 存放區:Artifact Registry -> Artifact Registry Reader
- Container Registry:「Storage」>「Storage 物件檢視者」
將容器映像檔部署到含有 Knative 服務服務的專案。
如要加強安全性,可以限制授予存取權:
- Artifact Registry:在儲存容器映像檔的存放區中授予角色。
- Container Registry:在儲存容器映像檔的 Cloud Storage 值區中授予角色。
從其他容器登錄檔部署私人容器映像檔
本節說明如何設定正確的權限,以便從任意私人登錄檔將容器映像檔部署至 Knative 服務。如要存取私人容器登錄檔中的容器映像檔,必須提供憑證。請注意,如要從 Container Registry (已淘汰) 或 Artifact Registry 部署私人容器映像檔,且這些映像檔與叢集位於同一個專案中,則不需要按照這些步驟操作。
如要部署私有容器映像檔,您必須建立 imagePullSecret
類型的 Kubernetes 密鑰,並將其與服務帳戶建立關聯:
建立名為
container-registry
的imagePullSecret
密鑰: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 替換為容器登錄密碼。
開啟預設服務帳戶:
kubectl edit serviceaccount default --namespace default
Kubernetes 叢集中的每個命名空間都有名為
default
的預設服務帳戶。除非您在部署 Knative 服務時另有指定,否則系統會使用這個預設服務帳戶提取容器映像檔。將新建立的
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 服務的建構和部署作業: