Шаблонный движок типа Helm может помочь с этим. (Я полагаю, что Kustomize , который поставляется с нынешними Kubernetes, тоже может это сделать, но я гораздо лучше знаком с Helm.) Основная идея c заключается в том, что у вас есть диаграмма который содержит файлы YAML Kubernetes, но может использовать язык шаблонов (библиотека Go text/template
) для динамического заполнения содержимого.
В этой настройке обычно используется Helm создать как ConfigMap, так и соответствующее Deployment; в описанной вами настройке вы устанавливаете его отдельно (Helm release ) для каждого арендатора. Скажем, конфигурации Nginx были настолько разными, что вы хотели сохранить их во внешних файлах 1015 *; основные части вашей диаграммы будут включать
values.yaml (изменяемая конфигурация, helm install --set nginxConfig=bar.conf
):
# nginxConfig specifies the name of the Nginx configuration
# file to embed.
nginxConfig: foo.conf
templates / configmap.yaml :
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-{{ .Chart.Name }}-config
data:
nginx.conf: |-
{{ .Files.Get .Values.nginxConfig | indent 4 }}
deploy.yaml :
apiVersion: v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-{{ .Chart.Name }}-nginx
spec:
...
volumes:
- name: nginx-config
configMap:
name: {{ .Release.Name }}-{{ .Chart.Name }}-config
{{ .Release.Name }}-{{ .Chart.Name }}
- это типичное соглашение, позволяющее устанавливать несколько копий диаграммы в одном Пространство имен; первая часть - это имя, которое вы даете команде helm install
, а вторая часть - это имя самой диаграммы. Вы также можете напрямую указать содержимое ConfigMap, ссылаясь на другие настройки .Values...
из файла values.yaml
, использовать ConfigMap в качестве переменных среды вместо файлов и т. Д.