Как правильно управлять изменениями в кубернетах?
Я давно использую terraform, и мне это очень нравится. Я также настроил " Атлантис", чтобы у моей команды был поток "GitOps". Это мой текущий процесс:
- Добавить или удалить ресурсы из файлов Terraform
- Нажмите изменения в GitHub и создайте запрос на получение
- Атлантида улавливает изменения и создает план терраформ
- Когда PR одобрен, Атлантис применяет изменения
Недавно я обнаружил, что мне нужно настроить несколько управляемых кластеров Kubernetes с помощью Amazon EKS. Хотя Terraform способен создавать большую часть базовой инфраструктуры, он не справляется с настройкой некоторых ресурсов k8s (без поддержки шлюзов или доступа, поддержки альфа / бета-функций и т. Д.). Поэтому вместо этого я полагаюсь на ручной подход с использованием kubectl:
- Добавьте ресурс в существующий файл или создайте новый файл
- Добавьте строку в make-файл, который запускает соответствующую команду (kubectl apply или create) для нового файла
- Если я использую диаграмму руля, добавьте строку с
helm template
а потомkubectl apply
(Мне действительно не нравилось использовать тиллер, и helm3 все равно избавляется от него) - Если я хочу удалить ресурс, я делаю это вручную с
kubectl delete
Этот процесс не кажется таким чистым, как то, что мы делаем в Terraform. Есть несколько ключевых проблем:
- Там нет реального всухую. С помощью
kubectl --dry-run
или жеkubectl diff
на самом деле не работает, это всего лишь различие на стороне клиента. Серверные функции сравнения в настоящее время в альфа - Там нет файла состояния. Если я удаляю материал из манифестов, я должен помнить, чтобы удалить его из кластера вручную.
- Нет четкого способа достичь гитопов. Я смотрел на Weaveworks Flux, но, похоже, он больше ориентирован на развертывание приложений.
- Makefile становится все более и более сложным. Не похоже, что это масштабируемо.
Я должен признать, что я довольно новичок в Kubernetes, поэтому мог бы пропустить что-то очевидное.
Есть ли способ для меня достичь процесса, аналогичного тому, который у меня есть в Terraform, во вселенной Kubernetes?
1 ответ
Это скорее вопрос мнения, поэтому я отвечу мнением. Если вам нравится управлять конфигурацией, вы можете попробовать некоторые из этих инструментов:
- Если вы хотите использовать существующие файлы YAML (конфигурации) и использовать что-то на более высоком уровне, вы можете попробовать kustomize.
- Если вы хотите управлять конфигурациями Kubernetes с помощью Jsonnet, вам стоит взглянуть на Ksonnet. Имейте в виду, что Ksonnet не будет поддерживаться в будущем.
Если вы хотите просто автоматически сделать helm update
в автоматическом режиме, там пока нет инструмента. Вы должны будете что-то построить в этой точке, чтобы организовать все. Например, мы закончили тем, что создали внутренний инструмент, который делает это.