Kubernetes之ConfigMap

一、何爲configMap

kubernetes中提供了一個叫configMap的概念,爲的就是讓鏡像和配置文件之間解耦,不須要在鏡像中打包配置文件,實現了鏡像的靈活性,由於一個configMap就是一系列配置信息的集合,未來是能夠直接注入到Pod中的容器供其使用。mysql

二、建立configMap

你能夠經過使用kubectl create configmap或者yaml方式來建立configMap。nginx

2.一、經過--from-literal建立

命令格式: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

2.二、經過文件建立

咱們能夠指定文件建立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>

2.三、經過目錄建立

咱們能夠指定目錄建立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.四、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

三、使用ConfigMap

那麼前面介紹如何建立ConfigMap,可是怎麼使用尼?下面講解

使用ConfigMap三種方式:

  • 第一種是經過環境變量的方式,直接傳遞給pod
    • 使用configmap中指定的key
    • 使用configmap中全部的key
  • 第二種是經過在pod的命令行下運行的方式(啓動命令中)
  • 第三種是做爲volume的方式掛載到pod內

3.一、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.二、掛載方式

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
相關文章
相關標籤/搜索