- PVSM.RU - https://www.pvsm.ru -
Прим. перев.: В сообществе Kubernetes явную популярность набирает тренд под названием GitOps, в чём мы лично убедились, посетив [1] KubeCon Europe 2019. Этот термин был относительно недавно придуман [2] главой компании Weaveworks — Alexis Richardson — и означает применение привычных для разработчиков инструментов (в первую очередь — Git, откуда и само название) для решения задач эксплуатации. В частности, речь об эксплуатации Kubernetes через хранение его конфигураций в Git и автоматического выката изменений в кластер. О двух подходах к этому выкату и рассказывает Matthias Jg в данной статье.

В прошлом году (на самом деле, формально это произошло в августе 2017 г. — прим. перев.) появился новый подход к развёртыванию приложений в Kubernetes. Он называется GitOps, а в его основе лежит базовое представление о том, что отслеживание версий deployment'ов ведется в безопасной среде Git-репозитория.
Основные преимущества у этого подхода следующие:
git reset позволяет сбрасывать изменения в deployment'ах; всегда доступны прошлые состояния.Как видите, у метода GitOps есть множество преимуществ. За последний год особую популярность набрали два подхода. Один основан на push, другой — на pull. Прежде чем их рассмотреть, давайте сначала посмотрим, как выглядят типичные deployment'ы Kubernetes.
За последние годы в Kubernetes устоялись различные способы и инструменты для развертываний:
В своей работе мы постоянно используем Helm-чарты для важных инструментов (поскольку в них многое уже готово, что значительно упрощает жизнь) и «чистые» YAML-файлы Kubernetes для развертывания собственных приложений.
В одной из своих недавних публикаций в блоге я представил инструмент Weave Flux [5], позволяющий коммитить шаблоны в Git-репозиторий и обновлять deployment после каждого коммита или push'а контейнера. Мой опыт показывает, что этот инструмент — один из основных в деле продвижения pull-подхода, поэтому буду часто ссылаться на него. Если хотите узнать больше о том, как его использовать, вот ссылка на статью [6].
NB! Все преимущества использования GitOps сохраняются для обоих подходов.

В основе подхода pull лежит тот факт, что все изменения применяются изнутри кластера. Внутри кластера есть оператор, который регулярно проверяет связанные репозитории Git и Docker Registry. Если в них происходят какие-либо изменения, состояние кластера обновляется изнутри. Обычно считается, что подобный процесс весьма безопасен, поскольку ни у одного внешнего клиента нет доступа к правам администратора кластера.
Плюсы:
Минусы:

В push-подходе внешняя система (преимущественно CD-пайплайны) запускает развертывания в кластер после коммита в Git-репозиторий или в случае успешного выполнения предыдущего CI-пайплайна. В этом подходе система обладает доступом в кластер.
Плюсы:
Минусы:
Как обычно это бывает, у каждого подхода есть свои плюсы и минусы. Некоторые задачи легче осуществить с одним и сложнее — с другим. Поначалу я проводил развертывания вручную, но после того, как наткнулся на несколько статей о Weave Flux, решил внедрить GitOps-процессы для всех проектов. Для базовых шаблонов это оказалось легко, но потом я начал сталкиваться с трудностями в работе с Helm-чартами. В то время Weave Flux предлагал только зачаточную версию Helm Chart Operator, но даже сейчас некоторые задачи сложнее из-за необходимости вручную создавать секреты и применять их. Вы можете сказать, что pull-подход гораздо защищеннее, поскольку учетные данные кластера недоступны за его пределами, а это настолько повышает безопасность, что стоит дополнительных усилий.
Поразмыслив немного, я пришел к неожиданному выводу, что это не так. Если говорить о компонентах, требующих максимальной защиты, в такой список войдут хранилища секретов и CI/CD-системы, Git-репозитории. Информация внутри них весьма уязвима и нуждается в максимальной защите. Кроме того, если кто-то проникнет в ваш репозиторий Git и сможет push'ить туда код, то он сможет развернуть все, что пожелает (независимо от выбранного подхода, будет это pull или push), и внедриться в системы кластера. Таким образом, наиболее важными компонентами, требующими защиты, являются Git-репозиторий и CI/CD-системы, а не учетные данные кластера. Если у вас хорошо настроены политики и меры безопасности для систем такого типа, а учетные данные кластера извлекаются в пайплайны только в виде секретов, дополнительная безопасность pull-подхода может оказаться не такой ценной, как первоначально предполагалось.
Итак, если pull-подход более трудоемкий и не дает выигрыша в безопасности, не логично ли использовать только push-подход? Но ведь кто-то может заявить, что в push-подходе вы слишком завязаны на CD-систему и, возможно, лучше так не делать, чтобы в будущем было проще осуществлять миграции.
На мой взгляд (как и всегда), следует использовать то, что больше подходит к конкретному случаю или комбинировать. Лично я пользуюсь обоими подходами: Weave Flux для deployment'ов на основе pull, которые в основном включают наши собственные сервисы, и push-подход с Helm'ом и плагинами, упрощающий применение Helm-чартов к кластеру и позволяющий без проблем создавать секреты. Думаю, никогда не будет единого решения, подходящего для всех случаев, потому что нюансов всегда очень много и они зависят от конкретного варианта применения. При этом я настоятельно рекомендую GitOps — он сильно облегчает жизнь и повышает безопасность.
Надеюсь, мой опыт по данной теме поможет определиться, какой метод больше подходит для вашего типа deployment'ов, а я буду рад узнать ваше мнение.
В минусах pull-модели есть пункт про то, что сложно положить в Git отрендеренные манифесты, однако нет минуса, что CD-пайплайн в pull-модели живёт отдельно от выката и по сути становится пайплайном категории Continuous Apply. Поэтому потребуется ещё больше усилий для того, чтобы собирать со всех deployment'ов их статус и как-то давать доступ к логам/статусу, причем желательно с привязкой к CD системе.
В этом смысле push-модель позволяет дать хоть какие-то гарантии выката, потому что время жизни pipeline'а можно сделать равным времени жизни выката.
Мы опробовали обе модели и пришли к тем же выводам, что и автор статьи:
Читайте также в нашем блоге:
Автор: diafour
Источник [14]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/git/321509
Ссылки в тексте:
[1] посетив: https://habr.com/ru/company/flant/blog/454184/
[2] придуман: https://www.weave.works/blog/gitops-operations-by-pull-request
[3] релизом Kubernetes 1.14: https://habr.com/ru/company/flant/blog/445196/
[4] статье по Helm: https://habr.com/ru/company/flant/blog/423239/
[5] Weave Flux: https://github.com/weaveworks/flux
[6] ссылка на статью: https://medium.com/@m.k.joerg/gitops-weave-flux-in-detail-77ce36945646
[7] Bitnami Sealed Secrets: https://github.com/bitnami-labs/sealed-secrets
[8] статью про addon-operator: https://habr.com/ru/company/flant/blog/455543/
[9] werf: https://github.com/flant/werf
[10] Kubernetes tips & tricks: перевод работающих в кластере ресурсов под управление Helm 2: https://habr.com/ru/company/flant/blog/441964/
[11] Представляем библиотеку kubedog для слежения за ресурсами Kubernetes: https://habr.com/ru/company/flant/blog/434160/
[12] Расширяем и дополняем Kubernetes (обзор и видео доклада): https://habr.com/ru/company/flant/blog/449096/
[13] Советы по созданию нестандартных рабочих процессов в GitLab CI: https://habr.com/ru/company/flant/blog/436910/
[14] Источник: https://habr.com/ru/post/456754/?utm_campaign=456754&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.