k8s 七之Configmap配置管理

configmap是什么

  • configmap用于保存配置数据,以键值对形式存储。
  • configmap资源提供了向 Pod 注入配置数据的方法
  • 旨在让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
  • 典型的使用场景:
    填充环境变量的值
    设置容器内的命令行参数
    填充卷的配置文件

如何创建configmap

创建ConfigMap的方式有4种:

  • 使用字面值创建
  • 使用文件创建
  • 使用目录创建
  • 编写configmap的yaml文件创建

使用字面值创建

1.kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2

2.kubectl get cm my-config -o yaml

3.kubectl describe cm my-config 

字面值创建
在这里插入图片描述
在这里插入图片描述

使用文件创建

1.kubectl create configmap my-config-2 --from-file=/etc/resolv.conf

2.kubectl get cm my-config-2 -o yaml

3.kubectl describe cm my-config-2 

在这里插入图片描述
key是文件名称,value是文件内容。
在这里插入图片描述

使用目录创建

1.创建目录
mkdir congfigmap
cd congfigmap
mkdir test
cd test

2.拷贝文件
cp /etc/passwd .
cp /etc/hosts .

3.开始创建
cd ..
kubectl create configmap my-config-3 --from-file=test

4.查看
kubectl get cm my-config-3 
kubectl get cm my-config-3 -o yaml

在这里插入图片描述
在这里插入图片描述

编写configmap的yaml文件创建

1.编写文件
vim cm1.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm1-config
data:
  db_host: "192.168.1.250"
  db_port: "3306"

2.运行文件
kubectl apply -f cm1.yaml

3.查看
kubectl describe cm cm1-config

在这里插入图片描述
在这里插入图片描述

如何使用configmap

  • 通过环境变量的方式直接传递给pod
  • 通过在pod的命令行下运行的方式
  • 作为volume的方式挂载到pod内

使用configmap设置环境变量

1.编写文件
vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
    - name: pod1
      image: busybox
      command: ["/bin/sh", "-c", "env"]
      env:
        - name: key1
          valueFrom:
            configMapKeyRef:
              name: cm1-config
              key: db_host
        - name: key2
          valueFrom:
            configMapKeyRef:
              name: cm1-config
              key: db_port
  restartPolicy: Never

2.运行文件
kubectl apply -f pod1.yaml

3.查看pod运行是否正常以及日志是否有cm1-config信息
kubectl get pod
kubectl logs pod1

在这里插入图片描述
在这里插入图片描述

使用conigmap设置命令行参数

1.编写文件
vim pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
    - name: pod2
      image: busybox
      command: ["/bin/sh", "-c", "echo $(db_host) $(db_port)"]
      envFrom:
        - configMapRef:
            name: cm1-config
  restartPolicy: Never

2.运行文件
kubectl apply -f pod2.yaml 

3.查看pod运行是否正常以及日志信息
kubectl get pod
kubectl logs pod2

在这里插入图片描述
在这里插入图片描述

通过数据卷使用configmap

1.编写文件
vim pod2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
    - name: pod2
      image: busybox
      command: ["/bin/sh", "-c", "cat /config/db_host"]
      volumeMounts:
      - name: config-volume
        mountPath: /config
  volumes:
    - name: config-volume
      configMap:
        name: cm1-config
  restartPolicy: Never

2.运行文件
kubectl apply -f pod2.yaml

3.查看pod运行是否正常以及日志信息
kubectl get pod
kubectl logs pod2

在这里插入图片描述
在这里插入图片描述

configmap热更新

1.编写文件
vim pod3.yaml 
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:
        - name: config-volume
          mountPath: /usr/share/nginx/html
      volumes:
        - name: config-volume
          configMap:
            name: cm2-config
     
2.编写测试文件
vim index.html
  
3.创建cm
kubectl create configmap cm2-config --from-file=index.html
    
4.查看cm
kubectl get cm
kubectl describe cm cm2-config 

5.运行文件
kubectl apply -f pod3.yaml 

6.查看pod
kubectl get pod
kubectl  get pod -o wide  

7.测试
curl 10.244.141.203

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更新一下,更改index.html

8.kubectl edit cm cm2-config 

9.curl 10.244.141.203

在这里插入图片描述
更新稍微有点延迟
在这里插入图片描述

10. vim nginx.conf 

11.kubectl create configmap cm2-config --from-file=nginx.conf

12.查看cm
kubectl get cm

13.vim pod3.yaml 

14.kubectl apply -f pod3.yaml 

15.查看pod
kubectl get pod
kubectl  get pod -o wide 

16.curl 10.244.141.207:8000

17.进入容器
kubectl exec podname -- ls /etc/nginx/conf.d
kubectl exec podname -- cat /etc/nginx/conf.d/nginx.conf

如果更改的是配置文件呢?我们还需要reload操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更新可以通过两种方式(1)patch命令(2)删除原有的pod

方法一:patch命令
1.修改文件端口号
kubectl edit cm nginx-config

2.发现还是可以访问8000端口
curl 10.244.141.207:8000

3.打补丁
kubectl patch deployments.apps my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20210915"}}}}}'

4.更新成功,无法访问8000端口,但是可以访问新ip+8080端口
curl 10.244.141.207:8000
curl 10.244.141.208:8080

方法二:删除原有的pod(适用于有控制器的pod)这里就不演示了
1.kubectl edit cm nginx-config

2.查看pod
kubectl get pod
kubectl get pod -o wide

3.删除pod
kubectl delete pod my-nginx-xxxxxxx-xxxxx 

4.重新访问
curl 10.244.141.xxx:8000
curl 10.244.141.xxx:8080

在这里插入图片描述
发现依然可以访问8000,并没有更新成功。
在这里插入图片描述
patch会将原有pod删除
在这里插入图片描述
滚动更新后其ip也会变,访问新的ip和端口,成功!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值