Как добавить логику в файл настройки

Я пытаюсь развернуть приложение K8s с помощью Kustomize. До сих пор я делал простые реализации, в которых у нас есть несколько файлов K8s, таких как ingress.yaml, с чем-то вроде следующего:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingressname
  namespace: namespace
  labels:
    app: appname  
spec:
  tls:
    - hosts:
        - $(variable1) 
      secretName: $(variable2)-tls

В моем каталоге overlays для каждой среды у меня есть еще один kustomize.yaml, который дает значения в карте конфигурации:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- path

configMapGenerator:
- behavior: merge
  literals:
  - variable1=foo
  - variable2=bar
  name: configmapname
images:
- name: imagename
  newName: registryurl

Это работает хорошо, но теперь мне нужно сделать что-то более сложное. Скажем, например, у меня есть несколько входов. Как создать один базовый файл yaml вместо создания нескольких базовых входных файлов yaml, который создает каждый вход на основе значений в моем файле наложения? Это возможно?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Kustomize не является системой шаблонов и не выполняет подстановку переменных. Он может выполнять различные трюки с исправлением YAML, поэтому у вас есть один вариант — начать с базового манифеста, подобного этому:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingressname
spec:
  tls:
    - hosts: []
      secretName:

А затем исправьте его в своих kustomization.yaml файлах:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../base

patches:
  - target:
      kind: Ingress
      name: ingressname
    patch: |
      - op: replace
        path: /spec/tls
        value:
          - hosts:
              - host1.example.com
            secretName: host1-tls

То, что я показал здесь, хорошо работает, если у вас есть приложение, состоящее из одного Ingress, и вы хотите создать несколько вариантов (может быть, по одному на кластер, или на пространство имен, или что-то еще). То есть у вас есть:

  • Развертывание
  • Сервис
  • Вход
  • (так далее.)

Тогда у вас будет один каталог для каждого варианта приложения, что даст вам что-то вроде макета:

.
├── base
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── variant1
    │   └── kustomization.yaml
    └── variant2
        └── kustomization.yaml

Если в вашем приложении есть несколько ресурсов Ingress, и вы хотите применить один и тот же патч ко всем из них, Kustomize может это сделать. Если бы вы изменили патч в своем kustomization.yaml, чтобы он выглядел так:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../base

patches:
  - target:
      kind: Ingress
      name: ".*"
    patch: |
      - op: replace
        path: /spec/tls
        value:
          - hosts:
              - host1.example.com
            secretName: host1-tls

Это применит один и тот же патч ко всем соответствующим ресурсам Ingress (в данном случае это «все они», потому что мы использовали .* в качестве нашего выражения соответствия).

Спасибо, это именно то, что я искал. Знаете ли вы, можете ли вы перечислить несколько kind в файле оверлея kustomization.yaml?

nray 03.11.2022 21:48

Я думаю, вам понадобится отдельный патч для каждого kind (моя интуиция подсказывает, что было бы необычно, чтобы патч правильно применялся к более чем одному типу ресурсов, а для общих атрибутов, таких как метки и аннотации, в kustomize есть другие средства для установка этих вещей).

larsks 03.11.2022 23:45

Спасибо, я смог сделать то, что мне нужно, добавив раздел для каждого типа (вход, развертывание и т. д.). kustomize build . в каталоге оверлея показывает файлы yaml в том виде, в котором они мне нужны.

nray 04.11.2022 17:06

У меня был один уточняющий вопрос. Что, если мне нужно создать несколько yaml-файлов с разными именами? Например, у меня есть одна служба с именем product и одна служба с именем price. Есть ли способ сделать это с помощью патча в оверлее на одном базовом service.yaml файле?

nray 07.11.2022 23:48

Другие вопросы по теме