Kubernetes存储之ConfigMap
生活随笔
收集整理的這篇文章主要介紹了
Kubernetes存储之ConfigMap
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ConfigMap功能在Kubernetes1.2版本中引入,許多應用程序會從配置文件,命令行參數或環境變量中讀取配置信息,ConfigMap API給我們提供了向容器中注入配置信息的機制,ConfigMap可以被用來保存單個屬性,也可以用來保存整個配置文件或者JSON二進制對象
ConfigMap的創建
1.使用目錄創建
$ ls docs/user-guide/configmap/kubectl/ game.properties ui.properties$ cat docs/user-guide/configmap/kubectl/game.properties enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten enemies.code.passphrase=UUDDLRLRBABAS secret.code.allowed=true secret.code.lives=30$ cat docs/user-guide/configmap/kubectl/ui.properties color.good=purple color.bad=yellow aoolw.textmode=true how.nice.to.look=fairlyNice$ kubectl create configmap game-config --from-file=docs/user-guide/configmap/kubectl--from-file 指定在目錄下的所有文件都會被用在ConfigMap里面創建一個鍵值對,鍵的名字就是文件名,值就是文件的內容
2.使用文件創建
$ kubectl create configmap game-config --from-file=docs/user-guide/configmap/kubectl/game.properties $ kubectl get configmaps game-config -o yaml3.使用字面值創建
使用文字值創建,利用--from-literal 參數傳遞配置信息,該參數可以使用多次,格式如下:
$ kubectl create configmap special-config --from-literal=special.how --from-literal=special.type=charm $ kubectl get configmaps special-config -o yamlPod中使用ConfigMap
在數據卷里面使用這個ConfigMap,有不同的選項,最基本的就是將文件填入數據卷,在這個文件中,鍵就是文件名,值就是文件內容
apiVersion: v1 kind: Pod metadata:name: dapi-test-pod spec:containers:- name: test-containerimage: myapp:v1command: ["/bin/sh","-c","cat /etc/config/special.how"]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: special-configrestartPolicy: NeverConfigMap的熱更新
apiVersion: v1 kind: ConfigMap metadata:name: log-confignamespace: default data:log_level: INFO --- apiVersion: extensions/v1beta1 kind: Deployment metadata:name: my-nginx spec:replicas: 1template:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: myapp:v1ports:- containerPort: 80volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: log-config $ kubectl exec 'kubectl get pods -l run-my-nginx -o=name | cut -d "/" -f2' --it -- cat /etc/config/log_level INFO修改ConfigMap
$ kubectl edit configmap log-config修改log_level 的值為DEBUG 等待大約10秒,再次查看環境變量的值
$ kubectl exec 'kubectl get pods -l run-my-nginx -o=name | cut -d "/" -f2' --it -- cat /etc/config/log_level DEBUG注意: ConfigMap如果以ENV的方式掛載至容器,修改ConfigMap并不會實現熱更新
ConfigMap更新后滾動更新Pod
更新ConfigMap目前并不會觸發相關Pod的滾動更新,可以通過修改pod annotations的方式強制觸發滾動更新
$ kubectl patch deployment my-nginx --patch '{"spec": {"template": {"metadata": {"annotations":{"version/config": "20210516"}}}}}'更新ConfigMap后:
- 使用該ConfigMap掛載的ENV不會同步更新
- 使用該ConfigMap掛載的Volume中的數據需要一段時間(10s)才能同步更新
總結
以上是生活随笔為你收集整理的Kubernetes存储之ConfigMap的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes中Service的种
- 下一篇: Kubernetes存储之Secret