管理和使用配置项(K8s ConfigMap)

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

命名空间中的配置项用于存储应用所需的配置信息,它可以作为容器运行环境中的环境变量,便于应用部署后灵活变更容器配置,也可以通过命令行参数或挂载配置文件的方式向容器中注入配置信息。本文介绍如何在SAE控制台创建和使用命名空间的配置项。

背景信息

Serverless 应用引擎 SAE(Serverless App Engine)环境中,ConfigMap和Secret是两种用来存储配置信息的资源,它们都允许将配置与容器镜像分离,便于应用配置的管理。不过,它们之间的适用场景有所不同。

  • ConfigMap通常被用于存储常规配置项,如配置文件内容、命令行参数和其他非机密数据。它们能够以文件挂载、环境变量或命令行参数的方式注入到Pod内,使您能够轻松地更新应用设置而无需重建容器镜像。

  • Secret主要用于保存敏感数据,例如密码、证书和SSH密钥等。与ConfigMaps类似,Secret可以作为文件挂载或者以环境变量的形式提供给Pod的容器。为了降低泄露的危险,Kubernetes对Secret中的数据进行了加密,并在内存中安全地处理。

限制条件

  • 仅适用于微服务应用。

  • 命名空间的配置项仅用于容器运行环境的存储及配置,如果您需要创建应用代码的配置文件,请参见管理配置

  • 如果您需要存储密钥、证书等敏感信息,请使用保密字典。具体信息,请参见管理和使用保密字典(K8s Secret)

