K8s configmap配置

前提
基于分布式的场景需求,应用都是会存在多个节点上的,对于随着应用的增加会带来很大的不便利,如果配置发生更改就要进行重新提交git、打包、分发,分发上线的工作就变得繁杂和沉重

开源本身也提供了很多的解决方案,比如diamond、apollo、disconf等等,而k8s就是configmap

configmap

以非机密性的数据形式提供给Pod,实现分布式环境对配置信息的需求

  • 存储格式:K/V键值对
  • 使用方式:环境变量和挂载(volumes)
  • 创建方式:命令行创建和配置清单

存储格式

  • server.conf: configmap

  • |+ :表示段落块,因为配置信息往往不是单行值,而是一个段的信息

创建方式

命令行创建

kubectl create configmap test-configmap --from-file=nginx.conf
#可以指定文件、环境变量、字符(常见肯定是配置文件形式),文件名就是key名称

在这里插入图片描述配置清单创建

apiVersion: v1
kind: ConfigMap
metadata:
  name: test1-configmap
data:
 index.html: |+
      test
      1
      2
      3
      4 
      7

在这里插入图片描述

使用方式(其实分为4种)

  • 容器 entrypoint 的命令行参数
  • 容器的环境变量
    • 缺点:导致信息无法变更或者是对于程序调用子进程是无法读取到父环境变量
  • 挂载(volumes)
    • 当已经存储于卷中被使用的 configmap 被更新时,被映射的键也将终将被更新,由kubelet 在周期性同步时检查更新
  • 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap
apiVersion: v1
kind: Pod
metadata:
 name: nginx
 labels:
   app: nginx
spec:
 containers:
   - name: nginx
     image: nginx:1.19
     volumeMounts:
       - name: test
         mountPath: /usr/share/nginx/html      
 volumes:
   - name: test
     configMap:
       name: test1-configmap

查看容器文件是否被替换成功
在这里插入图片描述
注意点就是挂载后的文件名就是configmap下data定义的key名称,因为我要替换之前的index.html,所以key就要定义为index.html

参考:https://v1-19.docs.kubernetes.io/zh/docs/concepts/configuration/configmap/#using-configmaps

猜你喜欢

转载自blog.csdn.net/yangshihuz/article/details/113770952