Kubernetes---ConfigMap配置管理

目录

一、基本介绍

二、创建管理的4种方式

2.1 使用字面值创建

2.2 使用文件创建

2.3 使用目录创建

2.4 编写configmap 的yaml文件

 三、使用创建的变量

3.1 通过环境变量的方式直接传递给pod

3.2 通过在pod的命令行下运行的方式

3.3 作为volume的方式挂载到pod内

 四、ConfigMap的热更新


一、基本介绍

官网指南:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/

ConfigMap配置管理:

        • ConfigMap用于保存配置数据,以键值对形式存储;

        • ConfigMap资源提供了向 Pod 注入配置数据的方法;

        • 旨在让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。

典型的使用场景:

        • 填充环境变量的值;

        • 设置容器内的命令行参数;

        • 填充卷的配置文件。

二、创建管理的4种方式

四种创建方式:

        • 使用字面值创建;

        • 使用文件创建;

        • 使用目录创建;

        • 编写configmap的yaml文件创建

2.1 使用字面值创建

##使用键值对的形式创建面变量
[root@server1 configmap]# kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2

##查看所存在的环境变量
[root@server1 configmap]# kubectl get cm

##查看指定命名空间的值
[root@server1 configmap]# kubectl get cm -n kube-system

##查看细节
[root@server1 configmap]# kubectl describe cm 

##删除
[root@server1 configmap]# kubectl delete configmap my-config

图 1 使用字面值进行创建

2.2 使用文件创建

##通过指定文件创建
[root@server1 configmap]# kubectl create configmap my-config-2 --from-file=/etc/resolv.conf

##查看指定信息
[root@server1 configmap]# kubectl describe cm my-config-2
图 2 使用文件创建

2.3 使用目录创建

##创建测试目录
[root@server1 configmap]# mkdir test
[root@server1 configmap]# cp /etc/resolv.conf ./test/
[root@server1 configmap]# cp /etc/fstab ./test/

##使用文件创建
[root@server1 configmap]# kubectl create configmap my-config-file --from-file=./test/
图 3 使用文件目录创建

2.4 编写configmap 的yaml文件

[root@server1 configmap]# vim cm.yml
[root@server1 configmap]# cat cm.yml 
apiVersion: v1 
kind: ConfigMap 
metadata:  
  name: cm1-config 
data:  
  db_host: "172.25.0.250"  
  db_port: "3306"
[root@server1 configmap]# kubectl apply -f cm.yml 
configmap/cm1-config created
[root@server1 configmap]# kubectl get cm
NAME               DATA   AGE
cm1-config         2      5s
kube-root-ca.crt   1      11m
my-config-2        1      10m
my-config-file     2      5m4s

[root@server1 configmap]# kubectl describe cm cm1-config
图 4 使用Yml文件创建

 三、使用创建的变量

三种方式:

        • 通过环境变量的方式直接传递给pod;

        • 通过在pod的命令行下运行的方式;

        • 作为volume的方式挂载到pod内。

3.1 通过环境变量的方式直接传递给pod

##编写配置文件
[root@server1 configmap]# cat cm-env.yml 
apiVersion: v1 
kind: ConfigMap                 ##设置cm的环境变量
metadata:  
  name: cm1-config 
data:  
  db_host: "172.25.0.250"  
  db_port: "3306"
---
apiVersion: v1 
kind: Pod 
metadata:  
  name: pod1 
spec:  
  containers:    
    - name: pod1      
      image: busybox      
      command: ["/bin/sh", "-c", "env"]       
      env:                            ##给环境变量命名
        - name: key1          
          valueFrom:                  ##key1的值来自于cm的cm1-config中key为db_host的
            configMapKeyRef:              
              name: cm1-config              
              key: db_host        
        - name: key2          
          valueFrom:            
            configMapKeyRef:              
             name: cm1-config              
             key: db_port  
  restartPolicy: Never

##应用配置文件
[root@server1 configmap]# kubeclt apply -f cm-env.yml 

##查看运行结果
[root@server1 configmap]# kubectl logs pod1
图5 通关替换key进行环境变量的传递

 直接继承原来的key,不做改变:

[root@server1 configmap]# cat cm-env-dir.yml 
apiVersion: v1
kind: ConfigMap 
metadata:  
  name: cm1-config 
data:  
  db_host: "172.25.0.250"  
  db_port: "3306"
---
apiVersion: v1 
kind: Pod 
metadata:  
  name: pod2 
spec:  
  containers:    
    - name: pod2      
      image: busybox      
      command: ["/bin/sh", "-c", "env"]       
      envFrom:                 ##直接指定环境变量的来源   
        - configMapRef:            
            name: cm1-config        
  restartPolicy: Never
图 6 直接继承创建时的环境变量

 

3.2 通过在pod的命令行下运行的方式

[root@server1 configmap]# vim cm-dir.yml
[root@server1 configmap]# kubectl apply -f cm-dir.yml 
configmap/cm1-config unchanged
pod/pod1 created
[root@server1 configmap]# kubectl logs pod1
172.25.0.250 3306
[root@server1 configmap]# cat cm-dir.yml 
apiVersion: v1 
kind: ConfigMap 
metadata:  
  name: cm1-config 
