日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

K8S configmap详解:从文件创建、从文件夹创建及以volume、env环境变量的方式在pod中使用

發(fā)布時(shí)間:2025/1/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 K8S configmap详解:从文件创建、从文件夹创建及以volume、env环境变量的方式在pod中使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

K8S configmap詳解:從文件創(chuàng)建、從文件夾創(chuàng)建及以volume、env環(huán)境變量的方式在pod中使用

ConfigMap是用來(lái)存儲(chǔ)配置文件的kubernetes資源對(duì)象,所有的配置內(nèi)容都存儲(chǔ)在etcd中。
1.創(chuàng)建ConfigMap

創(chuàng)建ConfigMap的方式有4種:

通過(guò)直接在命令行中指定configmap參數(shù)創(chuàng)建,即--from-literal 通過(guò)指定文件創(chuàng)建,即將一個(gè)配置文件創(chuàng)建為一個(gè)ConfigMap--from-file=<文件> 通過(guò)指定目錄創(chuàng)建,即將一個(gè)目錄下的所有配置文件創(chuàng)建為一個(gè)ConfigMap,--from-file=<目錄> 事先寫好標(biāo)準(zhǔn)的configmap的yaml文件,然后kubectl create -f 創(chuàng)建

1.1 通過(guò)命令行參數(shù)–from-literal創(chuàng)建
示例

創(chuàng)建命令:

kubectl create configmap test-config1 --from-literal=db.host=10.5.10.116 --from-listeral=db.port='3306'

結(jié)果如圖中data內(nèi)容所示:
這里寫圖片描述
1.2 指定文件創(chuàng)建
示例

配置文件app.properties的內(nèi)容:
這里寫圖片描述
創(chuàng)建命令(可以有多個(gè)–from-file):

kubectl create configmap test-config2 --from-file=./app.properties

結(jié)果如圖中data內(nèi)容所示:
這里寫圖片描述

可以看到指定文件創(chuàng)建時(shí)configmap會(huì)創(chuàng)建一個(gè)key/value對(duì),key是文件名,value是文件內(nèi)容。

假如不想configmap中的key為默認(rèn)的文件名,還可以在創(chuàng)建時(shí)指定key名字:

kubectl create configmap game-config-3 --from-file=<my-key-name>=<path-to-file>

1.3 指定目錄創(chuàng)建
示例

configs 目錄下的config-1和config-2內(nèi)容如下所示:
這里寫圖片描述
創(chuàng)建命令:

kubectl create configmap test-config3 --from-file=./configs

結(jié)果如圖中data內(nèi)容所示:
這里寫圖片描述

可以看到指定目錄創(chuàng)建時(shí)configmap內(nèi)容中的各個(gè)文件會(huì)創(chuàng)建一個(gè)key/value對(duì),key是文件名,value是文件內(nèi)容。

那假如目錄中還包含子目錄呢?繼續(xù)做實(shí)驗(yàn):
在上一步的configs目錄下創(chuàng)建子目錄subconfigs,并在subconfigs下面創(chuàng)建兩個(gè)配置文件,指定目錄configs創(chuàng)建名為test-config4的configmap:

kubectl create configmap test-config4 --from-file=./configs

結(jié)果如下圖所示:
這里寫圖片描述
結(jié)果說(shuō)明指定目錄時(shí)只會(huì)識(shí)別其中的文件,忽略子目錄
1.4 通過(guò)事先寫好configmap的標(biāo)準(zhǔn)yaml文件創(chuàng)建

yaml文件如圖所示:
這里寫圖片描述
結(jié)果如圖中data內(nèi)容所示:
這里寫圖片描述
注意其中一個(gè)key的value有多行內(nèi)容時(shí)的寫法
2.使用ConfigMap

使用ConfigMap有三種方式:

第一種是通過(guò)環(huán)境變量的方式,直接傳遞給pod使用configmap中指定的key使用configmap中所有的key 第二種是通過(guò)在pod的命令行下運(yùn)行的方式(啟動(dòng)命令中) 第三種是作為volume的方式掛載到pod內(nèi)

2.1 通過(guò)環(huán)境變量使用

示例:
(1)使用valueFrom、configMapKeyRef、name、key指定要用的key:

apiVersion: v1 kind: Pod metadata:name: dapi-test-pod spec:containers:- name: test-containerimage: k8s.gcr.io/busyboxcommand: [ "/bin/sh", "-c", "env" ]env:- name: SPECIAL_LEVEL_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.how- name: LOG_LEVELvalueFrom:configMapKeyRef:name: env-configkey: log_levelrestartPolicy: Never

(2)還可以通過(guò)envFrom、configMapRef、name使得configmap中的所有key/value對(duì)都自動(dòng)變成環(huán)境變量:

apiVersion: v1 kind: Pod metadata:name: dapi-test-pod spec:containers:- name: test-containerimage: k8s.gcr.io/busyboxcommand: [ "/bin/sh", "-c", "env" ]envFrom:- configMapRef:name: special-configrestartPolicy: Never

2.2 在啟動(dòng)命令中引用

示例:
在命令行下引用時(shí),需要先設(shè)置為環(huán)境變量,之后可以通過(guò)$(VAR_NAME)設(shè)置容器啟動(dòng)命令的啟動(dòng)參數(shù):