创建配置项

  1. 登录SAE控制台

  2. 在左侧导航栏,单击命名空间,在顶部菜单栏选择目标地域,然后单击目标命名空间名称。

  3. 在左侧导航栏,单击配置项,在配置项页面,单击创建

  4. 在弹出的创建配置项面板,根据下表说明完成参数配置,然后单击确定

    使用表单编辑

    配置项

    说明

    示例

    所属命名空间

    不支持修改。

    cn-beijing:******

    配置项名称

    自定义名称。

    test

    配置映射

    单击使用表单编辑,然后单击+ 添加变量,在对话框中自定义变量名和变量值。

    • 变量:env_shell

    • 值:/bin/sh

    image

    使用JSON格式编辑

    配置项

    说明

    示例

    所属命名空间

    不支持修改。

    cn-beijing:******

    配置项名称

    自定义名称。

    test

    配置映射

    单击使用 JSON 格式编辑,在代码框中输入JSON格式的配置信息。

    {
        "nv_shell": "/bin/sh",
        "nginx_conf": "daemon            off;\nworker_processes  2;\nuser              www-data;\n\nevents {\n    use           epoll;\n    worker_connections  128;\n}\n\nerror_log         logs/error.log info;\n\nhttp {\n    server_tokens off;\n    include       mime.types;\n    charset       utf-8;\n\n    access_log    logs/access.log  combined;\n\n    server {\n        server_name   localhost;\n        listen        127.0.0.1:80;\n\n        error_page    500 502 503 504  /50x.html;\n\n        location      / {\n            root      html;\n        }\n\n    }"
    }
    

    image

    使用YAML格式编辑

    配置项

    说明

    示例

    所属命名空间

    不支持修改。

    cn-beijing:******

    配置项名称

    自定义名称。

    test

    配置映射

    单击使用 YAML 格式编辑,在代码框中输入YAML格式的配置信息。

    nv_shell: /bin/sh
    nginx_conf: |-
      daemon            off;
      worker_processes  2;
      user              www-data;
    
      events {
          use           epoll;
          worker_connections  128;
      }
    
      error_log         logs/error.log info;
    
      http {
          server_tokens off;
          include       mime.types;
          charset       utf-8;
    
          access_log    logs/access.log  combined;
    
          server {
              server_name   localhost;
              listen        127.0.0.1:80;
    
              error_page    500 502 503 504  /50x.html;
    
              location      / {
                  root      html;
              }
    
          }

    image

    创建的配置项将显示在配置项页面,您可以对其进行编辑复制删除操作。

    说明
    • 修改后的配置项新版本仅对新实例生效(如手动新扩容或自动弹性的新实例),对存量实例不生效。

    • 删除配置项将会影响这些应用的正常运行。请先在关联应用中解除对该配置项的使用后再删除。

    重要

    当您对应用中的配置项进行修改后,为了确保这些更改能够在应用的所有实例中生效并保持一致,您需要手动执行重启应用或重新部署应用的操作。

注入配置信息

在创建应用过程中注入配置信息

  1. 登录SAE控制台

  2. 在左侧导航栏,单击应用管理,然后单击微服务应用,在顶部菜单栏选择目标地域。

  3. 应用列表页面,单击创建应用

  4. 在创建应用页面,按照下表说明完成应用基本信息的参数配置。

    配置区域

    配置项

    说明

    基础信息设置区域

    应用名称

    自定义应用名称。名称为1~36个字符,可包含数字、字母以及中划线(-),必须以字母开头。

    应用描述

    介绍应用的基本情况。

    命名空间类型

    可选择的有以下两种类型:

    • 系统创建:应用将在目标地域下的默认命名空间内进行创建。

    • 选择已有命名空间:从下拉列表选择已创建的自定义命名空间交换机 vSwitch安全组

    应用部署方式

    1. 选择镜像部署,然后单击设置镜像

    2. 在弹出的设置镜像面板中,按照以下说明进行部署。

      1. 技术栈语言:选择目标语言。

      2. 语言环境:在下拉框中选择对应语言的运行环境。

        说明

        技术栈语言是Java或PHP时,才能选择语言环境。

      3. 选择我的阿里云镜像

        说明

        您也可以选择Demo镜像自定义镜像其它阿里云账号私有镜像,然后按照控制台提示设置其他信息。本文以拉取我的阿里云镜像仓库中镜像为例进行说明。

      4. 镜像服务版本:选择镜像服务个人版镜像服务企业版

      5. 单击镜像仓库命名空间,选择镜像仓库命名空间。

      6. 单击目标镜像仓库名称选择镜像版本列的下拉框,选择镜像版本。

    3. 单击确定

    容量设置

    单实例规格

    设置单实例的CPU和内存,取值范围为[1,50]。默认值为2。

    实例数

    设置实例个数,取值范围为[1,50]。默认值为2。

  5. 单击下一步:高级设置

  6. 在高级设置页面,单击配置管理区域。

    image

  7. 单击+ 添加,。从下拉列表中选择在创建配置项中创建的配置项名称,并选择期望注入此应用的键,然后填写自定义挂载路径

    image

    说明
    • 除了在命名空间页面提前创建好配置项,您也可以在配置管理区域单击创建配置项(K8s configmap),在创建配置项面板创建配置项。

    • 支持挂载全部键。从下拉列表选择全部,将该配置项的所有键挂载到该路径。

    • 支持添加多个配置项。

  8. 单击创建应用

    可以通过以下方式验证配置是否生效:

    • 方式一:

      在应用基本信息页面的左侧导航栏,单击变更记录,在变更记录页面,查看应用变更详情。如果显示执行成功,表示应用部署成功,配置已生效。

    • 方式二:

      在应用基本信息页面,单击实例部署信息页签,查看实例的运行状态。如果运行状态显示为Running,表示应用部署成功,配置已生效。

在部署应用过程中注入配置信息

警告

重新部署应用后,该应用将会被重启。为避免业务中断等不可预知的错误,请在业务低峰期执行部署操作。

  1. 登录SAE控制台

  2. 在左侧导航栏,单击应用管理,然后单击微服务应用,在顶部菜单栏选择目标地域。

  3. 应用列表页面,选择目标命名空间,然后单击目标应用名称。

  4. 在目标应用的基本信息页面,单击部署应用

  5. 部署应用页面,单击配置管理区域,然后选择配置项名称,填写挂载路径

    image

    说明
    • 除了在命名空间页面提前创建好配置项,您也可以在配置管理区域单击创建配置项(K8s configmap),在创建配置项面板创建配置项。

    • 支持挂载全部键。从下拉列表选择全部,将该配置项的所有键挂载到该路径。

    • 支持添加多个配置项。

  6. 单击确认

    可以通过以下方式验证配置是否生效:

    • 方式一:

      在应用基本信息页面的左侧导航栏,单击变更记录,在变更记录页面,查看应用变更详情。如果显示执行成功,表示应用部署成功,配置已生效。

    • 方式二:

      在应用基本信息页面,单击实例部署信息页签,查看实例的运行状态。如果运行状态显示为Running,表示应用部署成功,配置已生效。

将配置项用作环境变量

配置项可以用作容器运行环境中的环境变量,便于部署后灵活变更容器配置。本文以创建微服务应用为例,介绍如何在设置环境变量时引用配置项。

  1. 登录SAE控制台

  2. 在左侧导航栏,单击应用管理,然后单击微服务应用,在顶部菜单栏选择目标地域。

  3. 应用列表页面,单击创建应用

  4. 在创建应用页面,按照页面提示完成应用基本信息的参数配置,然后单击下一步:高级设置

  5. 在高级设置页面,单击环境变量区域。

  6. 在环境变量区域,单击类型下拉框,选择引用配置项,自定义变量名称,然后选择配置项名称

    image

    说明
    • 除了在命名空间页面提前创建好配置项,您也可以在环境变量区域单击创建配置项(K8s configmap),在创建配置项面板进行创建。

    • 单击+ 添加,可以引用多个配置项。

  1. 单击创建应用

    可以通过以下方式验证配置是否生效:

    • 方式一:

      在应用基本信息页面的左侧导航栏,单击变更记录,在变更记录页面,查看应用变更详情。如果显示执行成功,表示应用部署成功,配置已生效。

    • 方式二:

      在应用基本信息页面,单击实例部署信息页签,查看实例的运行状态。如果运行状态显示为Running,表示应用部署成功,配置已生效。

最佳实践

PHP如何配置php-fpm.conf

本文以使用YAML编辑为例创建配置项进行说明。

  1. 创建配置项。具体操作,请参见创建配置项

    配置项

    说明

    示例

    所属命名空间

    不支持修改。

    cn-beijing:******

    配置项名称

    自定义名称。

    php-fpm

    配置项描述

    非必填项:自定义配置项描述信息。

    www.conf

    配置映射

    单击使用 YAML 编辑,在代码框中输入YAML格式的配置信息。

    www_conf: |
      [www]
      user = www-data
      group = www-data
      listen = 127.0.0.1:9000
      pm = dynamic
      pm.max_children = 5
      pm.start_servers = 2
      pm.min_spare_servers = 1
      pm.max_spare_servers = 3

    image

  2. 注入配置信息。具体操作,请参见注入配置信息

    配置项

    说明

    配置项名称

    选择已创建的php-fpm

    选择已创建的www.conf

    挂载路径

    输入以下路径。

    /usr/local/etc/php-fpm.d/www.conf

    image