2021-02-22 21:21:45
GCP Config Connector & AWS Controllers for Kubernetes: GitOps для инфраструктурыКак бы я не любил Terraform, но если посмотреть правде в глаза - он не всегда удобен, и есть проблемы, которые HashiCorp еще нужно решить.
Одна из серьезных проблем - Wall of Confusion, который мы построили снова. Есть инфраструктура в Terraform, туда доступ только у DevOps, есть чарты в репозитории каждой апки - там может что-то поправить и разработчик приложения, и DevOps. Но в инфраструктуру разработчику нельзя. Грустно.
Почему нельзя разработчику в Terraform инфраструктуру? У каждого свой вариант:
- не актуальный стейт, половина ресурсов с изменениями
- непонятная структура даже для самих DevOps
- нужно обучать девелоперов, в том числе и в модули
- разница приоритетов: по сути DevOps команда осталась Ops, и только она отвечает за стабильность
Вторая серьезная проблема - неймспейсы. Большинство инженеров не слышали, что в Terraform есть неймспейсы, а те кто слышали - стараются их не использовать.
Неймспейсы в Terraform были созданы как ответ на запрос "хотим точно такую же инфру, только без копипасты". Как результат - Terraform рождает кучу месса, остаются те же проблемы с неактуальностью стейта, суперсложно завернуть его в Jenkins/Atlantis и т.п. и т.д.
Получается, что задача создать динамический environment (как прод, например) и потушить его после какого-то действия по задумке - easy, а в реализации - ламучий мрак.
И в этот момент где-то далеко виднеется GitOps для инфраструктуры. После того, как все заценили ArgoCD и все прелести GitOps подхода - мы увидели первые зачатки реализаций GitOps, но уже для инфраструктуры.
В чем суть и как работает:
- мы устанавливаем в Kubernetes cluster контроллер (aka operator с новыми CRD)
- имплементим инфраструктурные зависимости внутри чарта с помощью CRD
- деплоим в кластер, контроллер подхватывает манифесты и деплоит вместе с приложением
Таким образом, мы получаем GitOps для инфраструктуры:
- можно конфигурить апку и зависимости вместе
- отдать это девелоперам, которым понятно YAML и не понятно HCL
- врапнуть чем угодно (helm/kustomize/jsonnet etc)
Стоит заметить что GCP немного впереди и уже работает (реализация - Config Connector), а AWS пока не догоняет - половина ресурсов в Beta, а вторая половина совсем не реализована. Я отлично вижу как определенные рутинные и неудобные куски выносятся из Terraform и врапаются любой билд тулой, например:
- вместо мануального менеджмента IAM делаем отдельный реп, показываем девелоперам как пользоваться, и ставим апруверами SecOps —> вообще убираем себя из этого флоу
- также выносим куски с ASg, размерами инстансов, тестовыми инстансами и т.п.
- делаем амбрелла чарт, который умеет инклудить приложения компании и докидывает туда зависимости (временные S3, SQS, RDS, etc) и делаем динамический энв на PR
Уже доступные ресурсы можно посмотреть по ссылкам:
https://cloud.google.com/config-connector/docs/reference/overview
https://aws-controllers-k8s.github.io/community/services/
1.4K viewsOleg Mykolaichenko, 18:21