kubernetes中提供了一個叫configMap
的概念,爲的就是讓鏡像和配置文件之間解耦,不須要在鏡像中打包配置文件,實現了鏡像的靈活性,由於一個configMap
就是一系列配置信息的集合,未來是能夠直接注入到Pod中的容器供其使用。mysql
你能夠經過使用kubectl create configmap
或者yaml
方式來建立configMap。nginx
命令格式:redis
$ kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1]
示例:sql
1.建立命令api
$ kubectl create configmap test-config --from-literal=Username=root --from-literal=Password=123456
2.結果以下data內容:bash
[root@hdss7-21 ~]# kubectl get configmap test-config -o yaml apiVersion: v1 data: Password: "123456" Username: root kind: ConfigMap metadata: creationTimestamp: "2020-03-27T12:25:59Z" name: test-config namespace: default resourceVersion: "98418" selfLink: /api/v1/namespaces/default/configmaps/test-config uid: 7ce2d3dd-6b0d-4fa2-bb09-0a353a3a137a
咱們能夠指定文件建立configmap,系統會自動將文件的內容寫入到configmap的data字段裏。app
命令格式:ui
$ kubectl create configmap NAME [--from-file=[key=]source]
示例:spa
1.db.properties
文件內容命令行
db.user = root db.pwd = 123456 db.host = 10.4.7.11 db.port = 3306 db.lib = devops
2.建立命令
$ kubectl create configmap db-config --from-file=./db.properties
--from-file 能夠有多個
3.結果以下data內容:
[root@hdss7-21 ~]# kubectl get configmap db-config -o yaml apiVersion: v1 data: db.properties: | db.user = root db.pwd = 123456 db.host = 10.4.7.11 db.port = 3306 db.lib = devops kind: ConfigMap metadata: creationTimestamp: "2020-03-27T12:33:57Z" name: db-config namespace: default resourceVersion: "99103" selfLink: /api/v1/namespaces/default/configmaps/db-config uid: a3b76fd8-bf2d-483b-a455-eb4fb48450cb
注意:咱們能夠看到指定文件建立時ConfigMap會建立一個key/value鍵值對,key是文件名,value是文件內容。
若是咱們不想configmap中的key爲默認的文件名,還能夠在建立時本身指定key名字:
$ kubectl create configmap db-config --from-file=<key-name>=<path-to-file>
咱們能夠指定目錄建立configmap,系統會自動將指定目錄下的全部文件的內容寫入到configmap的data字段裏。
命令格式:
$ kubectl create configmap NAME [--from-file=[key=]source]
示例:
1.查看文件內容
[root@hdss7-21 ~]# echo "123" >config/a.ini [root@hdss7-21 ~]# echo "456" >config/b.ini
2.建立命令
$ kubectl create configmap ab-config --from-file=./config
--from-file 能夠有多個。
3.結果以下data內容:
[root@hdss7-21 ~]# kubectl get configmap ab-config -o yaml apiVersion: v1 data: a.ini: | 123 b.ini: | 456 kind: ConfigMap metadata: creationTimestamp: "2020-03-27T12:45:15Z" name: ab-config namespace: default resourceVersion: "100073" selfLink: /api/v1/namespaces/default/configmaps/ab-config uid: 0988dda0-c8b5-4944-ad16-cffba1d41bb3
注意:咱們能夠看到指定目錄建立時ConfigMap內容中的各個文件會建立一個key/value鍵值對,key是文件名,value是文件內容。
指定目錄時只會識別該目錄下的文件,而忽略子目錄。
1.建立cache-db-config.yaml
文件
apiVersion: v1 kind: ConfigMap metadata: name: cache-db-config namespace: default data: redis.cnf: | redis.db = 3 redis.host = 127.0.0.1 redis.user = admin redis.pwd = admin123 redis.port = 2379 mysql.cnf: | mysql.db = devops mysql.host = 127.0.0.1 mysql.user = root mysql.pwd = root123 mysql.port = 3306
2.應用yaml
$ kubectl apply -f cache-db-config.yaml
那麼前面介紹如何建立ConfigMap,可是怎麼使用尼?下面講解
使用ConfigMap三種方式:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.11 ports: - containerPort: 80 env: - name: User # pod容器中的環境變量名字 valueFrom: configMapKeyRef: name: test-config # configmap的名字 key: Username # configmap中定義的key - name: Pwd valueFrom: configMapKeyRef: name: test-config key: Password
驗證:
[root@hdss7-21 ~]# kubectl exec nginx-7cd5cbd997-zv6f4 printenv | egrep "User|Pwd" User=root Pwd=123456
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.11 ports: - containerPort: 80 volumeMounts: - name: ab mountPath: /etc/nginx/conf.d/ readOnly: true volumes: - name: ab configMap: # 存儲卷類型 name: ab-config
驗證:
[root@hdss7-21 ~]# kubectl exec nginx-574c65d5b4-57j2p cat /etc/nginx/conf.d/a.ini 123 [root@hdss7-21 ~]# kubectl exec nginx-574c65d5b4-57j2p cat /etc/nginx/conf.d/b.ini 456