Обычно с kustomize , который вы собираетесь использовать, - это оверлей и патчи (один или несколько файлов), которые как бы объединяются с вашим базовым файлом. Патч переопределяет атрибут. С помощью этих двух функций вы заранее определяете некоторые вероятные композиции манифеста и просто комбинируете их прямо перед тем, как применить их к своему кластеру.
Вы можете добавлять или редактировать / устанавливать некоторые конкретные атрибуты с патчами или сНастройте подкоманды, например, так:
kustomize edit set image your-registry.com:$image_tag
# just to identify version in metadata sections for service/deployment/pods - not just via image tag
kustomize edit add annotation appVersion:$image_tag
kustomize build . | kubectl -n ${your_ns} apply -f -
Но если вы хотите иметь один файл манифеста и манипулировать одними и теми же атрибутами снова и снова (на лету), вам следует рассмотреть возможность использования механизма шаблонов шлема . Это также вариант, если kustomize не позволяет вам редактировать этот конкретный атрибут, который вы хотите изменить.
Вам просто нужен файл values.yaml (содержащий пары ключ / значение) и template.yaml файл. Вы можете предварительно установить некоторые атрибуты в values.yaml - по требованию вы можете переопределить их для каждого CLI. Инструмент сгенерирует вам манифест k8s с этими значениями, сохраненными в.
файл шаблона:
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ .Values.appSettings.appName }}
namespace: {{ .Values.appSettings.namespace }}
labels:
name: {{ .Values.appSettings.appName }}
spec:
replicas: 1
template:
metadata:
labels:
name: {{ .Values.appSettings.appName }}
spec:
containers:
- name: {{ .Values.appSettings.appName }}
image: "{{ .Values.appSettings.image }}"
ports:
- containerPort: 8080
[...]
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.appSettings.appName }}-svc
namespace: {{ .Values.appSettings.namespace }}
labels:
name: {{ .Values.appSettings.appName }}
spec:
ports:
- port: 8080
targetPort: 8080
selector:
name: {{ .Values.appSettings.appName }}
Файл значений:
appSettings:
appName: your-fancy-app
appDomain: please_override_via_cli
namespace: please_override_via_cli
CLI:
helm template
--set appSettings.image=your-registry.com/service:$(cat versionTag.txt)
--set appSettings.namespace=your-ns
--set appSettings.appDomain=your-domain.com
./ -f ./values.yaml | kubectl apply -f -