久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

Kubernetes用ConfigMap

2023-12-27 352

Kubernetes中,ConfigMap允許我們將配置數(shù)據(jù)與應(yīng)用程序代碼分離,從而提高應(yīng)用程序的可移植性和可維護(hù)性。通過(guò)使用ConfigMap,我們可以將配置文件、環(huán)境變量和其他配置信息作為鍵值對(duì)存儲(chǔ)在ConfigMap中,并在Pod中使用這些配置信息。

ConfigMap 概念允許將配置清單與鏡像內(nèi)容分離,以保持容器化的應(yīng)用程序的可移植性。 例如,可以下載并運(yùn)行相同的容器鏡像來(lái)啟動(dòng)容器, 用于本地開(kāi)發(fā)、系統(tǒng)測(cè)試或運(yùn)行實(shí)時(shí)終端用戶工作負(fù)載。

本頁(yè)提供了一系列使用示例,這些示例演示了如何創(chuàng)建 ConfigMap 以及配置 Pod 使用存儲(chǔ)在 ConfigMap 中的數(shù)據(jù)。

一、準(zhǔn)備

必須擁有一個(gè) Kubernetes 的集群,同時(shí)必須配置 kubectl 命令行工具與集群通信。 建議在至少有兩個(gè)不作為控制平面主機(jī)的節(jié)點(diǎn)的集群上運(yùn)行本教程。 如果還沒(méi)有集群,可以通過(guò) Minikube 構(gòu)建一個(gè)自己的集群,或者可以使用下面的 Kubernetes 練習(xí)環(huán)境之一:

  • Killercoda
  • 玩轉(zhuǎn) Kubernetes

需要安裝 wget 工具。如果有不同的工具,例如 curl,而沒(méi)有 wget, 則需要調(diào)整下載示例數(shù)據(jù)的步驟。

二、創(chuàng)建ConfigMap

可以使用 kubectl create configmap 或者在 kustomization.yaml 中的 ConfigMap 生成器來(lái)創(chuàng)建 ConfigMap。

1、使用 kubectl create configmap 創(chuàng)建 ConfigMap

可以使用 kubectl create configmap 命令基于目錄、 文件或者字面值來(lái)創(chuàng)建 ConfigMap:

kubectl create configmap <映射名稱> <數(shù)據(jù)源>

其中,<映射名稱> 是為 ConfigMap 指定的名稱,<數(shù)據(jù)源> 是要從中提取數(shù)據(jù)的目錄、 文件或者字面值。ConfigMap 對(duì)象的名稱必須是合法的 DNS 子域名.

在基于文件來(lái)創(chuàng)建 ConfigMap 時(shí),<數(shù)據(jù)源> 中的鍵名默認(rèn)取自文件的基本名, 而對(duì)應(yīng)的值則默認(rèn)為文件的內(nèi)容??梢允褂?kubectl describe 或者 kubectl get 獲取有關(guān) ConfigMap 的信息。

2、基于一個(gè)目錄來(lái)創(chuàng)建 ConfigMap

可以使用 kubectl create configmap 基于同一目錄中的多個(gè)文件創(chuàng)建 ConfigMap。 當(dāng)基于目錄來(lái)創(chuàng)建 ConfigMap 時(shí),kubectl 識(shí)別目錄下文件名可以作為合法鍵名的文件, 并將這些文件打包到新的 ConfigMap 中。普通文件之外的所有目錄項(xiàng)都會(huì)被忽略 (例如:子目錄、符號(hào)鏈接、設(shè)備、管道等等)。

用于創(chuàng)建 ConfigMap 的每個(gè)文件名必須由可接受的字符組成,即:字母(A 到 Z 和 a 到 z)、數(shù)字(0 到 9)、’-‘、’_’或’.’。 如果在一個(gè)目錄中使用 kubectl create configmap,而其中任一文件名包含不可接受的字符, 則 kubectl 命令可能會(huì)失敗。

kubectl 命令在遇到不合法的文件名時(shí)不會(huì)打印錯(cuò)誤。

創(chuàng)建本地目錄:

mkdir -p configure-pod-container/configmap/

