ConfigMap

2020-09-10  本文已影响0人  麟之趾a

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 类似于服务配置中心
上一篇 下一篇

猜你喜欢

热点阅读