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