目錄
一、ConfigMap概述
二、ConfigMap創(chuàng)建
2.1、命令行方式創(chuàng)建
2.2、yaml 文件方式創(chuàng)建
三、ConfigMap查詢(xún)
四、ConfigMap更新
4.1、kubectl edit方式
4.2、kubectl apply方式
五、ConfigMap使用
5.1、spec.env 【環(huán)境變量】
5.2、spec.envFrom 【環(huán)境變量】
5.3、指定 items【卷掛載方式】
5.4、不指定 items【卷掛載方式】
六、ConfigMap刪除
一、ConfigMap概述
ConfigMap 功能在 Kubernetes1.2 版本中引入,許多應(yīng)用程序會(huì)從配置文件、命令行參數(shù)或環(huán)境變量中讀取配 置信息。ConfigMap API給我們提供了向容器中注入配置信息的機(jī)制,ConfigMap 可以被用來(lái)保存單個(gè)屬性,也可以用來(lái)保存整個(gè)配置文件或者JSON 二進(jìn)制大對(duì)象 。
ConfigMap 的主要作用就是為了讓鏡像和配置文件解耦,以便實(shí)現(xiàn)鏡像的可移植性和可復(fù)用性。
注意:ConfigMap 并不提供保密或者加密功能。 如果你想存儲(chǔ)的數(shù)據(jù)是加密的,請(qǐng)使用 Secret, 或者使用其他第三方工具來(lái)保證你的數(shù)據(jù)的私密性,而不是用 ConfigMap。
二、ConfigMap創(chuàng)建
2.1、命令行方式創(chuàng)建
讀取文件方式(也可以是目錄)通過(guò)--from-file參數(shù)從文件中讀取,可以指定 key 的名稱(chēng),若不指定,則默認(rèn)使用文件名為key。--from-file:指定在目錄下的所有文件都會(huì)被用在 ConfigMap 里邊創(chuàng)建一個(gè)鍵值對(duì),鍵的名字就是文件名,值就是文件里內(nèi)容。
vim configmap-file.properties
version:1.0
environment:dev
創(chuàng)建ConfigMap:
$ vim configmap-file.properties
# 通過(guò)kubectl create configmap創(chuàng)建ConfigMap
$ kubectl create configmap from-file-configmap --from-file=configmap-file.properties
configmap/from-file-configmap created
$ kubectl get configmap/from-file-configmap
NAME DATA AGE
from-file-configmap 1 25s
# 查看ConfigMap的yaml資源清單
$ kubectl get configmap/from-file-configmap -o yaml
apiVersion: v1
data:
configmap-file.properties: | # ConfigMap的數(shù)據(jù),換行的話冒號(hào)后面需要加 |
version:1.0
environment:dev
kind: ConfigMap
metadata:
creationTimestamp: "2023-01-05T05:33:28Z"
name: from-file-configmap
namespace: default
resourceVersion: "3179"
uid: a9f17c3a-af94-4a9a-9145-e06f3d3bf030
當(dāng)然,我們也可以通過(guò)--from-literal參數(shù),可以指定多個(gè),手動(dòng)指定ConfigMap中的鍵值對(duì)。如下:
$ kubectl create configmap cm-test --from-literal=MYSQL_ROOT_USERNAME=root --from-literal=MYSQL_ROOT_PASSWORD=123456
configmap/cm-test created
$ kubectl describe cm cm-test
Name: cm-test
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
MYSQL_ROOT_PASSWORD:
----
123456
MYSQL_ROOT_USERNAME:
----
root
BinaryData
====
2.2、yaml 文件方式創(chuàng)建
創(chuàng)建資源清單:vim configmap.yaml
apiVersion: v1
data: # ConfigMap的Key 和 Value。 每一個(gè)鍵都映射到一個(gè)簡(jiǎn)單的值
version: "1.0" # 需要注意yaml的語(yǔ)法,key和value之間需要有空格
environment: "dev" # 定義一個(gè)變量,值類(lèi)型為字符串,需要加引號(hào)
kind: ConfigMap
metadata:
name: from-yaml-configmap
創(chuàng)建ConfigMap:
$ vim configmap.yaml
$ kubectl apply -f configmap.yaml
configmap/from-yaml-configmap created
$ kubectl get cm
NAME DATA AGE
from-file-configmap 1 11m
from-yaml-configmap 2 19s
kube-root-ca.crt 1 13d
三、ConfigMap查詢(xún)
# 查看 configmap 列表
$ kubectl get configmap
NAME DATA AGE
from-file-configmap 1 13m
from-yaml-configmap 2 2m2s
kube-root-ca.crt 1 13d
# 查看 configmap 詳情
$ kubectl describe configmap from-file-configmap
Name: from-file-configmap
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
configmap-file.properties:
----
version:1.0
environment:dev
BinaryData
====
Events: <none>
# 查看 yaml 輸出
$ kubectl get configmap from-file-configmap -o yaml
apiVersion: v1
data:
configmap-file.properties: |
version:1.0
environment:dev
kind: ConfigMap
metadata:
creationTimestamp: "2023-01-05T05:33:28Z"
name: from-file-configmap
namespace: default
resourceVersion: "3179"
uid: a9f17c3a-af94-4a9a-9145-e06f3d3bf030
四、ConfigMap更新
4.1、kubectl edit方式
$ kubectl describe configmap from-file-configmap
Name: from-file-configmap
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
configmap-file.properties:
----
version:1.0 # 更新之前的version為1.0
environment:dev
BinaryData
====
Events: <none>
# kubectl edit configmap其實(shí)是通過(guò)修改from-file-configmap這個(gè)ConfigMap對(duì)象資源清單中的值
controlplane $ kubectl edit configmap from-file-configmap
configmap/from-file-configmap edited
# 查看更新之后的ConfigMap的值
controlplane $ kubectl describe configmap from-file-configmap
Name: from-file-configmap
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
configmap-file.properties:
----
version:2.0 # 更新之后的version為2.0
environment:dev
BinaryData
====
Events: <none>
4.2、kubectl apply方式
這種方式,其實(shí)也是通過(guò)修改ConfigMap對(duì)象對(duì)應(yīng)的yaml資源清單文件,然后重新執(zhí)行kubectl apply -f xxx即可。
$ vim configmap.yaml
$ kubectl describe cm from-yaml-configmap
Name: from-yaml-configmap
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
environment:
----
dev # 修改之前的environment為dev
version:
----
1.0
BinaryData
====
Events: <none>
$ kubectl apply -f configmap.yaml
configmap/from-yaml-configmap configured
$ kubectl describe cm from-yaml-configmap
Name: from-yaml-configmap
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
environment:
----
prod # 修改之后的environment為prod
version:
----
1.0
BinaryData
====
Events: <none>
五、ConfigMap使用
容器應(yīng)用對(duì) ConfigMap 的使用主要是兩種:
- 通過(guò)環(huán)境變量獲取 ConfigMap 的內(nèi)容:spec.env和spec.envFrom
- 通過(guò)卷 volume 掛載的方式將 ConfigMap 的內(nèi)容掛載到容器內(nèi)部的文件或目錄:spec.volumes
5.1、spec.env 【環(huán)境變量】
定義Pod資源清單:vim configmap-pod-demo01.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat
spec:
containers:
- name: tomcat
image: tomcat:8
command: [ "/bin/sh", "-c", "env | grep APP"]
env: # 配置環(huán)境變量
- name: APP_VERSION # 定義環(huán)境變量的名稱(chēng)
valueFrom:
configMapKeyRef:
name: from-yaml-configmap # 引用from-yaml-configmap這個(gè)ConfigMap,這個(gè)值來(lái)自 ConfigMap
key: version # 需要取值的鍵,ConfigMap中的配置key為version
- name: APP_ENVIRONMENT # 定義環(huán)境變量的名稱(chēng)
valueFrom:
configMapKeyRef:
name: from-yaml-configmap # 引用from-yaml-configmap這個(gè)ConfigMap
key: environment # ConfigMap中的配置key為environment
restartPolicy: Never
創(chuàng)建Pod,觀察控制臺(tái)輸出:
$ kubectl apply -f configmap-pod-demo01.yaml
pod/tomcat created
$ kubectl get pod/tomcat
NAME READY STATUS RESTARTS AGE
tomcat 0/1 Completed 0 9s
$ kubectl logs tomcat
APP_ENVIRONMENT=prod
APP_VERSION=1.0
可以看到,from-yaml-configmap這個(gè)ConfigMap中的內(nèi)容已經(jīng)成功聲明為Pod中的兩個(gè)環(huán)境變量:
$APP_VERSION、$APP_ENVIRONMENT,并且值也正確。
5.2、spec.envFrom 【環(huán)境變量】
定義Pod資源清單:vim configmap-pod-demo02.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat
spec:
containers:
- name: tomcat
image: tomcat:8
imagePullPolicy: IfNotPresent
command: ['/bin/sh','-c','env']
envFrom: # 配置環(huán)境變量
- configMapRef:
name: from-yaml-configmap # 根據(jù)from-yaml-configmap這個(gè)ConfigMap中所有的key和value自動(dòng)生成環(huán)境變量
restartPolicy: Never
創(chuàng)建Pod,觀察控制臺(tái)輸出:
$ kubectl apply -f configmap-pod-demo02.yaml
pod/tomcat created
$ kubectl get pod/tomcat
NAME READY STATUS RESTARTS AGE
tomcat 0/1 Completed 0 32s
$ kubectl logs tomcat
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
LANGUAGE=en_US:en
HOSTNAME=tomcat
LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib
TOMCAT_SHA512=e595e906d62ff16545318108478aa101103181569dc6f4549dd0cdf8744147f7e9ba8a88cab6d33237b22981acb1085de86e7b2a4f1659efdbd4804df1303561
HOME=/root
CATALINA_HOME=/usr/local/tomcat
TOMCAT_MAJOR=8
version=1.0 # 根據(jù)from-yaml-configmap這個(gè)ConfigMap資源自動(dòng)生成環(huán)境變量:version
JAVA_VERSION=jdk-17.0.5+8
environment=prod # 根據(jù)from-yaml-configmap這個(gè)ConfigMap資源自動(dòng)生成環(huán)境變量:environment
GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 5C3C5F3E314C866292F359A8F3AD5C94A67F707E 765908099ACF92702C7D949BFA0C35EA8AA299F1 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/tomcat/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
LANG=en_US.UTF-8
TOMCAT_VERSION=8.5.84
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
JAVA_HOME=/opt/java/openjdk
LC_ALL=en_US.UTF-8
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/usr/local/tomcat
TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib
如上,可以看到,通過(guò)envFrom可以實(shí)現(xiàn)根據(jù)某個(gè)ConfigMap資源自動(dòng)生成環(huán)境變量,這樣在Pod中就可以使用這些環(huán)境變量了。
env 和 envFrom 的區(qū)別:
env可以自定義變量名,但需要重復(fù)性操作;
envFrom不可以自定義變量名,但是很便捷
5.3、指定 items【卷掛載方式】
定義Pod資源清單:vim configmap-pod-demo03.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat
spec:
containers:
- name: tomcat
image: tomcat:8
volumeMounts:
- name: config-volume
mountPath: /conf # 掛載configmap-file.properties到Pod的/conf目錄下
volumes:
- name: config-volume
configMap: # 你可以在 Pod 級(jí)別設(shè)置卷,然后將其掛載到 Pod 內(nèi)的容器中
name: from-file-configmap # 要掛載的 ConfigMap 的名字
items: # 來(lái)自 ConfigMap 的一組鍵,將被創(chuàng)建為文件
- key: "configmap-file.properties" # 來(lái)自 ConfigMap 的一組鍵,將被創(chuàng)建為文件
path: "configmap-file.properties" # ConfigMap掛載到容器內(nèi)的相對(duì)路徑
restartPolicy: Never
創(chuàng)建Pod,然后進(jìn)入Pod中/conf目錄,查看configmap-file.properties文件是否掛載進(jìn)去:
$ kubectl apply -f configmap-pod-demo03.yaml
pod/tomcat created
$ kubectl get pod/tomcat
NAME READY STATUS RESTARTS AGE
tomcat 1/1 Running 0 20s
$ kubectl exec -it tomcat -c tomcat -- bash
root@tomcat:/usr/local/tomcat# cat /conf/configmap-file.properties
version:2.0
environment:dev
5.4、不指定 items【卷掛載方式】
定義Pod資源清單:vim configmap-pod-demo04.yaml文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-625623.html
apiVersion: v1
kind: Pod
metadata:
name: tomcat
spec:
containers:
- name: tomcat
image: tomcat:8
volumeMounts:
- name: configmap-volume
mountPath: /conf
volumes:
- name: configmap-volume
configMap: # 創(chuàng)建一個(gè)ConfigMap類(lèi)型的數(shù)據(jù)卷
name: from-yaml-configmap # 引用的ConfigMap的名稱(chēng)
restartPolicy: Never
創(chuàng)建Pod,然后進(jìn)入容器查看相關(guān)內(nèi)容:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-625623.html
$ kubectl apply -f configmap-pod-demo04.yaml
pod/tomcat created
$ kubectl get pod/tomcat
NAME READY STATUS RESTARTS AGE
tomcat 1/1 Running 0 10s
$ kubectl exec -it tomcat -c tomcat -- bash
root@tomcat:/usr/local/tomcat# ls -l /conf
total 0
lrwxrwxrwx 1 root root 18 Jan 5 07:01 environment -> ..data/environment
lrwxrwxrwx 1 root root 14 Jan 5 07:01 version -> ..data/version
六、ConfigMap刪除
# 方式一:通過(guò) yaml 文件刪除
kubectl delete -f configmap.yaml
# 方式二:直接刪除資源
kubectl delete configmap from-yaml-configmap
# 方式三: 刪除所有configmap
kubectl delete configmap --all
到了這里,關(guān)于8、Kubernetes核心技術(shù) - ConfigMap的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!