應(yīng)用部署的一個(gè)最佳實(shí)踐是將應(yīng)用所需的配置信息與程序進(jìn)行分離,這樣可以使應(yīng)用程序被更好地復(fù)用,通過不同的配置也能實(shí)現(xiàn)更靈活的功能勘纯。將應(yīng)用打包為容器鏡像后吧兔,可以通過環(huán)境變量或者外掛文件的方式在創(chuàng)建容器時(shí)進(jìn)行配置注入论咏,但在大規(guī)模容器集群的環(huán)境中,對多個(gè)容器進(jìn)行不同的配置將變得非常復(fù)雜颁井。K8S提供了一種統(tǒng)一的應(yīng)用配置管理方案ConfigMap(環(huán)境變量)厅贪。
創(chuàng)建ConfigMap:
用yaml的方式創(chuàng)建:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
port: 80
server_name: wl.com
#值可以用于存儲(chǔ)配置文件
用kubectl創(chuàng)建ConfigMap:
kubectl crate configmap nginx-config --from-literal=port=80 --from-literal=server_name=wl.com
kubectl crate configmap nginx-www--from-file=nginx.conf=./www.conf
#文件內(nèi)容會(huì)成為環(huán)境變量的值;--from-file=./www.conf環(huán)境變量名稱為文件名稱
Pod使用ConfigMap:
無volume:
apiVesion: v1
kind: Pod
metadata:
name: www
namespace: default
spec:
containers:
- name: nginx
image: wl/nginx:v1.12
env:
- name: PORT
valueFrmo:
configMapKeyRef:
- name: nginx-config
key: port
#如果需要ConfigMap中全部變量
apiVesion: v1
kind: Pod
metadata:
name: www
namespace: default
spec:
containers:
- name: nginx
image: wl/nginx:v1.12
envFrom:
- configMapRef
name: nginx-config
通過volume掛載ConfigMap:
apiVesion: v1
kind: Pod
metadata:
name: www
namespace: default
spec:
containers:
- name: nginx
image: wl/nginx:v1.12
volumeMounts:
- name: config
mountPath: /data
volumes:
- name: config
configMap:
name: nginx-config
items:
- key: port
path: port
#如果你只想掛載ConfigMap中某個(gè)值可以用items字段單獨(dú)掛載蚤蔓,要全部掛載不用寫items字段卦溢。
如果你用volume方式掛載ConfigMap,運(yùn)行時(shí)的Pod也能實(shí)時(shí)獲取ConfigMap的更新秀又,不用volume就不能单寂。
secret資源:
secret用于存儲(chǔ)比較私密的數(shù)據(jù)(不安全)
kubectl crate secret generic mysql-root-password --from-literal=pass=root123
#創(chuàng)建secret,在Pod的使用方法和ConfigMap的方法類似只是剛剛字段名稱即可吐辙。