K8S-ConfigMap實(shí)現(xiàn)應(yīng)用和配置分離詳解
前言
Kubernetes 是目前最流行的容器編排系統(tǒng)之一,它提供了豐富的功能來支持容器化應(yīng)用程序的管理和部署。
ConfigMap 是 Kubernetes 中重要的資源對(duì)象,用于存儲(chǔ)不敏感的配置信息并將其注入到 Pod 中。本文將介紹 ConfigMap 的創(chuàng)建方式和使用方法,并討論其注意事項(xiàng)。
ConfigMap 背景
應(yīng)用程序的運(yùn)行可能會(huì)依賴一些配置,而這些配置又是可能會(huì)隨著需求產(chǎn)生變化的,如果我們的應(yīng)用程序架構(gòu)不是應(yīng)用和配置分離的,那么就會(huì)存在當(dāng)我們需要去修改某些配置項(xiàng)的屬性時(shí)需要重新構(gòu)建鏡像文件的窘境。
現(xiàn)在,ConfigMap組件可以很好的幫助我們實(shí)現(xiàn)應(yīng)用和配置分離,避免因?yàn)樾薷呐渲庙?xiàng)而重新構(gòu)建鏡像。 ConfigMap 用于保存配置數(shù)據(jù)的鍵值對(duì),可以用來保存單個(gè)屬性,也可以用來保存配置文件。ConfigMap 跟 Secret 很類似,但它可以更方便地處理不包含敏感信息的字符串。
ConfigMap 創(chuàng)建方式
ConfigMap 可以通過多種方式創(chuàng)建,包括:
- 命令行工具 kubectl
可以使用 kubectl create configmap 命令從文件或文本創(chuàng)建 ConfigMap。
例如,以下命令將名為 my-config 的 ConfigMap 從文件創(chuàng)建:
kubectl create configmap my-config --from-file=config.properties
- 聲明式 YAML 文件
可以使用聲明式 YAML 文件定義 ConfigMap 對(duì)象。
例如,以下 YAML 定義了一個(gè)名為 my-config 的 ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: my-config data: DB_USERNAME: admin DB_PASSWORD: password123
- 配置自動(dòng)加載
在 Kubernetes 中,可以使用特定的掛載點(diǎn)來自動(dòng)加載 ConfigMap 作為環(huán)境變量或卷。
這可以通過 Pod 中的 Volume 和環(huán)境變量實(shí)現(xiàn)。例如:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
volumeMounts:
- name: config-volume
mountPath: /etc/config
env:
- name: DB_USERNAME
valueFrom:
configMapKeyRef:
name: my-config
key: DB_USERNAME
volumes:
- name: config-volume
configMap:
name: my-config
ConfigMap 的使用
在 Kubernetes 中,有三種主要方式可以將 ConfigMap 注入到 Pod 中。
- 定義成環(huán)境變量
在 Pod 中,可以將 ConfigMap 數(shù)據(jù)注入到容器的環(huán)境變量中。假設(shè)已經(jīng)創(chuàng)建了一個(gè)名為 my-config 的 ConfigMap,包含以下數(shù)據(jù):
DB_USERNAME=admin DB_PASSWORD=password123
可以通過定義環(huán)境變量引用 ConfigMap 的鍵來將該數(shù)據(jù)注入到容器中。例如:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
env:
- name: DB_USERNAME
valueFrom:
configMapKeyRef:
name: my-config
key: DB_USERNAME
- name: DB_PASSWORD
valueFrom:
configMapKeyRef:
name: my-config
key: DB_PASSWORD
- 使用卷
另一種常見的方法是將 ConfigMap 數(shù)據(jù)作為文件或目錄掛載到容器中。假設(shè)已經(jīng)創(chuàng)建了一個(gè)名為 my-config 的 ConfigMap,包含以下數(shù)據(jù):
config.properties: server.port=8080 database.url=jdbc:mysql://localhost/mydb
則可以使用以下 YAML 定義一個(gè) Pod,將 ConfigMap 作為 Volume 掛載到容器中:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: my-config
在容器內(nèi),可以使用與卷相同的路徑來訪問 ConfigMap 中的數(shù)據(jù)。
- 自定義全局參數(shù)
還可以將 ConfigMap 數(shù)據(jù)作為自定義全局參數(shù)傳遞給 Kubernetes 對(duì)象,如 Deployment。
例如,以下 YAML 定義了一個(gè) Deployment,其中參數(shù)可以通過 ConfigMap 設(shè)置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image
command: ["/bin/myapp"]
args: ["--config=/etc/myapp/config.json"]
env:
- name: MY_APP_ENV
value: "production"
volumeMounts:
- name: config-volume
mountPath: /etc/myapp/
volumes:
- name: config-volume
configMap:
name: my-config
在此示例中,我們通過 ConfigMap 將 myapp 的配置文件傳遞給容器,并將環(huán)境設(shè)置為 production。
使用 ConfigMap 的注意事項(xiàng)
ConfigMap 是 Kubernetes 中非常有用的功能,但要正確使用它需要注意以下幾點(diǎn):
- 避免包含敏感信息
由于 ConfigMap 存儲(chǔ)在明文中,因此不應(yīng)該將其中包含敏感信息,例如密碼或密鑰等。這些信息應(yīng)該以其他安全方式存儲(chǔ)和管理,例如 Kubernetes 的 Secret 對(duì)象。
- 注意 ConfigMap 與容器之間的同步性
如果在 ConfigMap 中更改了數(shù)據(jù),Pod 中的容器可能無法及時(shí)獲得更改的信息。這可以通過將 Pod 設(shè)置為重新啟動(dòng)或在運(yùn)行時(shí)重新加載 ConfigMap 來解決。
- 指定必須存在的鍵
如果在容器中引用 ConfigMap 的不存在密鑰,則容器將無法啟動(dòng)。因此,建議在 YAML 文件中定義 ConfigMap 時(shí)指定必須存在的鍵。
- 存儲(chǔ) ConfigMap 在默認(rèn) namespace 下可能會(huì)產(chǎn)生問題
如果 ConfigMap 存儲(chǔ)在默認(rèn)命名空間中,則在另一個(gè)命名空間中使用 ConfigMap 時(shí)可能會(huì)出現(xiàn)問題。因此,建議將 ConfigMap 存儲(chǔ)在自己的命名空間中。
總結(jié)
ConfigMap 是 Kubernetes 中重要的資源對(duì)象,可以存儲(chǔ)不敏感的配置信息并將其注入到 Pod 中。
本文介紹了 ConfigMap 的創(chuàng)建方式和使用方法,并討論了其注意事項(xiàng)。正確地使用 ConfigMap 可以大大簡(jiǎn)化應(yīng)用程序的管理和部署,提高可靠性和安全性,更多關(guān)于K8S ConfigMap應(yīng)用配置分離的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- K8S?prometheus?operator監(jiān)控工作原理介紹
- 詳解k8s?NetworkPolicy?網(wǎng)絡(luò)策略是怎么樣的
- k8s Job 執(zhí)行一次性以及批處理任務(wù)使用場(chǎng)景案例
- k8s?Service?實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡
- k8s?Ingress實(shí)現(xiàn)流量路由規(guī)則控制的定義格式類型
- kubeadm?init快速搭建k8s源碼解析
- 帶你學(xué)會(huì)k8s?更高級(jí)的對(duì)象Deployment
- K8S?Operator部署及自定義詳解
相關(guān)文章
Kubernetes教程之Windows?HostProcess?運(yùn)行容器化負(fù)載
這篇文章主要介紹了Kubernetes?Windows?HostProcess?運(yùn)行容器化負(fù)載,本篇內(nèi)容還是比較多的,總共包含了?Windows?HostProcess的創(chuàng)建、為?Windows?Pod?和容器配置?GMSA?和?Windows?的?Pod?和容器配置?RunAsUserName三大功能模塊,需要的朋友可以參考下2022-07-07
IoT邊緣集群Kubernetes?Events告警通知實(shí)現(xiàn)示例
這篇文章主要為大家介紹了IoT邊緣集群Kubernetes?Events告警通知實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
K8s實(shí)戰(zhàn)教程之容器和?Pods資源分配問題
這篇文章主要介紹了K8s實(shí)戰(zhàn)教程之容器和?Pods資源分配,本篇文章通過配置集群中運(yùn)行的容器的?CPU?請(qǐng)求和限制,你可以有效利用集群上可用的?CPU?資源,通過將?Pod?CPU?請(qǐng)求保持在較低水平,可以使?Pod?更有機(jī)會(huì)被調(diào)度,需要的朋友可以參考下2022-07-07
在AWS-EC2中安裝Minikube集群的詳細(xì)過程
這篇文章主要介紹了在AWS-EC2中安裝Minikube集群,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
玩客云安裝青龍面板實(shí)現(xiàn)京東簽到薅羊毛功能
這篇文章主要介紹了玩客云安裝青龍面板實(shí)現(xiàn)京東簽到薅羊毛,本人準(zhǔn)備的服務(wù)器就是玩客云,只需運(yùn)行一些常用的?docker?容器就行,需要的朋友可以參考下2022-05-05

