基于 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 条评论
登录 后参与评论

相关文章

来自专栏小狼的世界

创建自己的Docker基础镜像

Docker 提供了两种方法来创建基础镜像,一种是通过引入tar包的形式,另外一种是通过一个空白的镜像来一步一步构建,本文使用的是第二种方法,既FROM scr...

1322
来自专栏java学习

maven常用命令集合(收藏大全)

如果你是初学者,或者是自学者!你可以加小编微信(xxf960326)!小编可以给你学习上,工作上的一些建议以及可以给你(免费)提供学习资料!最重要我们还可以交个...

571
来自专栏北京马哥教育

Ansible 详细用法说明(一)

Ansible 一、概述 运维工具按需不需要有代理程序来划分的话分两类: agent(需要有代理工具):基于专用的agent程序完成管理功能,puppet, f...

3355
来自专栏魏艾斯博客www.vpsss.net

如何使用 Vultr Snapshots 创建快照功能

2054
来自专栏Jed的技术阶梯

Linux下使用Nexus创建maven私服

关于系统运行级别以及chkconfig命令的用法参考Linux的运行级别和chkconfig用法

1732
来自专栏青枫的专栏

day47_Maven学习笔记

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 Maven是一个跨平台的项目管理工具,它是使用j...

981
来自专栏杂烩

Eclipse下Hadoop的MapReduce开发之eclipse配置

    首先下载Eclipse LUNA,这里注意如果你是想在远程电脑上使用eclipse,也就是hadoop安装在linux下,而你想在win系列的电脑上连接...

771
来自专栏锦小年的博客

Linux使用笔记3-crontab添加定时任务

linux中任务管理的软件有很多,个人比较倾向于crontab。简单来说,crontab就是linux下一个方便任务管理的工具,可以添加定时任务,执行脚本。 1...

1945
来自专栏酷玩时刻

Android依赖管理与私服搭建

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 *本篇文章视频 慕课网之Android依赖管理与私服搭建

805
来自专栏Java帮帮-微信公众号-技术文章全总结

Maven详解

1 Maven介绍 1.1 项目开发中遇到的问题 1、都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 2、为什么在我的机器上可以正常打包...

3245

扫码关注云+社区