現(xiàn)在,下載示例的配置并創(chuàng)建 ConfigMap:

# 將示例文件下載到 `configure-pod-container/configmap/` 目錄
wget https://kubernetes.io/examples/configmap/game.properties -O configure-pod-container/configmap/game.properties
wget https://kubernetes.io/examples/configmap/ui.properties -O configure-pod-container/configmap/ui.properties
# 創(chuàng)建 ConfigMap
kubectl create configmap game-config --from-file=configure-pod-container/configmap/

以上命令將 configure-pod-container/configmap 目錄下的所有文件,也就是 game.properties 和 ui.properties 打包到 game-config ConfigMap 中??梢允褂孟旅娴拿铒@示 ConfigMap 的詳細(xì)信息:

kubectl describe configmaps game-config

輸出類(lèi)似以下內(nèi)容:

Name: game-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

configure-pod-container/configmap/ 目錄中的 game.properties 和 ui.properties 文件出現(xiàn)在 ConfigMap 的 data 部分。

kubectl get configmaps game-config -o yaml

輸出類(lèi)似以下內(nèi)容:

apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2022-02-18T18:52:05Z
name: game-config
namespace: default
resourceVersion: "516"
uid: b4952dc3-d670-11e5-8cd0-68f728db1985
data:
game.properties: |
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30 
ui.properties: |
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

3、基于文件創(chuàng)建 ConfigMap

可以使用 kubectl create configmap 基于單個(gè)文件或多個(gè)文件創(chuàng)建 ConfigMap。例如:

kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/game.properties

將產(chǎn)生以下 ConfigMap:

kubectl describe configmaps game-config-2

輸出類(lèi)似以下內(nèi)容:

Name: game-config-2
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30

可以多次使用 –from-file 參數(shù),從多個(gè)數(shù)據(jù)源創(chuàng)建 ConfigMap。

kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/game.properties --from-file=configure-pod-container/configmap/ui.properties

可以使用以下命令顯示 game-config-2 ConfigMap 的詳細(xì)信息:

kubectl describe configmaps game-config-2

輸出類(lèi)似以下內(nèi)容:

Name: game-config-2
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

使用 –from-env-file 選項(xiàng)基于 env 文件創(chuàng)建 ConfigMap,例如:

# Env 文件包含環(huán)境變量列表。其中適用以下語(yǔ)法規(guī)則:
# 這些語(yǔ)法規(guī)則適用:
# Env 文件中的每一行必須為 VAR=VAL 格式。
# 以#開(kāi)頭的行(即注釋?zhuān)⒈缓雎浴?
# 空行將被忽略。
# 引號(hào)不會(huì)被特殊處理(即它們將成為 ConfigMap 值的一部分)。
# 將示例文件下載到 `configure-pod-container/configmap/` 目錄
wget https://kubernetes.io/examples/configmap/game-env-file.properties -O configure-pod-container/configmap/game-env-file.properties
wget https://kubernetes.io/examples/configmap/ui-env-file.properties -O configure-pod-container/configmap/ui-env-file.properties
# Env 文件 `game-env-file.properties` 如下所示
cat configure-pod-container/configmap/game-env-file.properties
enemies=aliens
lives=3
allowed="true"
# 此注釋和上方的空行將被忽略
kubectl create configmap game-config-env-file \
--from-env-file=configure-pod-container/configmap/game-env-file.properties

將產(chǎn)生以下 ConfigMap。查看 ConfigMap:

kubectl get configmap game-config-env-file -o yaml

輸出類(lèi)似以下內(nèi)容:

apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2019-12-27T18:36:28Z
name: game-config-env-file
namespace: default
resourceVersion: "809965"
uid: d9d1ca5b-eb34-11e7-887b-42010a8002b8
data:
allowed: '"true"'
enemies: aliens
lives: "3"

從 Kubernetes 1.23 版本開(kāi)始,kubectl 支持多次指定 –from-env-file 參數(shù)來(lái)從多個(gè)數(shù)據(jù)源創(chuàng)建 ConfigMap。

