#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»? и т.д. Извините, просто выпускаю немного разочарованный пар здесь.