data:  
  db_host: "172.25.0.250"  
  db_port: "3306"
---
apiVersion: v1 
kind: Pod 
metadata:  
  name: pod1 
spec:  
  containers:    
    - name: pod1      
      image: busybox      
      command: ["/bin/sh", "-c", "echo $(db_host) $(db_port)"]     ##在pod内直接执行
      envFrom:        
        - configMapRef:            
            name: cm1-config        
  restartPolicy: Never
图 7 通过命令行方式的结果

 

3.3 作为volume的方式挂载到pod内

apiVersion: v1 
kind: ConfigMap 
metadata:  
  name: cm1-config 
data:  
  db_host: "172.25.0.250"  
  db_port: "3306"
---
apiVersion: v1 
kind: Pod 
metadata:  
  name: pod2
spec:  
  containers:    
    - name: pod2      
      image: busybox      
      command: ["/bin/sh", "-c", "cat /config/*"]
      volumeMounts:               ##挂载的位置   
      - name: config-volume        
        mountPath: /config  
  volumes:                        ##卷的内容
    - name: config-volume         ##卷的名字
      configMap:                  ## 挂在的内容为cm中关键字为cm1-config 的值 
        name: cm1-config  
  restartPolicy: Never
图 8 通过卷挂载的方式的结果
##应用中的使用
[root@server1 configmap]#  kubectl apply -f cm-volum.yml 
[root@server1 configmap]#  kubectl logs pod2
[root@server1 configmap]#  vim cm-nginx.yml
[root@server1 configmap]#  kubectl apply -f cm-nginx.yml 
[root@server1 configmap]#  kubectl exec -it pod1 -- bash        ##连接应用,查看配置
[root@server1 configmap]#  cat cm-nginx.yml
apiVersion: v1 
kind: ConfigMap 
metadata:  
  name: cm1-config 
data:  
  db_host: "172.25.0.250"  
  db_port: "3306"
---
apiVersion: v1 
kind: Pod 
metadata:  
  name: pod1 
spec:  
  containers:    
    - name: pod1      
      image: nginx      
      volumeMounts:      
      - name: config-volume        
        mountPath: /config  
  volumes:    
    - name: config-volume      
      configMap:        
        name: cm1-config 
图 9 对应用文件的挂载

 四、ConfigMap的热更新

##编写服务配置文件
[root@server1 configmap]# cat cm-in.yml 
apiVersion: v1 
kind: ConfigMap                 ##编写CM的格式
metadata:  
  name: cm1-config 
data:  
  db_host: "172.25.0.250"  
  db_port: "3306"
---
apiVersion: apps/v1 
kind: Deployment 
metadata:  
  name: my-nginx 
spec:  
  replicas: 1  
  selector:    
    matchLabels:      
      app: nginx  
  template:    
    metadata:      
      labels:        
        app: nginx    
    spec:      
      containers:        
        - name: nginx          
          image: nginx          
          ports:          
          - containerPort: 80          
          volumeMounts:                  ##通过挂载的方式,讲CM变量挂到POD内
          - name: config-volume            
            mountPath: /etc/nginx/conf.d
      volumes:        
        - name: config-volume                  
          configMap:            
            name: nginx-config            ##挂载的容器名

##编写CM
[root@server1 configmap]# cat  server.conf 
server {    
 listen       8000;    
 server_name  _;
    
 location / {        
  root /usr/share/nginx/html;        
  index  index.html index.htm;    
        }
}

##以文件的方式讲CM写入
[root@server1 configmap]# kubectl create configmap nginx-config --from-file=server.conf

##查看具体信息
[root@server1 configmap]# kubectl describe cm nginx-config 

##启动POD,查看信息
[root@server1 configmap]# kubectl apply -f cm-in.yml 
[root@server1 configmap]# kubectl get pod

##查看IP,进行测试
[root@server1 configmap]# kubectl get pod -o wide

[root@server1 configmap]# curl 10.244.1.95

[root@server1 configmap]# curl 10.244.1.95:8000

##查看服务器内配置
[root@server1 configmap]# kubectl exec my-nginx-7db4c4f989-pl6c8 -- cat /etc/nginx/conf.d/server.conf
图 10 查看挂载后的访问结果

 

图 11 对配置文件内的内容进行查看
##更改内容(这里讲端口改为8080)
[root@server1 configmap]# kubectl edit cm nginx-config
configmap/nginx-config edited

##查看修改后的配置文件
[root@server1 configmap]# kubectl exec my-nginx-6c4c97b5bc-5pxqm -- cat /etc/nginx/conf.d/server.conf

 

图 12 查看配置文件是否更改

 

图 13 查看配置是否生效

 将没有生效的配置文件及逆行滚动更新

##触发滚动更新
[oot@server1 configmap]# kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20220420"}}}}}'

##查看新的POD
[root@server1 configmap]# kubectl get pod -o wide

##使用新的IP惊醒访问
[root@server1 configmap]# curl 10.244.1.95:8080
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值