使用 ConfigMap

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

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

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

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

创建 ConfigMap

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

创建 ConfigMap 时,请确保在与运行 Knative serving 服务的集群所在的命名空间中创建。本说明使用 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 将该 ConfigMap 作为卷或环境变量提供给 Knative serving 服务:

控制台

  1. 在 Google Cloud 控制台中前往 Knative serving:

    前往 Knative serving

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

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

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

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

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

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

  7. 点击创建以将映像部署到 Knative serving,然后等待部署完成。

命令行

您可以使用 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"