1. 程式人生 > >kubernetes -- helm charts 開發: 1、 編寫ConfigMap

kubernetes -- helm charts 開發: 1、 編寫ConfigMap

1 Configmap基礎

問題原因: 配置資訊要和docker image解耦,不能修改配置就重做映象。
作用:ConfigMap可以儲存但個屬性或整個配置檔案
原理:儲存key-value配置資料,該資料可以在pods裡面使用。
可以理解為是多個屬性檔案的引用,認為是/etc目錄,專門用來儲存配置檔案的目錄。
示例檔案1:
ceilometer/temp
{{- if empty .Values.conf.ceilometer.api.aodh_url -}}
{{- tuple "alarming" "internal" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_uri_lookup"| set .Values.conf.ceilometer.api "aodh_url" | quote | trunc 0 -}}
{{- end -}}
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: ceilometer-etc
data:
  rally_tests.yaml: |+
{{- tuple .Values.conf.rally_tests "etc/_rally_tests.yaml.tpl" . | include "helm-toolkit.utils.configmap_templater" }}
  ceilometer.conf: |+
{{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.ceilometer | indent 4 }}


解釋:
data     一欄包括了配置資料,ConfigMap可以被用來儲存單個屬性,也可以用來儲存一個配置
檔案。    

2 使用configmap的方式

2.1 通過資料卷外掛使用ConfigMap

ConfigMap也可以在資料卷裡面被使用。還是這個ConfigMap。
apiVersion:    v1
kind:    ConfigMap
metadata:
        name:    special-config
        namespace:    default
data:
        special.how:    very
        special.type:    charm

在資料卷裡面使用這個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",    "cat    /etc/config/special.how"    ]
                        volumeMounts:
                        -    name:    config-volume
                                mountPath:    /etc/config
        volumes:
                -    name:    config-volume
                        configMap:
                                name:    special-config
        restartPolicy:    Never


2.2 使用volume將ConfigMap作為檔案或目錄直接掛載

其中每一個key-value鍵值對都會生成一個檔案,key為檔名,value為內容,下面是一個示例:
data    一欄包括了配置資料,ConfigMap可以被用來儲存單個屬性,也可以用來儲存一個配置檔案。    
配置資料可以通過很多種方式在Pods裡被使用。ConfigMaps可以被用來:
1) 設定環境變數的值
2) 在容器裡設定命令列引數
3) 在資料卷裡面建立config檔案

3 總結

ConfigMap用於儲存屬性鍵值對或者屬性檔案,可以後續通過volumes的形式掛在到pod中。其格式通常如下: data下面跟隨鍵值對,鍵是(檔案)名稱,值是(檔案)內容。使用方法是:


3.1 編寫configmap-etc.yaml


往往會在congfigmap-etc.yaml的同級目錄新建etc目錄,填寫配置檔案模板,然後在configmap-etc.yaml中指定模板檔名稱和具體生成方法。

3.2填寫volumes資訊

在pod中的volumes(與containers平級)的段落下,填寫如下內容:

volumes:
- name: myproject-etc
  configMap:
    name: myproject-etc
    defaultMode: 0644
類似上述內容: 其中指定掛載的是configMap,並指定configMap的名稱。
然後在容器的volumeMounts段落下,填寫如下內容:
volumeMounts:
  - name: myproject-etc
    mountPath: /etc/myproject.conf
    subPath: myproject.conf
注意: name對應的名字,需要和volumes中某個name匹配,mountPath:指定了掛載到該容器的位置,subPath:指定的是該volumes中某個name對應的子路徑。

3.3 除錯configmap是否掛載成功

可以用類似如下命令dry-run進行除錯:
helm install --dry-run --debug myproject  --namespace mynamespace
請將myproject替換為自己需要的專案名稱
請將mynamespace替換為自己需要的名稱空間

參考:
[1] kubernetes-handbook.pdf
[2] https://www.cnblogs.com/breezey/p/6582082.html