美文网首页K8S容器编排最佳实践
K8S容器编排之ConfigMap热更新测试

K8S容器编排之ConfigMap热更新测试

作者: 云爬虫技术研究笔记 | 来源:发表于2019-01-22 22:46 被阅读3632次

文档说明

实验环境:kubernetes Version v1.9.6
网络CNI:fannel
存储CSI: NFS Dynamic Class

获取configmap中的环境变量方式有2种:
1、使用该 ConfigMap 挂载的 Env
2、使用该 ConfigMap 挂载的 Volume

更新使用ConfigMap挂载的Env

nginx-cm.yaml

apiVersion: v1
kind: ConfigMap
metadata: 
  name: env-config
  namespace: default
data:
  log_level: INFO

nginx-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  name: my-nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:1.10
        ports:
        - containerPort: 80
        envFrom:
        - configMapRef:
            name: env-config

验证

实验结果.png
实践证明修改 ConfigMap 无法更新容器中已注入的环境变量信息

更新使用ConfigMap挂载的Volume

nginx-cm2.yaml

apiVersion: v1
kind: ConfigMap
metadata: 
  name: special-config
  namespace: default
data:
  log_level: INFO

nginx-deployment-v.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
  name: my-nginx-2
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: my-nginx-2
    spec:
      containers:
      - name: my-nginx-2
        image: nginx:1.10
        ports:
        - containerPort: 80
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config
      volumes:
        - name: config-volume
          configMap:
            name: special-config

验证

1.png 2.png 3.png

总结

更新 ConfigMap 后:

  • 使用该 ConfigMap 挂载的 Env 不会同步更新
  • 使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新

ENV 是在容器启动的时候注入的,启动之后 kubernetes 就不会再改变环境变量的值,且同一个 namespace 中的 pod 的环境变量是不断累加的,参考 Kubernetes中的服务发现与docker容器间的环境变量传递源码探究。为了更新容器中使用 ConfigMap 挂载的配置,可以通过滚动更新 pod 的方式来强制重新挂载 ConfigMap,也可以在更新了 ConfigMap 后,先将副本数设置为 0,然后再扩容。

参考文档:
https://jimmysong.io/posts/kubernetes-configmap-hot-update/

相关文章

网友评论

    本文标题:K8S容器编排之ConfigMap热更新测试

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