• kubernetes配置文件热更新细节


    Secret与ConfigMap都是kubernetes用于文件配置的调用对象,细微的区在于Secret存储敏感信息,例如密码,OAuth token和SSH key等等,Secret更加安全和灵活。平时调用的时候也没有在乎配置文件是否热更新的问题,所以专门测试记录。

    1.ConfigMap测试
    Configmap使用有两种方式,一种是env系统变量赋值,一种是volume挂载赋值,以下为ConfigMap的yaml文件,创建了三个数据对,并为configmap取名为info。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: info
    data:
      name: leo_zhou
      sex: m
      city: chengdu

    创建deployment,并且调用configmap

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: busybox
    spec:
      selector:
        matchLabels:
          app: busybox
      replicas: 1
      template:
        metadata:
          labels:
            app: busybox
        spec: 
          containers: 
          - image: library/busybox:latest
            name: busybox
            args:
            - /bin/sh
            - -c
            - sleep 10; touch /tmp/healthy; sleep 30000
            env:
              - name: city
                valueFrom:
                  configMapKeyRef:
                    name: info
                    key: city
            volumeMounts:
            - name: etc
              mountPath: "/data"
              readOnly: true
          volumes:
          - name: etc
            configMap:
              name: info
              items:
              - key: name
                path: xxx
              - key: sex
                path: yyy

    ①env方式调用city获取数据值
    ②volume方式调用name和sex值
    创建完毕后进入容器,检查赋值情况

    更新configmap的yaml文件,city修改为beijing,sex为f,重新进入刚才的容器进行测试

    发现env写入系统的configmap是不会热更新的,而volume写入的方式支持热更新!

    2.Secret测试
    Secret同样使用有两种方式,一种是env系统变量赋值,一种是volume挂载赋值,以下为Secret的yaml文件,创建了三个数据对,并为Secret取名为sc,需要注意的是只支持base64的字符串,普通的字符不能在配置文件种,不然会报错!

    echo -n 'chengdu' | openssl base64
    Y2hlbmdkdQ==
    #需要用openssl base64转换字符

    name:leo_zhou
    sex:m
    city:chengdu

    apiVersion: v1
    kind: Secret
    metadata:
      name: sc
    data:
      name: bGVvX3pob3U=
      sex: bQ==
      city: Y2hlbmdkdQ==

    创建deployment,并且调用secret

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: busybox-2
    spec:
      selector:
        matchLabels:
          app: busybox-2
      replicas: 1
      template:
        metadata:
          labels:
            app: busybox-2
        spec:
          containers:
          - image: library/busybox:latest
            name: busybox-2
            args:
            - /bin/sh
            - -c
            - sleep 10; touch /tmp/healthy; sleep 30000
            env:
              - name: city
                valueFrom:
                  secretKeyRef:
                    name: sc
                    key: city
            volumeMounts:
            - name: etc
              mountPath: "/data"
              readOnly: true
          volumes:
          - name: etc
            secret:
              secretName: sc
              items:
              - key: name
                path: xxx
              - key: sex
                path: yyy

    创建完毕后进入容器,检查赋值情况


    更新secret的yaml文件,city修改为beijing,sex为f,重新进入刚才的容器进行测试。

    同样发现env写入系统的secret是不会热更新的,而volume写入的方式支持热更新!所以以后在需要更新文件配置时需要区分进行判断。

  • 相关阅读:
    成功更容易光顾磨难和艰辛,正如只有经过泥泞的道路才会留下脚印
    只要信心在,勇气就在,努力在,成功就在!
    不积跬步无以至千里,不积小流无以成江海
    你给自己留的退路越多,你失败的可能性就越大
    不要质疑你的付出,这些都会是一种累积一种沉淀,它们会默默铺路,只为让你成为更优秀的人
    生活的一大乐趣便是完成别人认为你不能做到的事情
    优于别人,并不高贵,真正的高贵,是优于过去的自己
    再长的路 ,一步步也能走完,再短的路,不迈开双脚也不无法到达!
    09SpringAopAdvice
    java中接口(interface)和虚基类(abstract class)的区别
  • 原文地址:https://www.cnblogs.com/zhouzhifei/p/12035190.html
Copyright © 2020-2023  润新知