Почему не настроить уже посещенный узел - PullRequest
0 голосов
/ 03 августа 2020

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

Я запускаю команду kustomize из пользовательского каталога, как показано ниже: $ kubectl kustomize overlay/pipeline/parsers/commercial/dev - это работает нормально, он дает ожидаемый результат, определенный в kustomization.yaml # 1 по желанию. Что не работает, так это то, что он НЕ выполняет автоматическую настройку # 2, которая находится в (уже пройденном) пути к каталогу на 2 уровня выше. # 2 kustomization.yaml содержит создание configMap, общее для всех сред парсеров. Я не хочу повторять это в каждом env. Когда я попытался сослаться на №1 из №2, я получил ошибку о циклической ссылке, но не смог запустить создание конфигурации.

У меня следующее дерево структуры каталогов:

custom
├── base
|   ├── kustomization.yaml
│   ├── logstash-config.yaml
│   └── successful-vanilla-ls7.8.yaml
├── install_notes.txt
├── overlay
│   └── pipeline
│       ├── logstash-config.yaml
│       ├── parsers
│       │   ├── commercial
│       │   │   ├── dev
│       │   │   │   ├── dev-patches.yaml
│       │   │   │   ├── kustomization.yaml    <====== #1 this works
│       │   │   │   ├── logstash-config.yaml
│       │   │   │   └── parser-config.yaml
│       │   │   ├── prod
│       │   │   ├── stage
│       │   ├── kustomization.yaml  <============= #2 why won't this run automatically?
│       │   ├── logstash-config.yaml
│       │   ├── parser-config.yaml
│

Вот мой файл kustomization.yaml №1:

bases:
- ../../../../../base
namePrefix: dev-
commonLabels:
  app: "ls-7.8-logstash"
  chart: "logstash"
  heritage: "Helm"
  release: "ls-7.8"

patchesStrategicMerge:
- dev-patches.yaml

А вот мой файл kustomization.yaml №2:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
# generate a ConfigMap named my-generated-configmap-<some-hash> where each file
# in the list appears as a data entry (keyed by base filename).
- name: logstashpipeline-parser
  behavior: create
  files:
  - parser-config.yaml
- name: logstashconfig
  behavior: create
  files:
  - logstash-config.yaml

1 Ответ

1 голос
/ 05 августа 2020

Проблема кроется в вашей структуре. Каждая запись в base должна разрешаться в каталог, содержащий один файл kustomization.yaml. То же самое и с наложением . Теперь, я думаю, было бы проще объяснить на примере (я буду использовать $, чтобы показать, что куда идет):

├── base $1
│   ├── deployment.yaml
│   ├── kustomization.yaml $1
│   └── service.yaml
└── overlays
    ├── dev $2
    │   ├── kustomization.yaml $2
    │   └── patch.yaml
    ├── prod #3
    │   ├── kustomization.yaml $3
    │   └── patch.yaml
    └── staging #4
        ├── kustomization.yaml $4
        └── patch.yaml

Каждая запись разрешается в соответствующий файл kustomization.yaml. Base $1 преобразуется в kustomization.yaml $1, dev $2 в kustomization.yaml $2 и т. Д.

Однако в вашем случае использования:

├── base $1
|   ├── kustomization.yaml $1
│   ├── logstash-config.yaml
│   └── successful-vanilla-ls7.8.yaml
├── install_notes.txt
├── overlay
│   └── pipeline
│       ├── logstash-config.yaml
│       ├── parsers
│       │   ├── commercial
│       │   │   ├── dev $2
│       │   │   │   ├── dev-patches.yaml
│       │   │   │   ├── kustomization.yaml $2 
│       │   │   │   ├── logstash-config.yaml
│       │   │   │   └── parser-config.yaml
│       │   │   ├── prod $3
│       │   │   ├── stage $4
│       │   ├── kustomization.yaml $???
│       │   ├── logstash-config.yaml
│       │   ├── parser-config.yaml
│

Ничего не разрешается в ваш второй kustomization.yaml.

Итак, чтобы это работало, вы должны поместить эти файлы отдельно в каждую среду. Ниже вы можете найти источники с еще несколькими примерами, показывающими, как должна выглядеть типичная структура каталогов:

...