ConfigMap
用来保存非敏感信息,里面有数据(data),存放键值对(key1:value1,key2:value2)是我们配置的参数。其中value可以为非常复杂,key可以是文件名。因此ConfigMap是键值集合
使用方法
1.把key值映射成容器的变量值,附值时,把key变成容器里的变量,可以修改value,来修改容器配置
image.png
Pod:filebeat连接redis,给变量REDIS_HOST赋值redis-cfg.redis 这种引用有缺陷,一旦引用完成。如果ConfigMap中配置修改配置,必须干掉此Pod,再创建Pod加载配置
2.ConfigMap资源可以直接被Pod当作容器使用
image.png
在nginx的Pod中定义一个类型为ConigMap的存储卷,把nginx-cfg的ConfigMap与其关联存储卷会自动把nginx-cfg中的key值映射成文件名,并把Volume挂载到/etc/nginx/conf.d目录下,把nginx-cfg的配置修改,Pod会自动重载(Pod前提必须支持重载),如果不支持,手动干掉Pod,然后再启动
sercert与ConfigMap值是通过base64加码(也可以反解出来)
kubectl create configmap -h
--from-file: 通过文件做配置文件,key是文件名,value是文件内容。 key也可以自己定义
--from-literal: 创建key和value
kubectl create ns config
kubectl create configmap filebeat-cfg -n config --from-literal=redis_host="redis.default.svc.cluster.local" --from-literal=log_level="Info"
redis_host:指定service的名字,我们可以创建此service,让其关联redis
kubectl get cm -n config
kubectl get cm -n config -o yaml
[root@k8s-master basic]# cat pod-cfg.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-cfg-demo
namespace: config
spec:
containers:
- name: filebeat
image: ikubernetes/filebeat:5.6.5-alpine
env:
- name: REDIS_HOST
valueFrom:
configMapKeyRef:
name: filebeat-cfg
key: redis_host
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: filebeat-cfg
key: log_level
kubectl apply -f pod-cfg.yaml
kubectl exec -it pod-cfg-demo -n config -- /bin/sh
printenv
修改configMap中的值
kubectl edit cm filebeat-cfg -n config
log_level: Notice
kubectl get cm filebeat-cfg -n config -o yaml
3.基于存储卷方式的Pod配置
[root@k8s-master conf]# cat myserver.conf
server {
server_name www.magedu.com;
listen 80;
location / {
root "/root/share/nginx/html";
}
}
[root@k8s-master conf]# cat server2.conf
server {
server_name www.ilinux.io;
listen 8080;
location / {
root "/html/ilinux";
}
}
kubectl create configmap nginx-cfg --from-file=./myserver.conf --from-file=./server2.conf -n config
kubectl get cm nginx-cfg -n config -o yaml
[root@k8s-master basic]# cat myapp-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
namespace: config
spec:
containers:
- name: myapp
image: nginx:1.14-alpine
volumeMounts:
- name: config
mountPath: /etc/nginx/conf.d
volumes:
- name: config
configMap:
name: nginx-cfg
items:
- key: server2.conf //configMap中ngx-cfg中的key
path: server-second.conf //映射成Pod中的哪个文件
- key: myserver.conf
path: server-first.conf
kuectl apply -f myapp-pod.yaml
如果启动失败,则代表配置文件不对
kubectl exec -it nginx-pod -n config -- /bin/sh
ls /etc/nginx/conf.d/
configMap 类似于服务配置中心
网友评论