专栏首页腾讯云容器服务团队的专栏基于 Kubernetes 的 ConfigMap 实现的腾讯云配置文件管理功能介绍
原创

基于 Kubernetes 的 ConfigMap 实现的腾讯云配置文件管理功能介绍

引言

在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在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界面直接进行操作,更加方便。同时支持配置文件的版本管理,便于回滚和追溯。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • K8S线上实战课堂第二期--入门Kubernetes的Deployment/Pod/Service

    腾讯云K8S线上实战课堂,从0到1,结合方法论和实操演示,和大家一起快速入门和学习K8S和容器技术。今天推出第二期 从Hello World 了解Kuberne...

    腾讯云容器服务团队
  • kubernetes 中 kafka 和 zookeeper 有状态集群服务部署实践 (二)

    在上文中,已经介绍了如何基于 StatefulSet(PetSet) + Persistent Volume 搭建 kafka 和zookeeper 服务。本文...

    腾讯云容器服务团队
  • 在腾讯云容器服务中对容器实例日志设置定期清理和回卷

    由于在容器实例日志保存在本地,当程序中大量打印日志时,很容易造成主机上的磁盘空间大量被占用。在日志服务上线一段时间后,发现用户遇到这种情况时,一般是手动去清理日...

    腾讯云容器服务团队
  • 创建强制配置文件

    此种情况用户在对配置文件做了修改后(例如修改桌面壁纸、修改系统属性)后,注销重新登陆会还原到标准的配置文件配置,其他关于强制配置文件的更多描述可以参见微软官方文...

    SuperDream
  • 近两年火热的微服务springboot不同配置文件详细讲解

    配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

    好好学java
  • 让git不再跟踪配置文件的变化

    liulun
  • spring boot框架学习学前掌握之重要注解(4)-通过注解方式读取外部资源配置文件2

    本文是《凯哥陪你学系列-框架学习之spring boot框架学习》中spring boot框架学习学前掌握之重要注解(4)-通过注解方式读取外部资源配置文件2。...

    凯哥Java
  • ELK学习笔记之Logstash不停机自动重载配置文件

    为了可以自动检测配置文件的变动和自动重新加载配置文件,需要在启动的时候使用以下命令:

    Jetpropelledsnake21
  • 临时解决Idea下Maven无法配置默认源与仓库地址

    在IDEA2019.2版本中,出现了不少问题,比如之前的中文乱码问题,参见:https://www.misiyu.cn/article/75.html

    无道
  • GlusterFS节点离线修复方法

    正常的集群中可以通过gluster peer detach force强制踢出故障节点。

    党志强

扫码关注云+社区

领取腾讯云代金券