kubectl create configmap config-multi-env-files \
--from-env-file=configure-pod-container/configmap/game-env-file.properties \
--from-env-file=configure-pod-container/configmap/ui-env-file.properties

將產(chǎn)生以下 ConfigMap:

kubectl get configmap config-multi-env-files -o yaml

輸出類(lèi)似以下內(nèi)容:

apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2019-12-27T18:38:34Z
name: config-multi-env-files
namespace: default
resourceVersion: "810136"
uid: 252c4572-eb35-11e7-887b-42010a8002b8
data:
allowed: '"true"'
color: purple
enemies: aliens
how: fairlyNice
lives: "3"
textmode: "true"

4、定義從文件創(chuàng)建 ConfigMap 時(shí)要使用的鍵

在使用 –from-file 參數(shù)時(shí),可以定義在 ConfigMap 的 data 部分出現(xiàn)鍵名, 而不是按默認(rèn)行為使用文件名:

kubectl create configmap game-config-3 --from-file=<我的鍵名>=<文件路徑>

<我的鍵名> 是要在 ConfigMap 中使用的鍵名,<文件路徑> 是想要鍵所表示的數(shù)據(jù)源文件的位置。例如:

kubectl create configmap game-config-3 --from-file=game-special-key=configure-pod-container/configmap/game.properties

將產(chǎn)生以下 ConfigMap:

kubectl get configmaps game-config-3 -o yaml

輸出類(lèi)似以下內(nèi)容:

apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2022-02-18T18:54:22Z
name: game-config-3
namespace: default
resourceVersion: "530"
uid: 05f8da22-d671-11e5-8cd0-68f728db1985
data:
game-special-key: |
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30

5、根據(jù)字面值創(chuàng)建 ConfigMap

可以將 kubectl create configmap 與 –from-literal 參數(shù)一起使用, 通過(guò)命令行定義文字值:

kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm

可以傳入多個(gè)鍵值對(duì)。命令行中提供的每對(duì)鍵值在 ConfigMap 的 data 部分中均表示為單獨(dú)的條目。

kubectl get configmaps special-config -o yaml

輸出類(lèi)似以下內(nèi)容:

apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2022-02-18T19:14:38Z
name: special-config
namespace: default
resourceVersion: "651"
uid: dadce046-d673-11e5-8cd0-68f728db1985
data:
special.how: very
special.type: charm

6、基于生成器創(chuàng)建 ConfigMap

還可以基于生成器(Generators)創(chuàng)建 ConfigMap,然后將其應(yīng)用于集群的 API 服務(wù)器上創(chuàng)建對(duì)象。 生成器應(yīng)在目錄內(nèi)的 kustomization.yaml 中指定。

7、基于文件生成 ConfigMap

例如,要基于 configure-pod-container/configmap/game.properties 文件生成一個(gè) ConfigMap:

# 創(chuàng)建包含 ConfigMapGenerator 的 kustomization.yaml 文件
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: game-config-4
options:
labels:
game-config: config-4
files:
- configure-pod-container/configmap/game.properties
EOF

應(yīng)用(Apply)kustomization 目錄創(chuàng)建 ConfigMap 對(duì)象:

kubectl apply -k .
configmap/game-config-4-m9dm2f92bt created

可以像這樣檢查 ConfigMap 已經(jīng)被創(chuàng)建:

kubectl get configmap
NAME DATA AGE
game-config-4-m9dm2f92bt 1 37s

也可以這樣:

kubectl describe configmaps/game-config-4-m9dm2f92bt
Name: game-config-4-m9dm2f92bt
Namespace: default
Labels: game-config=config-4
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","data":{"game.properties":"enemies=aliens\nlives=3\nenemies.cheat=true\nenemies.cheat.level=noGoodRotten\nsecret.code.p...
Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
Events: <none>

請(qǐng)注意,生成的 ConfigMap 名稱具有通過(guò)對(duì)內(nèi)容進(jìn)行散列而附加的后綴, 這樣可以確保每次修改內(nèi)容時(shí)都會(huì)生成新的 ConfigMap。

8、定義從文件生成 ConfigMap 時(shí)要使用的鍵

