引言

在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等。应用开发上线过程需要分别部署到开发环境、测试环境、预发布环境等多个环境。而每一个环境都要定义其独立的各种配置。如何对配置文件进行管理,是应用程序管理的重要内容。

Kubernetes中通过ConfigMap资源管理应用程序的配置信息。ConfigMap本质上是一个基于key/value键值方式存储的一段文本。Kubernetes支持三种使用方式:

  1. 设置成容器的环境变量。
  2. 在容器的启动参数中使用。
  3. 将key中的内容,作为文件挂载到容器某个目录下。

腾讯云容器服务根据用户使用的场景。基于Kubenertes的ConfigMap实现了通过配置文件设置容器的环境变量和将key中的内容挂载到容器的某个目录。

Kubernetes中将配置文件内容设置成容器的环境变量

在示例中我们创建一个如下所示的配置文件。

apiVersion: v1
data:
  DASHBOARD.CONF.INI: |
    [mysqld]
    log-bin = mysql-bin
    [port]
    serviceport="80"
  IMAGE_VERSION: v2.0
  OTHERKEY: OTHERVALUE
  REPLICAS: "2"
kind: ConfigMap
metadata:
  name: tst-config
  namespace: default

然后将对应的key设置成容器的环境变量。

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: test-container
      image: busybox:latest
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: REPLICAS
          valueFrom:
            configMapKeyRef:
              name: tst-config
              key: REPLICAS
        - name: OTHERKEY
          valueFrom:
            configMapKeyRef:
              name: tst-config
              key: OTHERKEY
        - name: IMAGE_VERSION
          valueFrom:
            configMapKeyRef:
              name: tst-config
              key: IMAGE_VERSION
  restartPolicy: Never

当Pod结束后会输出

REPLICAS=2
IMAGE_VERSION=v2.0
OTHERKEY=OTHERVALUE

腾讯云容器服务如何使用配置文件设置容器的环境变量

腾讯云容器服务基于Kubenertes的ConfigMap实现了将配置文件导入成容器的环境变量。并且在此基础上,提供管理配置文件版本的功能。配置文件的修改都是基于版本进行保存,配置文件保存后不能修改只能新增版本,这样保证了配置文件同一个版本的内容不变,方便回滚和追溯。

在腾讯云容器服务中将配置文件,设置成容器的环境变量操作步骤如下:

(1) 在配置页面创建对应的配置项

(2) 在服务创建(更新)时选择从配置文件导入环境变量

(3) 选择需要导入的环境变量

(4) 查看导入的环境变量

这样在服务创建(更新)时配置文件对应的内容就会被设置成容器对应的环境变量。

Kubernetes将配置文件内容挂载到指定目录

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh","-c","sleep 36000" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
      - name: config-volume2
        mountPath: /etc/config2
  volumes:
    - name: config-volume
      configMap:
        name: tst-config
        items:
        - key: DASHBOARD.CONF.INI
          path: DASHBOARD.CONF.INI
        - key: REPLICAS
          path: REPLICAS
    - name: config-volume2
      configMap:
        name: tst-config
        items:
        - key: REPLICAS
          path: REPLICAS
  restartPolicy: Never

使用kubectl exec -it dapi-test-pod /bin/ash命令进入容器后,查看挂载文件的信息。

/ # ls /etc/config
DASHBOARD.CONF.INI  REPLICAS
/ # cat /etc/config/DASHBOARD.CONF.INI
[mysqld]
log-bin = mysql-bin
[port]
serviceport="80"
/ # ls /etc/config2/
REPLICAS
/ # cat /etc/config2/REPLICAS
2/

腾讯云容器服务如何使用配置文件中的内容挂载到指定目录

在某些情况下,程序已经定义了配置文件的读取形式为:从某个路径下的文件读取。这样简单的通过环境变量的方式就不能满足需求。

腾讯云容器服务考虑到具体的需求场景,同样也支持将配置文件中的内容,通过文件的形式挂载到指定目录。

具体的步骤如下:

(1) 创建对应的配置文件

(2) 从配置文件导入挂载项

(3) 选择对应的挂载项

(4) 查看创建的挂载项

(5) 在容器中设置对应的挂载点

这样在就可以将配置文件中对应的内容,通过文件的方式挂载到容器指定的目录了。同样的,我们登录容器后查看挂载文件的信息。

可以看到分别将DASHBOARD.CONF.INI和REPLICAS中的内容挂载到了/etc/config/和/etc/config2/两个目录。(腾讯云容器服务支持远程在UI界面远程直接登录容器,具体操作方法可以参考)

总结

Kubernetes中对于程序的配置文件通过ConfigMap进行管理。在使用上支持配置文件设置成容器的环境变量以及将配置文件的内容作为文件挂载到指定目录。

腾讯云容器服务基于Kubenertes中ConfigMap的功能,支持配置文件设置成容器的环境变量和支持挂载到制定目录。在UI界面直接进行操作,更加方便。同时支持配置文件的版本管理,便于回滚和追溯。

文章来源于腾讯云开发者社区,点击查看原文