Существует ли концепция наследования для развертываний Kubernetes?

Есть ли способ создать дерево наследования для развертываний Kubernetes? У меня есть несколько вариантов развертывания, которые похожи, но не идентичны. Они разделяют многие варвары ENV, но не все. Все они используют одно и то же изображение.

Например, у меня есть развертывание dev, которое настроено почти идентично производственному развертыванию, но имеет env vars, указывающий на другой бэкэнд базы данных. У меня есть развертывание сельдерея, которое настроено так же, как и производственное развертывание, однако оно имеет другую команду запуска.

Ответ 1

Хельм - это то, что многие люди используют для этого. Это позволяет вам создавать шаблоны для дескрипторов kubernetes и передавать параметры для генерации дескрипторов из шаблонов.

Существуют и другие инструменты, которые можно использовать для создания вариантов дескрипторов развертывания kubernetes путем введения параметров в шаблоны. Ansible также популярен. Но Хелм тесно связан с CNCF и сообществом Kubernetes, и там есть хороший выбор официальных карт.

РЕДАКТИРОВАТЬ: Если цель состоит в том, чтобы включить различные развертывания (например, для dev и prod) с использованием одного образа докера, то это, вероятно, лучше всего обрабатывать с одной диаграммой. Вы можете создать разные файлы значений для каждого развертывания и предоставить выбранный файл значений для установки helm с параметром --values. Если есть части диаграммы, которые применимы только иногда, их можно обернуть, if условия для их включения/выключения.

Что касается конкретно вопроса наследования, в документе helm есть пример того, как взять другую диаграмму в качестве родителя/зависимости и переопределить ее значения, и я ранее создал диаграмму, которую вы можете увидеть в github, которая включает несколько других диаграмм и переопределяет части все они через values.yml. Он также разделяет некоторые конфигурации между включенными диаграммами с глобальными переменными. Если вы хотите использовать родительский элемент для уменьшения дублирования, а не для объединения нескольких приложений, то можно создать диаграмму-обертку, но может оказаться, что лучше просто скопировать конфигурацию.

РЕДАКТИРОВАТЬ (180119): альтернатива Kustomize может скоро стать доступной в kubectl

Ответ 2

Вы также можете проверить Kustomize. Это дает некоторую поддержку для написания манифеста ямля в иерархической форме, так что вам не нужно повторять себя.