瞭解如何在 Knative Serving 中建立及使用環境變數。
設定環境變數時,系統會將這些變數注入容器,以供程式碼存取。環境變數的設定形式為鍵/值組合。舉例來說,假設您執行的服務會在讀取環境中的 LOGGING_VERBOSE: true
時啟用額外記錄。在這種情況下,您會將環境變數鍵/值組合設為 LOGGING_VERBOSE=true
。以下各節會顯示確切的指令或 UI。
保留名稱
系統會預留容器執行階段合約中定義的環境變數,您無法設定這些變數。尤其 Knative serving 會將 PORT
環境變數注入您的容器,因此您不應自行設定這個變數。
在服務上設定環境變數
變更任何設定都會建立新的修訂版本。除非您明確做出更新,變更這項設定,否則後續的修訂版本也會自動取得這個設定。
部署新服務或更新現有服務並部署修訂版本時,可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 檔案設定環境變數:
控制台
前往 Google Cloud 控制台的 Knative Serving:
如要設定部署的新服務,請按一下「建立服務」。如要設定現有服務,請按一下該服務,然後按一下「Edit & Deploy New Revision」(編輯及部署新的修訂版本)。
在「進階設定」下方,按一下「變數和密鑰」。
請按照下列步驟操作:
- 如要新增變數,請按一下「新增變數」,然後在「名稱」和「值」文字方塊中,分別指定變數名稱和值。
- 如要變更變數的值,請將「Value」(值) 文字方塊中目前的值改成您要的值。
- 如果要移除一或多個環境變數,請將游標懸停在要移除的變數「Value」(值) 文字方塊左側,顯示垃圾桶圖示,然後點選該圖示。
按一下「下一步」繼續前往下一個部分。
在「設定這項服務的觸發方式」部分,選取要用來叫用服務的連線。
按一下「建立」,將映像檔部署到 Knative 服務,然後等待部署作業完成。
指令列
您可以使用 Google Cloud CLI 為新服務設定環境變數,或更新現有服務:
如果是現有服務,請執行
gcloud run services update
指令,並指定下列其中一個參數,更新環境變數:範例:
gcloud run services update SERVICE --update-env-vars KEY1=VALUE1,KEY2=VALUE2
取代:
- SERVICE 改為您的服務名稱。
- KEY1=VALUE1,KEY2=VALUE2,並以半形逗號分隔各個環境變數的名稱和值配對。為每個 KEY 指定環境變數名稱,並為 VALUE 指定該環境變數的值。 如何指定多個參數。
-
如要指定含有半形逗號 (
,
) 的環境變數,您必須使用不同的分隔符號逸出每個 KEY=VALUE。舉例來說,如果您使用@
:--set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
-
如要指定多組鍵/值組合,您可以指定多個參數,方便閱讀。範例:
[...] --set-env-vars "KEY=VALUE1" \ --set-env-vars "KEY=VALUE2" \ --set-env-vars "KEY=VALUE3"
指令參數選項
如果是新服務,請執行
gcloud run deploy
指令並搭配--set-env-vars
參數,設定環境變數:gcloud run deploy SERVICE --image=IMAGE_URL --set-env-vars KEY1=VALUE1,KEY2=VALUE2
取代:
- IMAGE_URL,並參照容器映像檔,例如
gcr.io/cloudrun/hello
。 - SERVICE 改為您的服務名稱。
- KEY1=VALUE1,KEY2=VALUE2,並以半形逗號分隔各個環境變數的名稱和值配對。為每個 KEY 指定環境變數名稱,並為 VALUE 指定該環境變數的值。 如何指定多個參數。
-
如要指定含有半形逗號 (
,
) 的環境變數,您必須使用不同的分隔符號逸出每個 KEY=VALUE。舉例來說,如果您使用@
:--set-env-vars "^@^KEY1=value,with,commas@KEY2=anothervalue@KEY3..."
-
如要指定多組鍵/值組合,您可以指定多個參數,方便閱讀。範例:
[...] --set-env-vars "KEY=VALUE1" \ --set-env-vars "KEY=VALUE2" \ --set-env-vars "KEY=VALUE3"
指令參數選項
- IMAGE_URL,並參照容器映像檔,例如
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 服務服務名稱。
在本地檔案中,更新
containers:
底下env
屬性中的name
和value
屬性:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - env: - name: KEY-1 value: VALUE-1 - name: KEY-N value: VALUE-N
取代
- SERVICE 改為 Knative serving 服務名稱
- KEY-1、VALUE-1,並提供環境變數和值。 視需要新增更多變數和值。
使用下列指令,以新設定取代服務:
gcloud run services replace service.yaml
在容器中設定預設環境變數
您可以在 Dockerfile 中使用 ENV
陳述式,為環境變數設定預設值:
ENV KEY1=VALUE1,KEY2=VALUE2
優先順序:容器變數與服務變數
如果您在容器中設定預設環境變數,並在 Knative 服務中設定同名環境變數,系統會優先採用服務中設定的值。
啟用 Kubernetes 服務連結
如要使用 Kubernetes 服務連結,您必須手動啟用支援功能。由於命名空間中出現數千個服務和修訂版本,導致效能問題,因此自 2021 年 1 月起,Kubernetes 服務連結預設為停用。
如要啟用 Kubernetes 服務連結,請執行下列指令,在 knative-serving/config-defaults
ConfigMap 中將 data.enable-service-links
設為 true
:
kubectl patch cm -n knative-serving config-defaults -p '{"data":{"enable-service-links":"true"}}