Рекомендации по хранению конфигурации kubernetes в системе управления версиями
в нескольких местах на сайте документации Kubernetes рекомендуется хранить файлы конфигурации YAML в системе управления версиями для простого отслеживания версий, отката и развертывания.
мои коллеги и я в настоящее время находимся в процессе принятия решения о структуре нашего репозитория git.
- мы решили, что поскольку конфигурация может меняться без изменения кода приложения, которые мы хотели бы сохранить конфигурации в отдельный, общий репозиторий.
- нам может понадобиться несколько версий некоторых компонентов, работающих бок о бок в данной среде (кластере). Эти версии могут иметь различные конфигурации.
есть много возможных вариаций, и все они имеют недостатки. Каков общепринятый способ структурирования такого хранилища?
3 ответов
Я считаю, что еще нет установленного стандарта. Я нахожу диаграммы Хелма слишком сложными для начала, особенно с другим неуправляемым компонентом, работающим в кластере k8s. Это рабочий процесс, который мы следуем, который работает довольно хорошо для настройки 15ish микросервисов и 5 различных сред (devx2, staging, qa, prod).
2 ключевые идеи:
- магазин kubernetes конфигураций в одном РЕПО источник другие инструменты сборки. Например: бок о бок исходный код микрослужб, который имеет инструментарий для создания/освобождения, что особое конструирование.
- Template конфигурация kubernetes с чем-то вроде jinja и визуализирует шаблоны в соответствии с средой, на которую вы нацелены.
инструмент достаточно прост, чтобы выяснить, собрав несколько сценариев bash или интегрируясь с Makefile и т. д.
EDIT: чтобы ответить на некоторые вопросы в комментарий
репозиторий исходного кода приложения используется как единственный источник истины. Это означает, что если все работает так, как должно, изменения никогда не следует перемещать из кластера kubernetes в репозиторий.
изменения непосредственно на сервере запрещены в нашем рабочем процессе. Если это когда-либо произойдет, мы должны вручную убедиться, что они снова входят в репозиторий приложений.
опять же, просто хочу отметить, что конфигурации, хранящиеся в источнике код на самом деле шаблоны и использовать secretKeyRef
довольно обильно. Это означает, что некоторые конфигурации поступают из инструментов CI по мере их визуализации, а некоторые поступают из секретов, которые живут только в кластере (например, пароли базы данных, маркеры API и т. д.).
в мой шлем мнение kubernetes как docker-compose является в Docker
нет причин бояться руля, так как в нем самая основная функциональность, все, что он делает, похоже на kubectl apply -f templates
.
как только вы познакомитесь с helm, вы можете начать использовать values.yaml
и добавление значений в шаблоны kubernetes для максимальной гибкости.
значения.и YAML
name: my-name
внутри шаблоны/развертывание.и YAML
name: {{ .Values.name }}
мой подход заключается в создании подкаталога helm в каждом проекте так же, как я включаю docker-compose.файл yml.
в дополнение к этому, вы также можете поддерживать репозиторий helm для всех ваших проектов, которые ссылаются на изображения, которые предварительно построены