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寫入的方式支持熱更新!所以以后在需要更新文件配置時需要區分進行判斷。
