Различные конфигурации развертывания с использованием Helm

#kubernetes-helm

#kubernetes-helm

Вопрос:

Я хотел бы иметь немного другую конфигурацию развертывания в разных средах. То есть в Prod и Ver я не хочу, чтобы были развернуты все контейнеры.

С помощью docker-compose мы решаем эту проблему, используя инкрементные файлы docker-compose, которые мы объединяем, например: docker-compose up -f docker-compose.yml -f docker-compose-prod.yml

Как это можно сделать с помощью Helm charts? У нас есть структура с диаграммой.yaml и значения.yaml в верхней части, а затем по одному файлу yaml на контейнер во вложенной папке. Наивным решением было бы скопировать эту структуру и исключить некоторые файлы диаграмм, но я бы предпочел иметь только один файл (максимум один файл!) на службу.

Мы выполняем развертывание в AKS с использованием CircleCI.

Подводя итог: сегодня у каждой службы есть свой собственный файл yaml, и при каждом развертывании все они развертываются. Я хочу настроить свои диаграммы таким образом, чтобы в определенных средах развертывалось только подмножество сервисов.

Редактировать:

в kubectl есть возможность использовать селекторы, такие как kubectl create cfg.yaml --selector=tier=frontend или kubectl create cfg.yaml --selector=environment=prod , и я уже помечаю свои контейнеры тегами, так что это было бы просто. Но helm install не имеет возможности принять аналогичный флаг и передать его kubectl.

Ответ №1:

просто создайте один файл значений для каждой среды и настройте их:

 helm install . -f values.production.yaml
helm install . -f values.development.yaml
  

вы можете использовать условие для переключения развертываний, представьте, что у вас есть что-то, yaml, которое вы хотите условно развернуть:

 {{ if .Values.something}}
something.yaml original content goes here
{{ end }}
  

Комментарии:

1. Но как значения могут переключать развертывание всего контейнера или нет?

2. проверьте обновленный ответ, поскольку технически это новый вопрос

3. Итак, я помещаю все содержимое something, yaml внутри if-инструкции …? Или мне опустить какие-либо теги, такие как apiVersion и kind?

4. все идет внутрь, просто возьмите существующий файл yaml и добавьте условие вверху и {{ end }} внизу

5. Я надеялся, что есть способ перечислить, какие службы должны быть включены, а затем просто параметризовать этот список. Но мне трудно найти информацию о том, как интерпретируются различные теги. Много документации о том, как манипулировать ими со строками, но что означает «вид»? «nodeSelector»? и т.д. Извините, просто выпускаю немного разочарованный пар здесь.