Kubernetes 之ConfigMap
阿新 • • 發佈:2020-03-28
目錄
- 1、何為configMap
- 2、建立configMap
- 2.1、通過--from-literal建立
- 2.2、通過檔案建立
- 2.3、通過目錄建立
- 2.4、yaml檔案建立
- 3、使用ConfigMap
- 3.1、valueFrom方式
- 3.2、掛載方式
1、何為configMap
kubernetes中提供了一個叫configMap
的概念,為的就是讓映象和配置檔案之間解耦,不需要在映象中打包配置檔案,實現了映象的靈活性,因為一個configMap
2、建立configMap
你可以通過使用kubectl create configmap
或者yaml
方式來建立configMap。
2.1、通過--from-literal建立
命令格式:
$ kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1]
示例:
1.建立命令
$ kubectl create configmap test-config --from-literal=Username=root --from-literal=Password=123456
2.結果如下data內容:
[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
2.2、通過檔案建立
我們可以指定檔案建立configmap,系統會自動將檔案的內容寫入到configmap的data欄位裡。
命令格式:
$ kubectl create configmap NAME [--from-file=[key=]source]
示例:
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>
2.3、通過目錄建立
我們可以指定目錄建立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是檔案內容。
指定目錄時只會識別該目錄下的檔案,而忽略子目錄。
2.4、yaml檔案建立
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
3、使用ConfigMap
那麼前面介紹如何建立ConfigMap,但是怎麼使用尼?下面講解
使用ConfigMap三種方式:
- 第一種是通過環境變數的方式,直接傳遞給pod
- 使用configmap中指定的key
- 使用configmap中所有的key
- 第二種是通過在pod的命令列下執行的方式(啟動命令中)
- 第三種是作為volume的方式掛載到pod內
3.1、valueFrom方式
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
3.2、掛載方式
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