在 ConfigMap 生成器中,可以定義一個(gè)非文件名的鍵名。 例如,從 configure-pod-container/configmap/game.properties 文件生成 ConfigMap, 但使用 game-special-key 作為鍵名:

# 創(chuàng)建包含 ConfigMapGenerator 的 kustomization.yaml 文件
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: game-config-5
options:
labels:
game-config: config-5
files:
- game-special-key=configure-pod-container/configmap/game.properties
EOF

應(yīng)用 Kustomization 目錄創(chuàng)建 ConfigMap 對(duì)象。

kubectl apply -k .
configmap/game-config-5-m67dt67794 created

9、基于字面值生成 ConfigMap

此示例向展示如何使用 Kustomize 和 kubectl,基于兩個(gè)字面鍵/值對(duì) special.type=charm 和 special.how=very 創(chuàng)建一個(gè) ConfigMap。 為了實(shí)現(xiàn)這一點(diǎn),可以配置 ConfigMap 生成器。 創(chuàng)建(或替換)kustomization.yaml,使其具有以下內(nèi)容。

---
# 基于字面創(chuàng)建 ConfigMap 的 kustomization.yaml 內(nèi)容
configMapGenerator:
- name: special-config-2
literals:
- special.how=very
- special.type=charm
EOF

應(yīng)用 Kustomization 目錄創(chuàng)建 ConfigMap 對(duì)象。

kubectl apply -k .

configmap/special-config-2-c92b5mmcf2 created

三、臨時(shí)清理

在繼續(xù)之前,清理創(chuàng)建的一些 ConfigMap:

kubectl delete configmap special-config
kubectl delete configmap env-config
kubectl delete configmap -l 'game-config in (config-4,config-5)'

四、定義容器環(huán)境變量

1、使用單個(gè) ConfigMap 中的數(shù)據(jù)定義容器環(huán)境變量

在 ConfigMap 中將環(huán)境變量定義為鍵值對(duì):

kubectl create configmap special-config --from-literal=special.how=very

將 ConfigMap 中定義的 special.how 賦值給 Pod 規(guī)約中的 SPECIAL_LEVEL_KEY 環(huán)境變量。

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
# 定義環(huán)境變量
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
# ConfigMap 包含要賦給 SPECIAL_LEVEL_KEY 的值
name: special-config
# 指定與取值相關(guān)的鍵名
key: special.how
restartPolicy: Never

創(chuàng)建 Pod:

kubectl create -f https://kubernetes.io/examples/pods/pod-single-configmap-env-variable.yaml

現(xiàn)在,Pod 的輸出包含環(huán)境變量 SPECIAL_LEVEL_KEY=very。

2、使用來(lái)自多個(gè) ConfigMap 的數(shù)據(jù)定義容器環(huán)境變量

與前面的示例一樣,首先創(chuàng)建 ConfigMap。 這是將使用的清單:

apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
special.how: very
---
apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: default
data:
log_level: INFO

創(chuàng)建 ConfigMap:

kubectl create -f https://kubernetes.io/examples/configmap/configmaps.yaml

在 Pod 規(guī)約中定義環(huán)境變量。

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.how
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: env-config
key: log_level
restartPolicy: Never

創(chuàng)建 Pod:

kubectl create -f https://kubernetes.io/examples/pods/pod-multiple-configmap-env-variable.yaml

現(xiàn)在,Pod 的輸出包含環(huán)境變量 SPECIAL_LEVEL_KEY=very 和 LOG_LEVEL=INFO。一旦樂(lè)意繼續(xù)前進(jìn),刪除該 Pod:

kubectl delete pod dapi-test-pod --now

五、容器環(huán)境變量

創(chuàng)建一個(gè)包含多個(gè)鍵值對(duì)的 ConfigMap。

apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charm

創(chuàng)建 ConfigMap:

kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.yaml

使用 envFrom 將所有 ConfigMap 的數(shù)據(jù)定義為容器環(huán)境變量,ConfigMap 中的鍵成為 Pod 中的環(huán)境變量名稱。

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- configMapRef:
name: special-config
restartPolicy: Never

