kubernetes實踐之三十五:Pod配置管理ConfigMap
一:簡介
很多生產環境中的應用程式配置較為複雜,可能需要多個config檔案、命令列引數和環境變數的組合。使用容器部署時,把配置應該從應用程式映象中解耦出來,以保證映象的可移植性。
ConfigMap是用來儲存配置檔案的kubernetes資源物件,所有的配置內容都儲存在etcd中。ConfigMap讓我們能夠從容器映象中把配置的詳細資訊給解耦出來。透過ConfigMap我們能夠把配置以key-value對的形式傳遞到container或者別的系統元件(比如Controller)裡面。
二:ConfigMap的建立方式
1.From Literal Values 可以用kubectl create來建立一個ConfigMap,然後透過kubectl get來獲取
2.From Configuration File 直接透過配置檔案來建立
3. 當前目錄下包含如果有配置檔案donkey.properties 可以透過kubectl命令建立一個包含該檔案內容的ConfigMap
kubectl create configmap donkey.properties --from-file=donkey.properties
三:ConfigMap的使用方式
1.Pod 透過env使用ConfigMap定義環境變數
從Kubernetes V1.6 開始,引入一個新的欄位envFrom,實現在Pod環境內將ConfigMap中所以定義的key=value自動生成環境變數:
2.使用ConfigMap設定容器啟動命令的啟動引數
3.在儲存卷中使用ConfigMap
四:使用ConfigMap的限制條件
1.ConfigMap必須在Pod之前建立
2.ConfigMap受Namespace限制,只有處於相同Namespaces中的Pod可以引用它
3.ConfigMap 中的配額管理還未能實現
4.kubelet只支援可以被API Server管理的Pod使用ConfigMap
很多生產環境中的應用程式配置較為複雜,可能需要多個config檔案、命令列引數和環境變數的組合。使用容器部署時,把配置應該從應用程式映象中解耦出來,以保證映象的可移植性。
ConfigMap是用來儲存配置檔案的kubernetes資源物件,所有的配置內容都儲存在etcd中。ConfigMap讓我們能夠從容器映象中把配置的詳細資訊給解耦出來。透過ConfigMap我們能夠把配置以key-value對的形式傳遞到container或者別的系統元件(比如Controller)裡面。
1.From Literal Values 可以用kubectl create來建立一個ConfigMap,然後透過kubectl get來獲取
點選(此處)摺疊或開啟
-
# Create the ConfigMap
-
$ kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
-
configmap "my-config" created
-
-
# Get the ConfigMap Details for my-config
-
$ kubectl get configmaps my-config -o yaml
-
apiVersion: v1
-
data:
-
key1: value1
-
key2: value2
-
kind: ConfigMap
-
metadata:
-
creationTimestamp: 2017-05-31T07:21:55Z
-
name: my-config
-
namespace: default
-
resourceVersion: "241345"
-
selfLink: /api/v1/namespaces/default/configmaps/my-config
- uid: d35f0a3d-45d1-11e7-9e62-080027a46057
點選(此處)摺疊或開啟
-
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
kubectl create configmap donkey.properties --from-file=donkey.properties
三:ConfigMap的使用方式
1.Pod 透過env使用ConfigMap定義環境變數
點選(此處)摺疊或開啟
-
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: special-config
-
key: special.how
-
- name: LOG_LEVEL
-
valueFrom:
-
configMapKeyRef:
-
name: env-config
-
key: log_level
- restartPolicy: Never
點選(此處)摺疊或開啟
-
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" ]
-
envFrom:
-
- configMapRef:
-
name: special-config
- restartPolicy: Never
2.使用ConfigMap設定容器啟動命令的啟動引數
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Pod
-
metadata:
-
name: dapi-test-pod
-
spec:
-
containers:
-
- name: test-container
-
image: k8s.gcr.io/busybox
-
command: [ "/bin/sh", "-c", "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
點選(此處)摺疊或開啟
-
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: 120.79.156.135/desktop/busybox:latest
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
volumeMounts:
- name: donkeyconfig
mountPath: /configfiles
volumes:
- name: donkeyconfig
configMap:
name: donkey.properties
items:
- key: donkey.properties
path: donkey.properties
restartPolicy: Always
imagePullSecrets:
- name: registry-secret
1.ConfigMap必須在Pod之前建立
2.ConfigMap受Namespace限制,只有處於相同Namespaces中的Pod可以引用它
3.ConfigMap 中的配額管理還未能實現
4.kubelet只支援可以被API Server管理的Pod使用ConfigMap
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2154299/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實踐之三十八:Pod排程
- kubernetes實踐之三十七:Pod健康檢查
- kubernetes實踐之三十九:Pod初始化容器之Init ContainerAI
- kubernetes實踐之三十六:在容器內獲取Pod資訊 Downward APIAPI
- kubernetes實踐之三十一:kubectl
- kubernetes實踐之二十二:Pod
- kubernetes實踐之三十三:基本概念
- kubernetes實踐之三十: SonarQube和SonarQube Runner
- kubernetes實踐之六十五:Service Mesh
- kubernetes實踐之三十二:Jenkins和SonarQube整合Jenkins
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- 如何使用Kubernetes的configmap通過環境變數注入到pod裡變數
- kubernetes實踐之四十五:API Server原理分析APIServer
- kubernetes實踐之三:ETCD TLS證書叢集安裝TLS
- Kubernetes 實戰——配置應用(ConfigMap、Secret)
- ConfigMap 使用 | kubernetes 篇
- kubernetes實踐之十五:Kubernetes叢集主要啟動引數說明
- kubernetes實踐之四十:Pod的升級與回滾
- kubernetes實踐之三十四: Master節點安裝與配置AST
- Kubernetes 漫遊:理解 ConfigMap
- kubernetes實踐之二十五:儲存卷 PV&PVC
- 【原創】Kuberneters-ConfigMap的實踐
- Nacos配置管理最佳實踐
- Kubernetes裡的ConfigMap的用途
- Kubernetes中的Configmap和Secret
- kubernetes實踐之四十一:Pod自動擴容與縮容
- Kubernetes利用Volume掛載ConfigMap與Secret
- 傲視Kubernetes(三):Kubernetes中的Pod
- Kubernetes之Pod排程
- Kubernetes Pod驅逐策略
- kubernetes之pod中斷
- Kubernetes:Pod總結(二)
- Kubernetes Pod 全面知識
- Kubernetes部署單元-Pod
- Kubernetes監控實踐
- Serverless Kubernetes 落地實踐Server
- Kubernetes Deployment 最佳實踐
- 在Spring Boot應用程式中使用Kubernetes ConfigMapSpring Boot