ConfigMap

作者: 麟之趾a | 来源:发表于2020-09-10 13:58 被阅读0次

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

    相关文章

      网友评论

          本文标题:ConfigMap

          本文链接:https://www.haomeiwen.com/subject/ulbeektx.html