使用 ConfigMap

了解如何创建 ConfigMap,然后配置 Knative 服务服务和修订版本以使用该 ConfigMap。

服务的一个常见用例是使用 ConfigMap 将应用代码与配置分开。ConfigMap 类似于密文,但不同之处在于您使用密文存储敏感信息,但使用 ConfigMap 存储非敏感数据,例如连接字符串、公共凭据、主机名和网址。您可以在 Google Kubernetes Engine 文档中详细了解如何使用 ConfigMap。

启用容器访问 ConfigMap 时,您可以选择以下某一选项:

  • 将 ConfigMap 作为卷进行装载,将 ConfigMap 条目作为该装载的卷中的文件。推荐这种做法,因为这样可确保您在读取 ConfigMap 时获得最新版本。
  • 使用环境变量传递 ConfigMap。

创建 ConfigMap

如 GKE 文档的 ConfigMaps 页面中所述,您可以通过多种方式创建 ConfigMap。方便起见,我们采用以下步骤展示创建 ConfigMap 的简单方法。

创建 ConfigMap 时,请确保在运行 Knative 服务服务的集群所在的命名空间中创建它。本说明使用 default 命名空间。

您可以从命令行创建 ConfigMap:

kubectl create configmap NAME DATA

您需要在其中:

  • NAME 是 ConfigMap 对象的名称。
  • DATA 可以是以下任意一项:

    • 包含一个或多个配置文件的每个目录的 --from-file 标志和路径。
    • 要添加到 ConfigMap 的每一项的 --from-literal 标志和键值对。

例如:

kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm

创建 ConfigMap 并将其上传到 default 命名空间中可用于集群的位置。

将 ConfigMap 设为服务可用

创建 ConfigMap 后,您可以在部署新服务或更新现有服务并部署修订版本时,使用 Google Cloud 控制台或 Google Cloud CLI 以卷或环境变量的形式将其提供给 Knative 服务服务:

控制台

  1. 前往 Google Cloud 控制台中的 Knative 服务:

    前往 Knative 服务

  2. 如果您是要配置一个新服务来作为部署目标,请点击创建服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 高级设置下,点击变量和 Secret

  4. “引用 ConfigMap”下,从下拉菜单中选择所需的 ConfigMap。

    • “引用方法”下拉菜单中,选择要使用 ConfigMap 的方式(以卷的形式装载或作为环境变量公开)。
    • 如果您要使用作为卷装载,请指定路径,然后点击完成
    • 如果作为环境变量公开:
      1. 请提供变量的名称,并从“键”下拉菜单中选择相应的 ConfigMap 值。
      2. 点击添加以添加其他 ConfigMap 值。
      3. 请提供变量的名称,并从“键”下拉菜单中选择相应的 ConfigMap 值。
      4. 点击完成

  5. 点击下一步以转到下一部分。

  6. 配置此服务的触发方式部分,选择您想使用哪个连接来调用服务。

  7. 点击 Create 将映像部署到 Knative 服务,然后等待部署完成。

命令行

您可以使用 Google Cloud CLI 为新服务设置 ConfigMap 或更新现有服务:

  • 对于现有服务,请运行具有以下参数之一的 gcloud run services update 命令来更新 ConfigMap:

    示例:

    gcloud run services update SERVICE --update-config-maps KEY1=VALUE1,KEY2=VALUE2
    

    您需要在其中:

    • SERVICE 替换为您的服务名称。
    • KEY1=VALUE1,KEY2=VALUE2 替换为对应每个 ConfigMap 的以英文逗号分隔的名称和键值对列表。您可以为每个 KEY 指定装载路径,或提供环境变量。使用正斜杠 / 开头来指定装载路径。所有其他键均对应于环境变量。请为每个 VALUE 指定 ConfigMap 名称。如何指定多个参数
    • 命令参数选项

      如需指定多组键值对,您可以指定多个参数以确保可读性。示例:
      [...]
      --update-config-maps "KEY=VALUE1" \
      --update-config-maps "KEY=VALUE2" \
      --update-config-maps "KEY=VALUE3"
      
  • 对于新服务,请运行带有 --set-config-maps 参数的 gcloud run deploy 命令来设置 ConfigMap:

    gcloud run deploy SERVICE --image=IMAGE_URL --set-config-maps KEY1=VALUE1,KEY2=VALUE2
    

    您需要在其中:

    • IMAGE_URL 替换为对容器映像的引用,例如 gcr.io/cloudrun/hello
    • SERVICE 替换为您的服务名称。
    • KEY1=VALUE1,KEY2=VALUE2 替换为对应每个 ConfigMap 的以英文逗号分隔的名称和键值对列表。您可以为每个 KEY 指定装载路径,或提供环境变量。使用正斜杠 / 开头来指定装载路径。所有其他键均对应于环境变量。请为每个 VALUE 指定 ConfigMap 名称。如何指定多个参数
    • 命令参数选项

      如需指定多组键值对,您可以指定多个参数以确保可读性。示例:
      [...]
      --update-config-maps "KEY=VALUE1" \
      --update-config-maps "KEY=VALUE2" \
      --update-config-maps "KEY=VALUE3"