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写入的方式支持热更新!所以以后在需要更新文件配置时需要区分进行判断。

posted @ 2019-12-13 15:09  周知非  阅读(1936)  评论(0编辑  收藏  举报
返回顶点