配置项是一种存储应用所需配置信息的资源类型。它可以作为容器运行环境中的环境变量,便于应用部署后灵活变更容器配置,也可以通过挂载配置文件的方式向容器中注入配置信息。本文介绍如何使用Kubernetes ConfigMap创建和管理命名空间中的配置项。

前提条件

  • 已在本地安装Serverless Devs工具
  • 已配置阿里云认证信息。

    使用Serverless Devs工具的config命令配置权限。更多信息,请参见Config命令

  • 已初始化工作区。
    使用Serverless Devs工具的init命令,把当前目录初始化为工作区。
    s init start-saectl -d ./
  • 已安装SAE插件。
    执行任意SAE插件的命令行,触发Serverless Devs工具安装SAE插件。
    s saectl get ns

查看已有配置

  1. 执行以下命令,查看某个地域(Region)下所有的配置列表。
    % s saectl get configmap -A
    预期输出。
    NAMESPACE   NAME                DATA   AGE
    default     a                   2      424d
    default     b                   2      12d
    test        test-config         1      297d
    test        example-configmap   3      20d
  2. 执行以下命令,查看某个命名空间(Namespace)下的配置列表。
    % s saectl configmap -n test
    预期输出。
    NAME                   DATA   AGE
    test-config            2      297d
    example-configmap      2      20d
    查看ConfigMap,显示字段如下。
    • NAME:命名空间中ConfigMap的名称。
    • DATA:配置中数据条目个数。
    • AVAILABLE:配置存在时间,单位为d(天)。
  3. 执行以下命令,查看具体配置的内容。
    % s saectl get configmap/example-configmap -n test -oyaml
    预期输出。
    apiVersion: v1
    data:
      database: mongodb
      database_uri: mongodb://localhost:27018
      keys: "image.public.key=771 \nrsa.public.key=42\n"
    kind: ConfigMap
    metadata:
      creationTimestamp: "2022-12-06T10:15:25Z"
      labels:
        abc: foo
      name: example-configmap
      namespace: test
      resourceVersion: "1672115604539"
      uid: "1644"

创建新的配置

  1. 编写ConfigMap。
    使用YAML格式编写配置,示例如下,并保存为cm.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: database-configmap
      namespace: test
    data:
      database: mysql
      database_uri: mysql://localhost:2309
    
                            
  2. 创建配置。
    使用apply命令行创建新的配置,执行如下命令。
    % s saectl apply -f ./cm.yaml
    configmap/database-configmap created

更新配置内容

  • 展开查看:使用YAML文件更新配置内容

    首先修改YAML文件的内容,然后使用apply命令行执行变更。

    s saectl apply -f ./cm.yaml
  • 展开查看:在线编辑配置
    s saectl edit configmap/database-configmap -n test

使用配置

  • 展开查看:使用ConfigMap配置容器的环境变量
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      ...
    spec:
      minReadySeconds: 10
      replicas: 2
      selector:
        matchLabels:
          app: web
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 0
        type: RollingUpdate
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: web
        spec:
          containers:
          - env:
            - name: k1
              value: s1
            envFrom:
            - configMapRef:
                name: database-configmap
            image: registry-vpc.cn-shenzhen.aliyuncs.com/sae-****/wordpress:1.0
            imagePullPolicy: Always
            name: main
  • 展开查看:将ConfigMap配置挂载到容器中作为文件使用
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      ...
    spec:
      minReadySeconds: 10
      replicas: 2
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: web
        spec:
          containers:
          - env:
            - name: k1
              value: s1
            image: registry-vpc.cn-shenzhen.aliyuncs.com/sae-****/wordpress:1.0
            imagePullPolicy: Always
            name: main
            resources:
              limits:
                cpu: "1"
                memory: 2Gi
              requests:
                cpu: "1"
                memory: 2Gi
            volumeMounts:
            - mountPath: /etc/config
              name: user-example-configmap
              subPath: database_uri
          terminationGracePeriodSeconds: 30
          volumes:
          - configMap:
              name: database-configmap
            name: user-example-configmap