1 ConfigMap
作用:存储不加密数据到etcd,让Pod以变量或者Volume挂载到容器中
场景:配置文件
2 创建ConfigMap
2.1 使用–from-file创建
创建文件的 --from-file可以多次使用,不但可以指定单个文件,还可以指定整个文件夹。
创建 redis.properties
redis.host=127.0.0.1
redis.port=6379
redis.password=123@abAB
创建其对应的configMap
kubectl create configmap redis-config --from-file=redis.properties
kubectl get cm
kubectl describe cm redis-config
2.2 使用-from-literal参数传递配置信息
使用文字值创建,利用-from-literal参数传递配置信息,该参数可以使用多次,格式如下:
kubectl create configmap redis-config \
--from-literal=redis.host=127.0.0.1 \
--from-literal=redis.port=6379 \
--from-literal=redis.password=123@abAB
效果嘛,虽然没试过,但估计一样
3 Pod中使用ConfigMap
3.1 以Volume形式挂载
创建cm.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ] # 执行的操作,输出挂载的configmap内容
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: redis-config
restartPolicy: Never
kubectl apply -f cm.yaml
kubectl get pod
kubectl logs mypod
3.2 以变量形式挂载
(1) 创建yaml,声明变量信息 configmap 创建
创建 myconfig.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig
namespace: default
data:
special.level: info
special.type: hello
kubectl apply -f myconfig.yaml
kubectl get cm
(2) 以变量挂载
创建config-var.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ] # 输出环境变量中的LEVEL与TYPE字段
env:
- name: LEVEL # 自定义名称
valueFrom: # 取值
configMapKeyRef: # 从configmap取
name: myconfig # configmap名称
key: special.level # 对应的key
- name: TYPE
valueFrom:
configMapKeyRef:
name: myconfig
key: special.type
restartPolicy: Never
kubectl apply -f config-var.yaml
kubectl get pod
kubectl logs mypod
4 ConfigMap 热更新
emmm这部分等用到再学吧,以前的公司都没用过这玩意呢。
5 ConfigMap 更新后滚动更新Pod
同第四条