設定環境變數

瞭解如何在 Knative Serving 中建立及使用環境變數。

設定環境變數時,系統會將這些變數注入容器,以供程式碼存取。環境變數的設定形式為鍵/值組合。舉例來說,假設您執行的服務會在讀取環境中的 LOGGING_VERBOSE: true 時啟用額外記錄。在這種情況下,您會將環境變數鍵/值組合設為 LOGGING_VERBOSE=true。以下各節會顯示確切的指令或 UI。

保留名稱

系統會預留容器執行階段合約中定義的環境變數,您無法設定這些變數。尤其 Knative serving 會將 PORT 環境變數注入您的容器,因此您不應自行設定這個變數。

在服務上設定環境變數

變更任何設定都會建立新的修訂版本。除非您明確做出更新,變更這項設定,否則後續的修訂版本也會自動取得這個設定。

部署新服務或更新現有服務並部署修訂版本時,可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 檔案設定環境變數:

控制台

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

    前往 Knative serving

  2. 如要設定部署的新服務,請按一下「建立服務」。如要設定現有服務,請按一下該服務,然後按一下「Edit & Deploy New Revision」(編輯及部署新的修訂版本)

  3. 在「進階設定」下方,按一下「變數和密鑰」

  4. 請按照下列步驟操作:

    • 如要新增變數,請按一下「新增變數」,然後在「名稱」和「值」文字方塊中,分別指定變數名稱和值。
    • 如要變更變數的值,請將「Value」(值) 文字方塊中目前的值改成您要的值。
    • 如果要移除一或多個環境變數,請將游標懸停在要移除的變數「Value」(值) 文字方塊左側,顯示垃圾桶圖示,然後點選該圖示。

  5. 按一下「下一步」繼續前往下一個部分。

  6. 在「設定這項服務的觸發方式」部分,選取要用來叫用服務的連線。

  7. 按一下「建立」,將映像檔部署到 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"

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 服務服務名稱。

  2. 在本地檔案中,更新 containers: 底下 env 屬性中的 namevalue 屬性:

    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-1VALUE-1,並提供環境變數和值。 視需要新增更多變數和值。
  3. 使用下列指令,以新設定取代服務:

    gcloud run services replace service.yaml

在容器中設定預設環境變數

您可以在 Dockerfile 中使用 ENV 陳述式,為環境變數設定預設值:

ENV KEY1=VALUE1,KEY2=VALUE2

優先順序:容器變數與服務變數

如果您在容器中設定預設環境變數,並在 Knative 服務中設定同名環境變數,系統會優先採用服務中設定的值。

如要使用 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"}}