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
    评论
k8s学习 介绍 序⾔ 课程介绍 Docker 基础 Docker 简介 镜像和容器的基本操作 Dockerfile 定制镜像 私有镜像仓库 数据共享与持久化 Docker 的⽹络模式 Docker 三架⻢⻋ Docker Compose Docker Machine Docker Swarm Docker 实践 图形化管理和监控 Docker 的多阶段构建 Dockerfile 最佳实践 Kubernetes 基础 Kubernetes 初体验 基本概念与组件 kubeadm 搭建集群 使⽤ kubeadm 搭建集群环境 安装 Dashboard 插件 17.1 7.2 7.3 7.4 7.5 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 9.1 9.2 9.3 10.1 10.2 10.3 11.1 11.2 11.3 深⼊理解 Pod YAML ⽂件 静态 Pod Pod Hook Pod 的健康检查 初始化容器 常⽤对象操作: Replication Controller 与 Replica Set Deployment HPA Job/CronJob Service ConfigMap Secret RBAC 部署Wordpress示例 DaemonSet 和 StatefulSet 持久化存储: PV PVC StorageClass 服务发现 kubedns ingress 安装配置 ingress tls 和 path 的使⽤ 包管理⼯具 Helm Helm 的安装使⽤ Helm 的基本使⽤ Helm 模板之内置函数和Values 211.4 11.5 11.6 11.7 11.8 12.1 12.2 13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 13.9 14.1 14.2 15.1 15.2 15.3 15.4 15.5 15.6 15.7 Helm 模板之模板函数与管道 Helm 模板之控制流程 Helm 模板之命名模板 Helm 模板之其他注意事项 Helm Hooks 调度器 Kubernetes 调度器介绍 Kubernetes 亲和性调度 集群监控 ⼿动安装 Prometheus 监控 Kubernetes 集群应⽤ 监控 Kubernetes 集群节点 监控 Kubernetes 常⽤资源对象 Grafana 的安装使⽤ AlertManager 的使⽤ Prometheus Operator 的安装 ⾃定义Prometheus Operator 监控项 Prometheus Operator⾼级配置 ⽇志收集 ⽇志收集架构 搭建 EFK ⽇志系统 CI/CD: 动态 Jenkins Slave Jenkins Pipeline 部署 Kubernetes 应⽤ Jenkins BlueOcean Harbor Gitlab Gitlab CI Devops

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值