[英]Configuration management with Kubernetes and Helm
我是Kubernetes和Helm的新手。 我來自一個普通的Docker / docker-compose世界。
我有一些運行多個Docker容器的復雜服務,這些容器需要大量的配置參數和邏輯。 docker級服務在啟動時需要很多不同的配置文件,鍵和命令行參數。 我還需要一些運行時只能在容器內部執行的配置邏輯(必須生成一些配置元素)。
我最后要做的是編寫一個shell腳本(用作CMD
),該腳本期望環境變量,定義默認值,將這些環境變量轉換為命令參數和配置文件。
在不考慮Kubernetes和Helm的情況下,這是我如何構建它的無效示例。
Docker文件
...
CMD [ "./bootstrap.sh" ]
bootstrap.sh(打包在圖片中)
# Define default values, if no environment variables provided on
# on "docker run"
export CONFIG_VALUE_A=${CONFIG_VALUE_A:="a"}
export CONFIG_VALUE_B=${CONFIG_VALUE_B:="b"}
export CONFIG_VALUE_C=${CONFIG_VALUE_C:="c"}
# write CONFIG_VALUE_A to file
echo ${CONFIG_VALUE_A} > ./some-config-file-a.cfg
ARGS="--config-file-a ./some-config-file-a.cfg --config-value-b ${CONFIG_VALUE_B} --config-value-c ${CONFIG_VALUE_C}"
exec ./my-app ${ARGS}
這樣做的好處是,使用環境變量時,我具有標准的配置界面,不需要處理配置文件的卷。
現在,我進入Helm的Kubernetes。 Helm使用values.yaml
具有自己的參數概念。 要將其與我上面已經擁有的內容結合起來,我只需將values.yaml
值與這些環境變量進行映射values.yaml
。
deployment.yaml
...
spec:
...
template:
...
spec:
containers:
- name: my-app
...
env:
- name: "CONFIG_VALUE_A"
value: {{ .Values.config.value_a }}
- name: "CONFIG_VALUE_B"
value: {{ .Values.config.value_b }}
- name: "CONFIG_VALUE_C"
value: {{ .Values.config.value_c }}
values.yaml
config:
value_a: a
value_b: b
value_c: c
但是,在三個配置層中我來回映射值(helm模板=>容器環境變量=>配置文件/ CLI參數)違反了DRY原則,並增加了很多錯別字/錯誤的可能性,以后很難找到。
理想情況下,
deployment.yaml
定義我的配置結構,然后在Helm的default.yaml
定義默認值一次 如何使用Kubernetes,Helm和Docker解決復雜的配置管理?
在Kubernetes世界中,配置通常由ConfigMap管理,后者是配置的主要存儲。
在您的情況下,我認為您可以這樣做(至少如果我願意,我會那樣做):
.cfg
文件的結構。 Helm使用的是GoTemplate格式,因此可以輕松地在其中創建任何結構,包括迭代等。 values.yaml
文件。 deployment.yaml
。 將.cfg
文件的安裝添加到容器中的路徑,然后將應用程序指向它。 就是這樣了。 我們有:
key: value
YAML格式的key: value
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.