創(chuàng)建 Pod:

kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-envFrom.yaml

現(xiàn)在,Pod 的輸出包含環(huán)境變量 SPECIAL_LEVEL=very 和 SPECIAL_TYPE=charm。一旦樂(lè)意繼續(xù)前進(jìn),刪除該 Pod:

kubectl delete pod dapi-test-pod --now

六、在Pod命令中使用

可以使用 $(VAR_NAME) Kubernetes 替換語(yǔ)法在容器的 command 和 args 屬性中使用 ConfigMap 定義的環(huán)境變量。

例如,以下 Pod 清單:

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/echo", "$(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_LEVEL
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_TYPE
restartPolicy: Never

通過(guò)運(yùn)行下面命令創(chuàng)建該 Pod:

kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-env-var-valueFrom.yaml

此 Pod 在 test-container 容器中產(chǎn)生以下輸出:

kubectl logs dapi-test-pod
very charm

一旦樂(lè)意繼續(xù)前進(jìn),刪除該 Pod:

kubectl delete pod dapi-test-pod --now

七、添加到一個(gè)卷中

如基于文件創(chuàng)建 ConfigMap 中所述,當(dāng)使用 –from-file 創(chuàng)建 ConfigMap 時(shí),文件名成為存儲(chǔ)在 ConfigMap 的 data 部分中的鍵, 文件內(nèi)容成為鍵對(duì)應(yīng)的值。

本節(jié)中的示例引用了一個(gè)名為 special-config 的 ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charm

創(chuàng)建 ConfigMap:

kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.yaml

1、使用存儲(chǔ)在 ConfigMap 中的數(shù)據(jù)填充卷

在 Pod 規(guī)約的 volumes 部分下添加 ConfigMap 名稱。 這會(huì)將 ConfigMap 數(shù)據(jù)添加到 volumeMounts.mountPath 所指定的目錄 (在本例中為 /etc/config)。 command 部分列出了名稱與 ConfigMap 中的鍵匹配的目錄文件。

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/sh", "-c", "ls /etc/config/" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
# 提供包含要添加到容器中的文件的 ConfigMap 的名稱
name: special-config
restartPolicy: Never

創(chuàng)建 Pod:

kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-volume.yaml

Pod 運(yùn)行時(shí),命令 ls /etc/config/ 產(chǎn)生下面的輸出:

SPECIAL_LEVEL
SPECIAL_TYPE

文本數(shù)據(jù)會(huì)展現(xiàn)為 UTF-8 字符編碼的文件。如果使用其他字符編碼, 可以使用 binaryData(詳情參閱 ConfigMap 對(duì)象)。

如果該容器鏡像的 /etc/config 目錄中有一些文件,卷掛載將使該鏡像中的這些文件無(wú)法訪問(wèn)。一旦樂(lè)意繼續(xù)前進(jìn),刪除該 Pod:

kubectl delete pod dapi-test-pod --now

2、將 ConfigMap 數(shù)據(jù)添加到卷中的特定路徑

使用 path 字段為特定的 ConfigMap 項(xiàng)目指定預(yù)期的文件路徑。 在這里,ConfigMap 中鍵 SPECIAL_LEVEL 的內(nèi)容將掛載在 config-volume 卷中 /etc/config/keys 文件中。

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: registry.k8s.io/busybox
command: [ "/bin/sh","-c","cat /etc/config/keys" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: special-config
items:
- key: SPECIAL_LEVEL
path: keys
restartPolicy: Never

創(chuàng)建 Pod:

kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-volume-specific-key.yaml

當(dāng) Pod 運(yùn)行時(shí),命令 cat /etc/config/keys 產(chǎn)生以下輸出:

very

注意:如前,/etc/config/ 目錄中所有先前的文件都將被刪除。

刪除該 Pod:

kubectl delete pod dapi-test-pod --now

3、映射鍵到指定路徑并設(shè)置文件訪問(wèn)權(quán)限

可以將指定鍵名投射到特定目錄,也可以逐個(gè)文件地設(shè)定訪問(wèn)權(quán)限。 Secret 指南中為這一語(yǔ)法提供了解釋。

4、可選引用

ConfigMap 引用可以被標(biāo)記為可選。 如果 ConfigMap 不存在,則掛載的卷將為空。 如果 ConfigMap 存在,但引用的鍵不存在,則掛載點(diǎn)下的路徑將不存在。 有關(guān)更多信息,請(qǐng)參閱可選 ConfigMap 細(xì)節(jié)。

5、掛載的 ConfigMap 會(huì)被自動(dòng)更新

當(dāng)已掛載的 ConfigMap 被更新時(shí),所投射的內(nèi)容最終也會(huì)被更新。 這適用于 Pod 啟動(dòng)后可選引用的 ConfigMap 重新出現(xiàn)的情況。

Kubelet 在每次定期同步時(shí)都會(huì)檢查所掛載的 ConfigMap 是否是最新的。 然而,它使用其基于 TTL 機(jī)制的本地緩存來(lái)獲取 ConfigMap 的當(dāng)前值。 因此,從 ConfigMap 更新到新鍵映射到 Pod 的總延遲可能與 kubelet 同步周期(默認(rèn)為1分鐘)+ kubelet 中 ConfigMap 緩存的 TTL(默認(rèn)為1分鐘)一樣長(zhǎng)。 可以通過(guò)更新 Pod 的一個(gè)注解來(lái)觸發(fā)立即刷新。

使用 ConfigMap 作為 subPath 卷的容器將不會(huì)收到 ConfigMap 更新。

八、ConfigMap和Pod

ConfigMap API 資源將配置數(shù)據(jù)存儲(chǔ)為鍵值對(duì)。 數(shù)據(jù)可以在 Pod 中使用,也可以用來(lái)提供系統(tǒng)組件(如控制器)的配置。 ConfigMap 與 Secret 類(lèi)似, 但是提供的是一種處理不含敏感信息的字符串的方法。 用戶和系統(tǒng)組件都可以在 ConfigMap 中存儲(chǔ)配置數(shù)據(jù)。

ConfigMap 應(yīng)該引用屬性文件,而不是替換它們??梢詫?ConfigMap 理解為類(lèi)似于 Linux /etc 目錄及其內(nèi)容的東西。例如,如果基于 ConfigMap 創(chuàng)建 Kubernetes 卷,則 ConfigMap 中的每個(gè)數(shù)據(jù)項(xiàng)都由該數(shù)據(jù)卷中的某個(gè)獨(dú)立的文件表示。

ConfigMap 的 data 字段包含配置數(shù)據(jù)。如下例所示,它可以簡(jiǎn)單 (如用 –from-literal 的單個(gè)屬性定義)或復(fù)雜 (如用 –from-file 的配置文件或 JSON blob 定義)。

apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2016-02-18T19:14:38Z
name: example-config
namespace: default
data:
# 使用 --from-literal 定義的簡(jiǎn)單屬性
example.property.1: hello
example.property.2: world
# 使用 --from-file 定義復(fù)雜屬性的例子
example.property.file: |-
property.1=value-1
property.2=value-2
property.3=value-3

當(dāng) kubectl 從非 ASCII 或 UTF-8 編碼的輸入創(chuàng)建 ConfigMap 時(shí), 該工具將這些輸入放入 ConfigMap 的 binaryData 字段,而不是 data 字段。 文本和二進(jìn)制數(shù)據(jù)源都可以組合在一個(gè) ConfigMap 中。

如果想查看 ConfigMap 中的 binaryData 鍵(及其值), 可以運(yùn)行 kubectl get configmap -o jsonpath='{.binaryData}’ <name>。

Pod 可以從使用 data 或 binaryData 的 ConfigMap 中加載數(shù)據(jù)。

1、可選的 ConfigMap

可以在 Pod 規(guī)約中將對(duì) ConfigMap 的引用標(biāo)記為可選(optional)。 如果 ConfigMap 不存在,那么它在 Pod 中為其提供數(shù)據(jù)的配置(例如:環(huán)境變量、掛載的卷)將為空。 如果 ConfigMap 存在,但引用的鍵不存在,那么數(shù)據(jù)也是空的。

例如,以下 Pod 規(guī)約將 ConfigMap 中的環(huán)境變量標(biāo)記為可選:

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: gcr.io/google_containers/busybox
command: ["/bin/sh", "-c", "env"]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: a-config
key: akey
optional: true # 將環(huán)境變量標(biāo)記為可選
restartPolicy: Never

當(dāng)運(yùn)行這個(gè) Pod 并且名稱為 a-config 的 ConfigMap 不存在時(shí),輸出空值。 當(dāng)運(yùn)行這個(gè) Pod 并且名稱為 a-config 的 ConfigMap 存在, 但是在 ConfigMap 中沒(méi)有名稱為 akey 的鍵時(shí),控制臺(tái)輸出也會(huì)為空。 如果確實(shí)在名為 a-config 的 ConfigMap 中為 akey 設(shè)置了鍵值, 那么這個(gè) Pod 會(huì)打印該值,然后終止。

也可以在 Pod 規(guī)約中將 ConfigMap 提供的卷和文件標(biāo)記為可選。 此時(shí) Kubernetes 將總是為卷創(chuàng)建掛載路徑,即使引用的 ConfigMap 或鍵不存在。 例如,以下 Pod 規(guī)約將所引用得 ConfigMap 的卷標(biāo)記為可選:

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: gcr.io/google_containers/busybox
command: ["/bin/sh", "-c", "ls /etc/config"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: no-config
optional: true # 將引用的 ConfigMap 的卷標(biāo)記為可選
restartPolicy: Never

2、限制

在 Pod 規(guī)約中引用某個(gè) ConfigMap 之前,必須先創(chuàng)建這個(gè)對(duì)象, 或者在 Pod 規(guī)約中將 ConfigMap 標(biāo)記為 optional(請(qǐng)參閱可選的 ConfigMaps)。 如果所引用的 ConfigMap 不存在,并且沒(méi)有將應(yīng)用標(biāo)記為 optional 則 Pod 將無(wú)法啟動(dòng)。 同樣,引用 ConfigMap 中不存在的主鍵也會(huì)令 Pod 無(wú)法啟動(dòng),除非將 Configmap 標(biāo)記為 optional。

如果使用 envFrom 來(lái)基于 ConfigMap 定義環(huán)境變量,那么無(wú)效的鍵將被忽略。 Pod 可以被啟動(dòng),但無(wú)效名稱將被記錄在事件日志中(InvalidVariableNames)。 日志消息列出了每個(gè)被跳過(guò)的鍵。例如:

kubectl get events

輸出與此類(lèi)似:

LASTSEEN FIRSTSEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE
0s 0s 1 dapi-test-pod Pod Warning InvalidEnvironmentVariableNames {kubelet, 127.0.0.1} Keys [1badkey, 2alsobad] from the EnvFrom configMap default/myconfig were skipped since they are considered invalid environment variable names.

ConfigMap 位于確定的名字空間中。 每個(gè) ConfigMap 只能被同一名字空間中的 Pod 引用。

不能將 ConfigMap 用于靜態(tài) Pod, 因?yàn)?Kubernetes 不支持這種用法。

九、清理現(xiàn)場(chǎng)

刪除創(chuàng)建那些的 ConfigMap 和 Pod:

kubectl delete configmaps/game-config configmaps/game-config-2 configmaps/game-config-3 \
configmaps/game-config-env-file
kubectl delete pod dapi-test-pod --now
# 可能已經(jīng)刪除了下一組內(nèi)容
kubectl delete configmaps/special-config configmaps/env-config
kubectl delete configmap -l 'game-config in (config-4,config-5)'

如果創(chuàng)建了一個(gè)目錄 configure-pod-container 并且不再需要它,也應(yīng)該刪除這個(gè)目錄, 或者將該目錄移動(dòng)到回收站/刪除文件的位置。

  • 廣告合作

  • QQ群號(hào):4114653

溫馨提示:
1、本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。郵箱:2942802716#qq.com(#改為@)。 2、本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)裁,轉(zhuǎn)載請(qǐng)注明出處“站長(zhǎng)百科”和原文地址。