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