创建一个目录,用来做配置文件存储目录
mkdir /root/httpd-config ; cd /root/httpd-config
模拟两个配置文件,一个nginx,一个apache
echo "nginx aaaaaaaaaa" >> nginx.conf
echo "apache bbbbbbbbbbb" >> apache.conf
[root@k8s-master httpd-config]# ls
apache.conf nginx.conf
生成目录 ConfigMap
kubectl create configmap httpd-config --from-file=/root/httpd-config
httpd-config:自定义的Configmap名称
--from-file:CM存储中包含文件来源 /root/httpd-config
查看生成的 ConfigMap 中包含了哪些文件
kubectl get cm
查看集群包含哪些 ConfigMap
kubectl get cm httpd-config -o yaml
查看生成的 ConfigMap 是如何定义的
kubectl describe cm httpd-config
查看生成的 ConfigMap 具体信息
只要指定为一个文件就可以从单个文件中 创建 ConfigMap
kubectl create configmap mysql-config --from-file=/root/my.cnf
查看生成的 ConfigMap 中包含了哪些文件
kubectl get cm
kubectl get cm mysql-config -o yaml
kubectl describe cm mysql-config
使用文字值创建,利用 --from-literal 参数传递配置信息
kubectl create configmap special-config \
--from-literal=special.how=very \
--from-literal=special.type=charm
--from-literal:指定键名=键值
查看生成的 ConfigMap 中包含了哪些文件
kubectl get cm
kubectl get cm mysql-config -o yaml
kubectl describe cm mysql-config
先创建两个 ConfigMap 并准备好键值
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config #第一个ConfigMap的名称
namespace: default
data:
log_level: INFO #enc-config 的 键名:键值
apiVersion: v1
kind: ConfigMap
metadata:
name: spcial_config #第二个ConfigMap的名称
namespace: default
data:
special.how: very #spcial_config 的第一个 键名:键值
special.type: charm #spcial_config 的第二个 键名:键值
将 env_config 和 spcial_config 注入到 Pod 容器当中使用
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: nginx-container
image: nginx:1.9.1
command: ["/bin/sh","-c","env"] #运行命令,打印环境变量
env: #env注入环境变量的第一种写法,只引入键值
- name: SPECIAL_LEVEL_KEY #定义注入第一个环境变量名
valueFrom: #环境变量的值从哪来
configMapKeyRef: #从 configMap 中获取变量值
name: special-config #从 special_config 中获取key的值,充当变量值
key: special.how #从 special_config 中的哪个key的值,充当变量值
- name: SPECIAL_TYPE_KEY #定义注入的第二个环境变量名,只引入键值
valueFrom: #环境变量的值从哪来的
configMapKeyRef: #从 ConfigMap 中获取
name: special-config #从哪个 ConfigMap 中获取得
key: special.type #从 special_config 中得哪个键获取得变量值
envFrom: #env注入环境变量得第二种写法,键名:键值全部引入
- configMapRef: #从创建的 ConfigMap 中导入值
name: env-config #创建的 ConfigMap 叫什么
restartPolicy: Never
kubectl logs dapi-test-pod | grep “^SPECIAL_*”
kubectl logs dapi-test-pod | grep ^log_level
apiVersion: v1
kind: ConfigMap
metadata:
name: spcial_config #第二个ConfigMap的名称
namespace: default
data:
special.how: very #spcial_config 的第一个 键名:键值
special.type: charm #spcial_config 的第二个 键名:键值
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod2
spec:
containers:
- name: nginx2-container
image: nginx:1.9.1
command: ["/bin/sh","-c","echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)"]
env: #env注入变量,只引入键值
- name: SPECIAL_LEVEL_KEY #定义注入第一个环境变量名
valueFrom: #环境变量的值从哪来
configMapKeyRef: #从 configMap 中获取变量值
name: special-config #从 special_config 中获取key的值,充当变量值
key: special.how #从 special_config 中的哪个key的值,充当变量值
- name: SPECIAL_TYPE_KEY #定义注入的第二个变量名,只引入键值
valueFrom: #环境变量的值从哪来的
configMapKeyRef: #从 ConfigMap 中获取
name: special-config #从哪个 ConfigMap 中获取得
key: special.type
restartPolicy: Never
配置文件注册中心最常用得一种方法
首先生成好 ConfigMap,可以是目录CM,可以是文件CM,也可以是键值对。
再创建 Pod 得时候将 configMap 挂载到 Pod 容器当中,实现共享卷。
apiVersion: v1
kind: ConfigMap
metadata:
name: spcial_config #第二个ConfigMap的名称
namespace: default
data:
special.how: very #spcial_config 的第一个 键名:键值
special.type: charm #spcial_config 的第二个 键名:键值
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod3
spec:
containers:
- name: nginx3-container
image: nginx:1.9.1
command: ["/bin/sh","-c","cat /etc/config/special.how;sleep 600s"]
volumeMounts: #挂载一个数据卷
- name: config-volume #数据卷得名称是 config-volume
mountPath: /etc/config #挂载到容器哪个路径下
volumes: #指定数据卷
- name: config-volume #数据卷名称,与volumeMounts对应
configMap: #是 configMap 类型得数据卷
name: special-config #ConfigMap 数据卷得名字
restartPolicy: Never
进入容器查看是否挂载成功:kubectl exec dapi-test-pod3 -it – /bin/bash
创建一个键值对 ConfigMap,并将其挂载到 Deployment - Nginx /etc/config 目录中
apiVersion: v1
kind: ConfigMap
metadata:
name: log-config
namespace: default
data:
log_level: INFO
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 2
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: my-nginx
image: nginx:1.9.1
ports:
- containerPort: 80
volumeMounts:
- name: conf-volume
mountPath: /etc/config
volumes:
- name: conf-volume
configMap:
name: log-config
查看是否挂载成功:
kubectl exec my-nginx-7854488b9d-46tl4 -it -- ls /etc/config
热更新,修改 ConfigMap 的键值对数据
kubectl edit cm log-config
验证更新效果,等待10秒左右同步生效
< – 不一定非得是键值对形式的 ConfigMap,其他方式生成的同理能够修改同步 -->
1.手动更新 Pod 当中
2.修改 Pod annotations 的方式强制触发滚动更新,这里面的时间为当天时间(或者更新时间)
kubectl patch deployment my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config":"20200616" }}}}}'
deployment:控制器类型
my-nginx:容器标签
g-53LuHcAb-1592301445839)]
#### ConfigMap 更新后触发滚动更新 Pod
**1.手动更新 Pod 当中**
**2.修改 Pod annotations 的方式强制触发滚动更新,这里面的时间为当天时间(或者更新时间)**
```shell
kubectl patch deployment my-nginx --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config":"20200616" }}}}}'
deployment:控制器类型
my-nginx:容器标签