本頁面說明如何將容器映像檔部署到新的 Cloud Run 服務,或現有 Cloud Run 服務的新修訂版本。
部署時,Cloud Run 會匯入容器映像檔。 只要容器映像檔用於提供服務的修訂版本,Cloud Run 就會保留這份副本。啟動新的 Cloud Run 執行個體時,系統不會從容器存放區提取容器映像檔。
如需部署新服務的逐步說明範例,請參閱「部署範例容器快速入門導覽課程」。
事前準備
如果專案受限於網域限制組織政策,禁止未經驗證的叫用,您必須按照「測試私人服務」一節的說明存取已部署的服務。
必要的角色
如要取得部署 Cloud Run 服務所需的權限,請要求管理員授予您下列 IAM 角色:
-
Cloud Run 開發人員 (
roles/run.developer) 在 Cloud Run 服務上 -
服務帳戶使用者 (
roles/iam.serviceAccountUser) 服務身分 -
Artifact Registry 讀取者 (
roles/artifactregistry.reader) 已部署容器映像檔的 Artifact Registry 存放區 -
如果您使用跨專案服務帳戶部署服務:
服務身分識別的「服務帳戶憑證建立者」 (
roles/iam.serviceAccountTokenCreator)
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。
支援的容器登錄和映像檔
您可以直接使用儲存在 Artifact Registry 或 Docker Hub 的容器映像檔。Google 建議使用 Artifact Registry。 Docker Hub 映像檔最多會快取一小時。
如要使用其他公開或私人註冊資料庫 (例如 JFrog Artifactory、Nexus 或 GitHub Container Registry) 的容器映像檔,請設定 Artifact Registry 遠端存放區。
只有在部署熱門容器映像檔 (例如 Docker 官方映像檔或 Docker 贊助的 OSS 映像檔) 時,才應考慮使用 Docker Hub。如要提高可用性,Google 建議使用 Artifact Registry 遠端存放區部署這些 Docker Hub 映像檔。
從 Docker Hub 或 Artifact Registry 遠端存放區 (使用外部登錄檔) 部署時,Cloud Run 不支援大於 9.9 GB 的容器映像檔層。
部署新服務
您可以使用標記 (例如 us-docker.pkg.dev/my-project/container/my-image:latest) 或完全相符的摘要 (例如 us-docker.pkg.dev/my-project/container/my-image@sha256:41f34ab970ee...) 指定容器映像檔。
首次部署服務時會建立服務的第一個修訂版本。請注意修訂版本無法變更。如果您透過容器映像檔標記進行部署,這會變成摘要,而修訂版本一律會提供這個特別的摘要。
按一下分頁標籤,瞭解如何使用自選工具。
主控台
如何部署容器映像檔:
前往 Google Cloud 控制台的 Cloud Run 頁面:
按一下「Deploy container」(部署容器),顯示「Create service」(建立服務) 表單。
在表單中選取部署選項:
如要手動部署容器,請選取「透過現有的容器映像檔部署單一修訂版本」,並指定容器映像檔。
如要自動執行持續部署作業,請選取「Continuously deploy new revisions from a source repository」(持續透過原始碼存放區部署新的修訂版本),然後按照持續部署作業的說明操作。
輸入所需服務名稱。服務名稱不得超過 49 個字元,且每個區域和專案的名稱不得重複。服務名稱一經設定即無法變更,而且會公開顯示。
視需要設定帳單。
在「服務調度資源」下方,如果您使用預設的 Cloud Run 自動調度資源,可以選擇指定最少執行個體數。如果您使用手動調整資源配置,請指定服務的執行個體數量。
視需要在表單中設定 Ingress 設定。
在「驗證」下方,設定下列項目:
- 如要建立公用 API 或網站,請選取「允許公開存取」。如果選取這個選項,系統會將「IAM 叫用者」角色指派給特殊 ID
allUser。您可以在建立服務之後使用 IAM 編輯這項設定。 - 如要透過驗證保護安全服務,請選取「需要驗證」。
- 如要建立公用 API 或網站,請選取「允許公開存取」。如果選取這個選項,系統會將「IAM 叫用者」角色指派給特殊 ID
按一下「容器、磁碟區、網路與安全性」,在適當的分頁中設定其他選用設定:
設定完服務後,請按一下「Create」(建立),將映像檔部署到 Cloud Run,然後等待部署作業完成。
按一下畫面顯示的網址連結,開啟您所部署服務的穩定專屬端點。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如何部署容器映像檔:
請執行下列指令:
gcloud run deploy SERVICE --image IMAGE_URL更改下列內容:
- SERVICE:要部署的服務名稱。服務名稱不得超過 49 個字元,且每個區域和專案的名稱不得重複。如果服務尚未存在,這個指令會在部署期間建立服務。您可以完全省略這個參數,這樣系統會提示您輸入服務名稱。
- IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。請注意,如果未提供--image標記,部署指令會嘗試從原始碼部署。
如要建立公開 API 或網站,請使用
--allow-unauthenticated標記,允許公開存取服務。這會將 Cloud Run 叫用者 IAM 角色指派給allUsers。您也可以指定--no-allow-unauthenticated來禁止公開存取。如果省略任一標記,在執行deploy指令時系統會提示您進行確認。等待部署作業完成。成功完成時,畫面會顯示成功訊息,還有已部署服務的網址。
請注意,如要部署到「不是」透過
run/regiongcloud屬性設定的位置,請使用以下指令:gcloud run deploy SERVICE --region REGION建立新的
service.yaml檔案,並加入以下內容:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
更改下列內容:
- SERVICE:Cloud Run 服務的名稱。 服務名稱不得超過 49 個字元,且每個區域和專案的名稱不得重複。
- IMAGE:容器映像檔的網址。
您也可以指定更多設定,例如環境變數或記憶體限制。
使用下列指令部署新服務:
gcloud run services replace service.yaml如要允許未經驗證的存取服務,可以公開服務。
- PROJECT-ID: Google Cloud 專案 ID
- REGION: Google Cloud 區域
- SERVICE:Cloud Run 服務的名稱。服務名稱不得超過 49 個字元,且每個區域和專案的服務名稱不得重複。
- IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG 在專案目錄中,建立包含服務定義的
compose.yaml檔案。services: web: image: IMAGE ports: - "8080:8080"
將 IMAGE 替換為容器映像檔的網址。
您也可以指定更多設定選項,例如環境變數、密鑰和磁碟區掛接。
如要部署服務,請執行
gcloud beta run compose up指令:gcloud beta run compose up compose.yaml回應所有提示,安裝必要元件或啟用 API。
y選用:公開發布服務,允許未經驗證的存取。
- ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶必須具備部署服務的 IAM 權限。舉例來說,如果您已登入 gcloud,可以使用
gcloud auth print-access-token擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。 - IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。 - SERVICE:要部署的服務名稱。 服務名稱不得超過 49 個字元,且每個區域和專案的服務名稱不得重複。
- REGION:服務的 Google Cloud 區域。
- PROJECT-ID: Google Cloud 專案 ID。
YAML
您可以將服務規格儲存在 YAML 檔案中,然後使用 gcloud CLI 部署。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定中,將下列項目新增至google_cloud_run_v2_service 資源: provider "google" {
project = "PROJECT-ID"
}
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
client = "terraform"
template {
containers {
image = "IMAGE_URL"
}
}
}
resource "google_cloud_run_v2_service_iam_member" "noauth" {
location = google_cloud_run_v2_service.default.location
name = google_cloud_run_v2_service.default.name
role = "roles/run.invoker"
member = "allUsers"
}
更改下列內容:
這項設定允許公開存取 (相當於 --allow-unauthenticated)。如要將服務設為私有,請移除 google_cloud_run_v2_service_iam_member 節。
撰寫
您可以將 Compose 規格儲存在 YAML 檔案中,然後使用單一 gcloud 指令,將其部署為 Cloud Run 服務。
如要將 compose.yaml 檔案部署為 Cloud Run 服務,請按照下列步驟操作:
部署完成後,畫面會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看正在執行的容器。您可以在 Google Cloud 控制台停用預設驗證。
用戶端程式庫
如要從程式碼部署新服務,請按照下列步驟操作:
REST API
如要部署新服務,請將 POST HTTP 要求傳送至 Cloud Run Admin API service 端點。
例如使用 curl:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X POST \ -d '{template: {containers: [{image: "IMAGE_URL"}]}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services?serviceId=SERVICE
更改下列內容:
Cloud Run 位置
Cloud Run 具有「地區性」,這表示執行 Cloud Run 服務的基礎架構位於特定地區,並由 Google 代管,可為該地區內所有區域提供備援功能。
選擇 Cloud Run 服務的執行地區時,請將延遲時間、可用性或耐用性需求做為主要考量。一般而言,您可以選擇最靠近使用者的地區,但您應考量 Cloud Run 服務所使用的其他 Google Cloud產品位置。使用分散在不同位置的 Google Cloud 產品,可能會影響服務的延遲時間和費用。
Cloud Run 可在下列地區使用:
採用級別 1 定價
asia-east1(臺灣)asia-northeast1(東京)asia-northeast2(大阪)asia-south1(印度孟買)asia-southeast3(曼谷)europe-north1(芬蘭)二氧化碳排放量低
europe-north2(斯德哥爾摩)二氧化碳排放量低
europe-southwest1(馬德里)二氧化碳排放量低
europe-west1(比利時)二氧化碳排放量低
europe-west4(荷蘭)二氧化碳排放量低
europe-west8(米蘭)europe-west9(巴黎)二氧化碳排放量低
me-west1(特拉維夫)northamerica-south1(墨西哥)us-central1(愛荷華州)二氧化碳排放量低
us-east1(南卡羅來納州)us-east4(北維吉尼亞州)us-east5(哥倫布)us-south1(達拉斯)二氧化碳排放量低
us-west1(奧勒岡州)二氧化碳排放量低
採用級別 2 定價
africa-south1(約翰尼斯堡)asia-east2(香港)asia-northeast3(韓國首爾)asia-southeast1(新加坡)asia-southeast2(雅加達)asia-south2(印度德里)australia-southeast1(雪梨)australia-southeast2(墨爾本)europe-central2(波蘭華沙)europe-west10(柏林)europe-west12(杜林)europe-west2(英國倫敦)二氧化碳排放量低
europe-west3(德國法蘭克福)europe-west6(瑞士蘇黎世)二氧化碳排放量低
me-central1(杜哈)me-central2(達曼)northamerica-northeast1(蒙特婁)二氧化碳排放量低
northamerica-northeast2(多倫多)二氧化碳排放量低
southamerica-east1(巴西聖保羅)二氧化碳排放量低
southamerica-west1(智利聖地牙哥)二氧化碳排放量低
us-west2(洛杉磯)us-west3(鹽湖城)us-west4(拉斯維加斯)
如果您已建立 Cloud Run 服務,即可在 Google Cloud 控制台的 Cloud Run 資訊主頁中查看地區。
部署現有服務的新版本
您可以使用 Google Cloud 控制台、gcloud指令列或 YAML 設定檔部署新修訂版本。
請注意,即使容器映像檔並無更動,變更任何設定也會導致建立新的修訂版本。每個建立的修訂版本都不可變更。
部署時,Cloud Run 會匯入容器映像檔。 只要容器映像檔用於提供服務的修訂版本,Cloud Run 就會保留這份副本。
按一下分頁標籤,瞭解如何使用自選工具。
主控台
如何部署現有服務的新修訂版本:
前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:
在服務清單中找出要更新的服務,然後按一下開啟該服務的詳細資料。
按一下「編輯及部署新的修訂版本」,隨即會顯示修訂版本部署表單。
如要將所有流量傳送至新修訂版本,請選取「立即提供這個修訂版本」。如要逐步推出新修訂版本,請取消勾選該核取方塊。這樣一來,系統就不會將任何流量傳送至新修訂版本。部署後,請按照逐步推出的指示操作。
按一下「Deploy」(部署),然後等待部署完成。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如何部署容器映像檔:
執行下列指令:
gcloud run deploy SERVICE --image IMAGE_URL更改下列內容:
- SERVICE:要部署的服務名稱。您可以將這個參數完全省略,這樣系統會提示您輸入服務名稱。
- IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。
系統會自動為新修訂版本指派修訂版本後置字元。如要提供自己的修訂版本尾碼,請使用 gcloud CLI 參數 --revision-suffix。
等待部署作業完成。成功完成時,畫面會顯示成功訊息,還有已部署服務的網址。
變更設定檔。
套用 Terraform 設定:
terraform apply輸入
yes,確認要套用所述動作。在專案目錄中,建立包含服務定義的
compose.yaml檔案。services: web: image: IMAGE ports: - "8080:8080"
將 IMAGE 替換為容器映像檔的網址。
您也可以指定更多設定選項,例如環境變數、密鑰和磁碟區掛接。
如要部署服務,請執行
gcloud beta run compose up指令:gcloud beta run compose up compose.yaml回應所有提示,安裝必要元件或啟用 API。
y選用:公開發布服務,允許未經驗證的存取。
- ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶具有部署修訂版本的 IAM 權限。舉例來說,如果您已登入 gcloud,可以使用
gcloud auth print-access-token擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。 - IMAGE_URL:容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG。 - SERVICE:要部署的服務名稱。
- REGION:服務的 Google Cloud 區域。
- PROJECT-ID: Google Cloud 專案 ID。
YAML
如要下載或查看現有服務的設定,請使用下列指令將結果儲存至 YAML 檔案:
gcloud run services describe SERVICE --format export > service.yaml在服務設定 YAML 檔案中,視需要修改任何 spec.template 子項屬性,更新修訂版本設定,然後部署新修訂版本:
gcloud run services replace service.yamlCloud Code
如要使用 Cloud Code 部署現有服務的新修訂版本,請參閱 IntelliJ 和 Visual Studio Code 指南。
Terraform
請確認您已按照「部署新服務」範例中的說明設定 Terraform。
撰寫
您可以將 Compose 規格儲存在 YAML 檔案中,然後使用單一 gcloud 指令,將其部署為 Cloud Run 服務修訂版本。
如要將 compose.yaml 檔案部署為 Cloud Run 服務修訂版本,請按照下列步驟操作:
部署完成後,畫面會顯示 Cloud Run 服務網址。複製這個網址並貼到瀏覽器,即可查看正在執行的容器。您可以在 Google Cloud 控制台停用預設驗證。
用戶端程式庫
如要從程式碼部署新修訂版本,請按照下列步驟操作:
REST API
如要部署新修訂版本,請將 PATCH HTTP 要求傳送至 Cloud Run Admin API service 端點。
例如使用 curl:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{template: {containers: [{image: "IMAGE_URL"}]}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE
更改下列內容:
Cloud Run 位置
Cloud Run 具有「地區性」,這表示執行 Cloud Run 服務的基礎架構位於特定地區,並由 Google 代管,可為該地區內所有區域提供備援功能。
選擇 Cloud Run 服務的執行地區時,請將延遲時間、可用性或耐用性需求做為主要考量。一般而言,您可以選擇最靠近使用者的地區,但您應考量 Cloud Run 服務所使用的其他 Google Cloud產品位置。使用分散在不同位置的 Google Cloud 產品,可能會影響服務的延遲時間和費用。
Cloud Run 可在下列地區使用:
採用級別 1 定價
asia-east1(臺灣)asia-northeast1(東京)asia-northeast2(大阪)asia-south1(印度孟買)asia-southeast3(曼谷)europe-north1(芬蘭)二氧化碳排放量低
europe-north2(斯德哥爾摩)二氧化碳排放量低
europe-southwest1(馬德里)二氧化碳排放量低
europe-west1(比利時)二氧化碳排放量低
europe-west4(荷蘭)二氧化碳排放量低
europe-west8(米蘭)europe-west9(巴黎)二氧化碳排放量低
me-west1(特拉維夫)northamerica-south1(墨西哥)us-central1(愛荷華州)二氧化碳排放量低
us-east1(南卡羅來納州)us-east4(北維吉尼亞州)us-east5(哥倫布)us-south1(達拉斯)二氧化碳排放量低
us-west1(奧勒岡州)二氧化碳排放量低
採用級別 2 定價
africa-south1(約翰尼斯堡)asia-east2(香港)asia-northeast3(韓國首爾)asia-southeast1(新加坡)asia-southeast2(雅加達)asia-south2(印度德里)australia-southeast1(雪梨)australia-southeast2(墨爾本)europe-central2(波蘭華沙)europe-west10(柏林)europe-west12(杜林)europe-west2(英國倫敦)二氧化碳排放量低
europe-west3(德國法蘭克福)europe-west6(瑞士蘇黎世)二氧化碳排放量低
me-central1(杜哈)me-central2(達曼)northamerica-northeast1(蒙特婁)二氧化碳排放量低
northamerica-northeast2(多倫多)二氧化碳排放量低
southamerica-east1(巴西聖保羅)二氧化碳排放量低
southamerica-west1(智利聖地牙哥)二氧化碳排放量低
us-west2(洛杉磯)us-west3(鹽湖城)us-west4(拉斯維加斯)
如果您已建立 Cloud Run 服務,即可在 Google Cloud 控制台的 Cloud Run 資訊主頁中查看地區。
部署其他 Google Cloud 專案的映像檔
如要從其他專案部署映像檔,您或管理員必須將必要 IAM 角色授予部署者帳戶和 Cloud Run 服務代理程式。 Google Cloud
如要瞭解部署者帳戶的必要角色,請參閱「必要角色」。
如要授予 Cloud Run 服務代理程式必要角色,請參閱下列操作說明:
在 Google Cloud 控制台中,開啟 Cloud Run 服務的專案。
選取「包含 Google 提供的角色授予項目」。
複製 Cloud Run 服務代理程式的電子郵件地址。 後置字串為 @serverless-robot-prod.iam.gserviceaccount.com。
開啟擁有您要使用之 Container Registry 的專案。
按一下「新增」即可新增主體。
在「新增主體」欄位中,貼上您先前複製的服務帳戶電子郵件地址。
在「Select a role」(選擇角色) 選單中,依序點選「Artifact Registry」->「Artifact Registry Reader」(Artifact Registry 讀者)。
將容器映像檔部署到含有您的 Cloud Run 服務的專案。
部署其他登錄檔的映像檔
如要部署未儲存在 Artifact Registry 或 Docker Hub 的公開或私人容器映像檔,請設定 Artifact Registry 遠端存放區。
Artifact Registry 遠端存放區可讓您:
- 部署任何公開容器映像檔,例如 GitHub Container Registry (
ghcr.io)。 - 從需要驗證的私人存放區 (例如 JFrog Artifactory 或 Nexus) 部署容器映像檔。
或者,如果無法使用 Artifact Registry 遠端存放區,您可以暫時使用 docker push 將容器映像檔提取及推送至 Artifact Registry,以便將其部署至 Cloud Run。Cloud Run 會在部署時匯入容器映像檔,因此部署完成後,您可以從 Artifact Registry 刪除映像檔。
將多個容器部署至服務 (Sidecar)
在有 Sidecar 的 Cloud Run 部署作業中,有一個 Ingress 容器會處理您指定容器通訊埠的所有傳入 HTTPS 要求,以及一或多個 Sidecar 容器。側車無法在 Ingress 容器埠監聽傳入的 HTTP 要求,但可以使用 localhost 埠彼此通訊,以及與 Ingress 容器通訊。使用的本機主機通訊埠會因容器而異。
在下圖中,連入容器使用 localhost:5000 與 Sidecar 通訊。
![]()
每個執行個體最多可部署 10 個容器,包括 Ingress 容器。執行個體中的所有容器共用相同的網路命名空間,也可以使用記憶體內共用磁碟區共用檔案,如圖所示。
您可以在第一代或第二代執行環境中部署多個容器。
如果您使用以要求為準的計費方式 (Cloud Run 預設),只有在下列情況下,系統才會為 Sidecar 分配 CPU:
- 執行個體正在處理至少一項要求。
- 輸入容器正在啟動。
如果 Sidecar 必須在要求處理程序以外使用 CPU (例如收集指標),請將服務的帳單設定設為以執行個體為準的帳單。詳情請參閱「帳單設定 (服務)」。
如果採用以要求為準的計費方式,請設定啟動探查,確保 Sidecar 在啟動時不會受到 CPU 節流。
您可以建立自訂機構政策,規定所有部署作業都必須使用特定 Sidecar。
用途
在 Cloud Run 服務中使用 Sidecar 的用途包括:
- 應用程式監控、記錄和追蹤
- 使用 Nginx、Envoy 或 Apache2 做為應用程式容器前的 Proxy
- 新增驗證和授權篩選器 (例如 Open Policy Agent)
- 執行 AlloyDB Auth Proxy 等輸出連線 Proxy
部署含有 Sidecar 容器的服務
您可以使用Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform,將多個 Sidecar 部署至 Cloud Run 服務。
按一下分頁標籤,瞭解如何使用自選工具。
控制台
前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:
- 如要部署至現有服務,請在服務清單中找出該服務,然後按一下開啟,再點選「編輯並部署新修訂版本」,顯示修訂版本部署表單。
- 如要部署新服務,請按一下「Deploy container」(部署容器),顯示「Create service」(建立服務) 表單。
如果是新服務,
- 提供服務名稱和要部署的 Ingress 容器映像檔網址。
- 按一下「Container(s), Volumes, Networking, Security」
在「Edit container」資訊卡中,視需要設定 Ingress 容器。
按一下「新增容器」,然後設定要與 Ingress 容器一起新增的 Sidecar 容器。如果補充資訊容器依附於服務中的另一個容器,請在「容器啟動順序」選單中指出這點。針對您部署的每個 Sidecar 容器重複執行這個步驟。
如要將所有流量傳送至新修訂版本,請選取「立即提供這個修訂版本」。如要逐步推出,請取消勾選該核取方塊。這樣一來,系統就不會將任何流量傳送至新修訂版本,部署後,請按照逐步推出的說明操作。
按一下新服務的「建立」或現有服務的「部署」,然後等待部署完成。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如要將多個容器部署至服務,請執行下列指令:
gcloud run deploy SERVICE \ --container INGRESS_CONTAINER_NAME \ --image='INGRESS_IMAGE' \ --port='CONTAINER_PORT' \ --container SIDECAR_CONTAINER_NAME \ --image='SIDECAR_IMAGE'
更改下列內容:
- SERVICE:要部署的服務名稱。您可以將這個參數完全省略,這樣系統會提示您輸入服務名稱。
- INGRESS_CONTAINER_NAME:接收要求的容器名稱,例如
app。 - INGRESS_IMAGE:應接收要求的容器映像檔參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。 - CONTAINER_PORT:Ingress 容器接聽傳入要求的通訊埠。與單一容器服務不同,如果服務包含 Sidecar,則沒有預設的 Ingress 容器通訊埠。您必須明確設定 Ingress 容器的容器通訊埠,且只有一個容器可以公開通訊埠。
- SIDECAR_CONTAINER_NAME:Sidecar 容器的名稱,例如
sidecar。 - SIDECAR_IMAGE:補充容器映像檔的參照
如要在部署指令中設定每個容器,請在
container參數後提供每個容器的設定,例如:gcloud run deploy SERVICE \ --container CONTAINER_1_NAME \ --image='INGRESS_IMAGE' \ --set-env-vars=KEY=VALUE \ --port='CONTAINER_PORT' \ --container SIDECAR_CONTAINER_NAME \ --image='SIDECAR_IMAGE' \ --set-env-vars=KEY_N=VALUE_N
等待部署作業完成。成功完成時,畫面會顯示成功訊息,還有已部署服務的網址。
- SERVICE:Cloud Run 服務的名稱。 服務名稱不得超過 49 個字元。
- CONTAINER_PORT:Ingress 容器接聽傳入要求的通訊埠。與單一容器服務不同,如果服務包含 Sidecar,則沒有預設的 Ingress 容器通訊埠。您必須明確設定 Ingress 容器的容器通訊埠,且只有一個容器可以公開通訊埠。
- INGRESS_IMAGE:應接收要求的容器映像檔參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest。 - SIDECAR_IMAGE:補充容器映像檔的參照。如要指定多個 Sidecar,請在 YAML 的
containers陣列中新增更多元素。
YAML
這些操作說明會顯示 Cloud Run 服務的基本 YAML 檔案,其中包含 Sidecar。建立名為 service.yaml 的檔案,並在其中加入下列內容:
apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: name: SERVICE spec: template: spec: containers: - image: INGRESS_IMAGE ports: - containerPort: CONTAINER_PORT - image: SIDECAR_IMAGE
更改下列內容:
更新 YAML 以納入 Ingress 和 Sidecar 容器後,請使用下列指令部署至 Cloud Run:
gcloud run services replace service.yamlTerraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定中,將下列項目新增至google_cloud_run_v2_service 資源:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
ingress = "INGRESS_TRAFFIC_ALL"
template {
containers {
name = "INGRESS_CONTAINER_NAME"
ports {
container_port = CONTAINER_PORT
}
image = "INGRESS_IMAGE"
depends_on = ["SIDECAR_CONTAINER_NAME"]
}
containers {
name = "SIDECAR_CONTAINER_NAME"
image = "SIDECAR_IMAGE"
}
}
}
CONTAINER_PORT 代表 Ingress 容器監聽傳入要求的通訊埠。與單一容器服務不同,如果服務包含 Sidecar,則沒有預設的 Ingress 容器通訊埠。您必須明確設定 Ingress 容器的容器通訊埠,且只有一個容器可以公開通訊埠。
部署作業可用的重要 Sidecar 功能
開始下單
如果部署作業有多個容器,且您有依附元件需要某些容器先啟動,才能啟動部署作業中的其他容器,則可以指定容器啟動順序。
如果容器依附於其他容器,您必須在部署作業中使用健康狀態檢查。如果您使用健康狀態檢查,Cloud Run 會按照容器啟動順序檢查每個容器的健康狀態,確保每個容器都順利通過檢查,才會啟動下一個容器。如果您未使用健康狀態檢查,即使容器所依附的容器未執行,健康狀態良好的容器仍會啟動。
在 Sidecar 之間交換檔案資料
單一執行個體中的多個容器可以存取共用的記憶體內磁碟區,每個容器都能透過您建立的掛接點存取該磁碟區。這項功能通常用於在容器之間共用檔案,例如遙測 Sidecar 容器可以從應用程式容器收集記錄。
在 Sidecar 之間通訊
同一執行個體的兩個容器可以在本機網路上彼此通訊。
請參考以下服務範例:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: example
spec:
template:
spec:
containers:
- name: ingress
image: ...
ports:
- containerPort: 8080
- name: sidecar
image: ...
這項服務的每個執行個體都會執行兩個容器:一個名為 ingress,另一個名為 sidecar。
抵達服務的要求會傳送至通訊埠 8080 上的 ingress 容器。
在有多個容器的服務中,只能將一個容器設定為處理所有傳入要求的輸入容器,且該容器必須是已設定 containerPort 的容器。
容器 ingress 和 sidecar 可透過 http://localhost 彼此通訊。舉例來說,如果容器 sidecar 在通訊埠 5000 上監聽要求,容器 ingress 就能在 http://localhost:5000 上與其通訊。
由於容器已命名,容器甚至可以使用容器名稱彼此通訊。舉例來說,如果容器 sidecar 在通訊埠 5000 上監聽要求,則容器 ingress 可以使用 http://sidecar:5000 與 sidecar 通訊。
調整容器以適用於 Cloud Run
您建構或找到的大多數容器,都與 Cloud Run 容器執行階段合約相容。不過,您可能需要變更部分容器,以利進行本機開發,或預期完全控制機器,才能與 Cloud Run 執行環境相容。
將掛接點移至 Cloud Run 設定
容器的初始化指令碼必須假設掛接作業已完成,才能呼叫容器。您必須將所有掛接作業移至 Cloud Run 資源設定。
盡可能切換為非超級使用者
請盡量使用不依賴或使用根使用者的容器。這項做法可降低 Cloud Run 服務的安全性風險、減少容器的攻擊面、限制攻擊者存取檔案系統,並遵循最低權限原則。
請在 Dockerfile 中使用 USER 指令切換至權限較低的 ID,因為預設是以根身分執行。Cloud Run 會使用 Dockerfile 中指定的使用者執行容器。
稽核 setuid 二進位檔的使用情形
從 Cloud Run 的容器執行 setuid 二進位檔時,會發生執行失敗的情況。
如果您在本機使用 Docker 或 Podman,請使用 --cap-drop=setuid 引數。
或者,驗證您依附的二進位檔未設定 setuid 位元。
確認根容器與使用者命名空間相容
在使用者命名空間下執行時 (例如使用 Docker 的 userns-remap 功能、在 無根 Podman 中執行容器,或使用 docker run 指令中的 --userns-remap=default 引數,將這些變更部署至執行 Google Container-Optimized OS 的 VM),評估程式碼即可在本機或 VM 中測試變更。
後續步驟
您在部署新服務後,可以進行下列作業:
- 漸進式推出、復原修訂版本、流量遷移
- 查看服務記錄
- 監控服務效能
- 設定記憶體上限
- 設定環境變數
- 變更服務並行
- 管理服務
- 管理服務修訂版本
- Cloud Run OpenTelemetry Sidecar 範例
- 使用二進位授權僅部署受信任的映像檔 (搶先版)
您可以使用 Cloud Build Triggers 來自動執行 Cloud Run 服務的建構和部署作業:
您也可以使用 Cloud Deploy 設定持續推送軟體更新管道,將 Cloud Run 服務部署至多個環境: