Kustomize: установить значение атрибута из файла или URI - PullRequest
1 голос
/ 06 ноября 2019

Я хочу получить манифест Kustomize, в котором значение для какого-либо атрибута берется из всего содержимого какого-либо файла или URI.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Обычно с 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 -
1 голос
/ 06 ноября 2019

Вы можете включить удаленный файл kustomization.yml, но не одно значение. Вы можете создать свой собственный плагин-трансформер, если действительно хотите, но это не совсем в духе Kustomize.

...