侧边栏壁纸
  • 累计撰写 208 篇文章
  • 累计创建 16 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

kubernetes ConfigMap 使用详解

Wake
2022-09-20 / 0 评论 / 0 点赞 / 687 阅读 / 743 字

在应用部署时,配置文件几乎是绕不开的,通常我们是把配置文件放置在指定目录下,通过配置文件使应用修改的灵活性更高。但是如果我们把应用打包成容器镜像后,容器内的镜像文件就不容易修改了,一般我们会采用以下方式修改容器中的配置文件:

通过环境变量传入
外挂文件,在容器启动时引入
但是以上两种方式在进行大规模集群部署时,对多个容器进行不同的配置会变得比较复杂。这种不方便不仅针对容器,对于传统运维来讲,也是存在的,因此配置中心这个概念就应运而生了,例如Apollo,由携程开源的分布式配置中心,就是将配置信息存储在数据库中,然后对外提供 API,这样就能集中化管理不同应用的不同配置,而且修改后实时生效。kubernetes 作为集中化运维管理实施方案,也提供了集中配置管理方案- ConfigMap。下面我们就来详细讲解一下使用方式。
ConfigMap 的创建
通过 YAML 配置文件方式
按照环境变量的方式配置

# example_env.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: example
data:
  server_name: "www.baidu.com"
  server_port: "8080"

执行创建命令:

kubectl apply -f example_env.yml

查看configmap内容
image-1663673637437
按照文件内容方式配置

# example_content.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: examplecontent
data:
  redis.conf: |
    daemonize no
    pidfile /var/run/redis.pid
    port 6379
    bind 127.0.0.1
    databases 16
  my.cnf: |
    [client]
    port=3306
    [mysqld]
    default-storage-engine=INNODB
    socket=/usr/local/mysql/mysql.sock

执行创建命令:

kubectl apply -f example_content.yml

查看执行内容
image-1663673717085
通过 kubectl 命令行方式
命令的的创建方式主要是不写 YAML 文件,而是通过命令行引入本地文件的内容作为配置

导入文件内容作为配置

# my.cnf
[client]
port=3306

[mysqld]
default-storage-engine=INNODB
socket=/usr/local/mysql/mysql.sock

执行创建命令:

kubectl create configmap examplefile --from-file=my.cnf

image-1663673800217

在 Pod 中使用 ConfigMap
通过 volumeMount 使用 ConfigMap
我们以上面创建的 exampledir 来作为示例

将配置挂载为目录

apiVersion: v1
kind: Pod
metadata:
  name: filepod
spec:
  containers:
  - name: test
    image: busybox
    command: ["/bin/sh", "-c", "sleep 3600"]
    volumeMounts:
    - name: serverfile  # 引用的 volums 名称
      mountPath: /configfiles  # 容器内挂载的目录
  volumes:
  - name: serverfile  # 定义的 volums 名称
    configMap:
      name: exampledir      # 使用名为 exampledir 的 ConfigMap 
      items:
        - key: redis.conf   # ConfigMap 中的 key 名称
          path: redis.conf  # 挂载到容器后的文件名
        - key: my.cnf       # ConfigMap 中的 key 名称
          path: my.cnf      # 挂载到容器后的文件名
  restartPolicy: Never

创建 Pod

kubectl apply -f filepod.yml

登录 Pod,查看目录 /configfiles 下的文件,可以看到两个配置都以文件的方式呈现出来
image-1663673878418

0

评论区