Шлем устанавливаем в определенном порядке

Я пытаюсь создать Helm Chart со следующими ресурсами:

  1. Секрет
  2. ConfigMap
  3. обслуживание
  4. Работа
  5. Развертывание

Они также находятся в том порядке, в котором я хотел бы, чтобы они были развернуты. Я добавил ловушку в развертывание, чтобы оно выполнялось после установки, но тогда Helm не видит его как ресурс, и мне приходится управлять им вручную.

Для Job нужна информация в Secret и ConfigMap, иначе я бы сделал это перед установкой. Но я не могу все сделать приколом, иначе в моем выпуске ничего не получится.

Есть ли у кого-нибудь решение или идея, позволяющие управлять всеми ресурсами в выпуске Helm И убедиться, что задание завершено до начала развертывания?

Моя единственная мысль сейчас - два сделать два графика: один с 1-4, а второй с 5, что будет зависеть от первого.

Вы уже пробовали использовать многодокументный файл YAML? Многодокументный YAML - это упорядоченный список, но я не знаю, являются ли они применяемый в этом порядке. Я бы надеюсь на это, но я надеюсь на многое

mdaniel 22.08.2018 02:57

Из интереса, что делает Работа?

Ryan Dawson 22.08.2018 09:42

Я спрашиваю отчасти потому, что мне интересно, могли бы вы поместить initContainer в Deployment и вместо этого переместить туда логику Job. В любом случае сначала должны быть созданы configmap и secret с упорядочиванием ресурсов helm.

Ryan Dawson 22.08.2018 09:46

@RyanDawson Задание подготавливает базу данных, и я бы не хотел, чтобы она выполнялась для каждого модуля развертывания.

waterprincess 22.08.2018 15:57

Если вы решите сделать это, вы можете сделать его идемпотентным с помощью проверки в начале. Примеры этого из официального репозитория helm / charts см. В любом из github.com/helm/charts/… или github.com/helm/charts/blob/master/stable/keycloak/templates‌ /….

Ryan Dawson 22.08.2018 17:20
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
36
5
27 069
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Helm собирает все ресурсы в данной диаграмме и ее зависимости, группирует их по типу ресурсов, а затем устанавливает их в следующем порядке (см. здесь - Helm 2.10):

  1. Пространство имен
  2. ResourceQuota
  3. LimitRange
  4. PodSecurityPolicy
  5. Секрет
  6. ConfigMap
  7. StorageClass
  8. PersistentVolume
  9. PersistentVolumeClaim
  10. ServiceAccount
  11. CustomResourceDefinition
  12. ClusterRole
  13. ClusterRoleBinding
  14. Роль
  15. RoleBinding
  16. обслуживание
  17. DaemonSet
  18. Стручок
  19. ReplicationController
  20. ReplicaSet
  21. Развертывание
  22. StatefulSet
  23. Работа
  24. CronJob
  25. Ingress
  26. APIService

При удалении выпуска порядок меняется на противоположный (см. здесь).

Следуя этой логике, в вашем случае, когда ваш ресурс Job создан, как Secret, так и ConfigMap уже будут применены, но Helm не будет ждать завершения Job перед применением Deployment. Если вы разделите диаграмму на две части (1-4, 5) и установите их последовательно, у вас все равно будет проблема, связанная с возможным применением развертывания до того, как задание будет завершено. Я бы посоветовал разделить вашу диаграмму на две части (1-3, 4-5), в которых задание имеет предварительную установку, которая обеспечит его завершение до того, как будет применено ваше развертывание.

спасибо за ваше предложение, я узнаю больше о зависимостях диаграмм и попробую разбить их на (1-3,4-5). Тогда мой последующий вопрос: является ли это «лучшей практикой» или я уже отклоняюсь от этого идеала с моей проблемой с самого начала? Также спасибо за ссылки на код, мне сложно найти такие полезные вещи!

waterprincess 22.08.2018 16:03

Я не уверен, что здесь лучше всего, но, насколько я понимаю, есть два варианта - разделение вашей диаграммы или использование контейнеров инициализации, чтобы сделать ваш ресурс k8s идемпотентным. У обоих есть свои плюсы и минусы (в основном наличие более простых ресурсов k8s с менее сложной логикой при выборе разделения ваших диаграмм, но требует более сложной логики при применении диаграмм Helm и управлении выпусками). ИМХО я бы пошел с разбивкой графиков в вашем случае.

yanivoliver 23.08.2018 12:25

Хороший ответ и простое объяснение

Venkata S S K M Chaitanya 26.03.2019 16:05

Ссылка на исходный код v3 helm: github.com/helm/helm/blob/release-3.0/pkg/releaseutil/…

object88 28.01.2020 21:17

какой заказ типа List?

Lei Yang 18.03.2020 07:13

А если у меня есть другой вид, которого нет в этом списке, например SecretProviderClass?

Alexsandro 03.10.2020 17:08

@Alexsandro У меня в голове был тот же вопрос, и, похоже, здесь есть ответ: github.com/helm/helm/blob/…

Raymond Tau 13.05.2021 03:09

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