apiVersion: v1 kind: Pod metadata:name: dapi-test-pod spec:containers:- name: test-containerimage: k8s.gcr.io/busyboxcommand: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]env:- name: SPECIAL_LEVEL_KEYvalueFrom:configMapKeyRef:name: special-configkey: SPECIAL_LEVEL- name: SPECIAL_TYPE_KEYvalueFrom:configMapKeyRef:name: special-configkey: SPECIAL_TYPErestartPolicy: Never

2.3 作為volume掛載使用

(1)把1.4中test-config4所有key/value掛載進(jìn)來(lái):

apiVersion: extensions/v1beta1 kind: Deployment metadata:name: nginx-configmap spec:replicas: 1template:metadata:labels:app: nginx-configmapspec:containers:- name: nginx-configmapimage: nginxports:- containerPort: 80volumeMounts: - name: config-volume4mountPath: /tmp/config4volumes:- name: config-volume4configMap:name: test-config4

進(jìn)入容器中/tmp/config4查看:
這里寫圖片描述
可以看到,在config4文件夾下以每一個(gè)key為文件名value為值創(chuàng)建了多個(gè)文件。

(2)假如不想以key名作為配置文件名可以引入items 字段,在其中逐個(gè)指定要用相對(duì)路徑path替換的key:

volumes:- name: config-volume4configMap:name: test-config4items:- key: my.cnfpath: mysql-key- key: cache_hostpath: cache-host

進(jìn)入容器中看:
這里寫圖片描述

備注:

刪除configmap后原pod不受影響;然后再刪除pod后,重啟的pod的events會(huì)報(bào)找不到cofigmap的volume; pod起來(lái)后再通過(guò)kubectl edit configmap …修改configmap,過(guò)一會(huì)pod內(nèi)部的配置也會(huì)刷新。 在容器內(nèi)部修改掛進(jìn)去的配置文件后,過(guò)一會(huì)內(nèi)容會(huì)再次被刷新為原始configmap內(nèi)容

(3)還可以為以configmap掛載進(jìn)的volume添加subPath字段:

volumeMounts:- name: config-volume5mountPath: /tmp/mysubPath: my.cnf- name: config-volume5mountPath: /tmp/hostsubPath: cache_host- name: config-volume5mountPath: /tmp/portsubPath: cache_port- name: config-volume5mountPath: /tmp/prefixsubPath: cache_prefixvolumes:- name: config-volume5configMap:name: test-config4

進(jìn)入容器中看:
這里寫圖片描述
注意在容器中的形式與(2)中的不同,(2)中是個(gè)鏈接,鏈到…data/。
備注:

刪除configmap后原pod不受影響;然后再刪除pod后,重啟的pod的events會(huì)報(bào)找不到cofigmap的volume。 pod起來(lái)后再通過(guò)kubectl edit configmap …修改configmap,pod內(nèi)部的配置也會(huì)自動(dòng)刷新。 在容器內(nèi)部修改掛進(jìn)去的配置文件后,內(nèi)容可以持久保存,除非殺掉再重啟pod才會(huì)刷回原始configmap的內(nèi)容。 subPath必須要與configmap中的key同名。 mountPath如/tmp/prefix: <1>當(dāng)/tmp/prefix不存在時(shí)(備注:此時(shí)/tmp/prefix和/tmp/prefix/無(wú)異),會(huì)自動(dòng)創(chuàng)建prefix文件并把value寫進(jìn)去; <2>當(dāng)/tmp/prefix存在且是個(gè)文件時(shí),里面內(nèi)容會(huì)被configmap覆蓋; <3>當(dāng)/tmp/prefix存在且是文件夾時(shí),無(wú)論寫/tmp/prefix還是/tmp/prefix/都會(huì)報(bào)錯(cuò)。

3.configmap的熱更新研究

更新 ConfigMap 后:

使用該 ConfigMap 掛載的 Env 不會(huì)同步更新 使用該 ConfigMap 掛載的 Volume 中的數(shù)據(jù)需要一段時(shí)間(實(shí)測(cè)大概10秒)才能同步更新

ENV 是在容器啟動(dòng)的時(shí)候注入的,啟動(dòng)之后 kubernetes 就不會(huì)再改變環(huán)境變量的值,且同一個(gè) namespace 中的 pod 的環(huán)境變量是不斷累加的,參考 Kubernetes中的服務(wù)發(fā)現(xiàn)與docker容器間的環(huán)境變量傳遞源碼探究。為了更新容器中使用 ConfigMap 掛載的配置,可以通過(guò)滾動(dòng)更新 pod 的方式來(lái)強(qiáng)制重新掛載 ConfigMap,也可以在更新了 ConfigMap 后,先將副本數(shù)設(shè)置為 0,然后再擴(kuò)容。
參考

1.https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/
2.https://www.cnblogs.com/breezey/p/6582082.html
3.https://kubernetes.io/docs/concepts/storage/volumes/
4.https://www.kubernetes.org.cn/3138.html
5.https://blog.csdn.net/liukuan73/article/details/79492374

總結(jié)

以上是生活随笔為你收集整理的K8S configmap详解:从文件创建、从文件夹创建及以volume、env环境变量的方式在pod中使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。