Как правильно управлять изменениями в кубернетах?

Я давно использую 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 в автоматическом режиме, там пока нет инструмента. Вы должны будете что-то построить в этой точке, чтобы организовать все. Например, мы закончили тем, что создали внутренний инструмент, который делает это.

Другие вопросы по тегам