Разница между GitOps и традиционным CI/CD
В обычном процессе CI/CD Kubernetes происходит следующий процесс:
- клонировать код из git
- создать и отправить образ докера
- обновить развертывание Kubernetes с обновленным кодом
Согласно определению gitops
GitOps - это новый подход к непрерывному развертыванию, который использует Git как единый источник достоверной информации для декларативной инфраструктуры и приложений, обеспечивая как редактирование, так и контроль изменений. В GitOps система запускается путем отправки запросов на вытягивание (и последующих слияний) для достижения желаемого состояния системы, представленного в репозитории Git.
Каково мое понимание gitops, когда вы обновляете что-либо в git (поскольку это источник истины), желаемое состояние kubernetes меняется на последнее и развертывается последний код.
Конечный результат традиционного CI/CD без gitops: новый код развертывается как развертывание Kubernetes
Конечный результат gitops: новый код развертывается как развертывание кубернетов
Я не могу понять разницу. извините, если вам это покажется странным. Но я новичок и изучаю gitops .
Заранее спасибо за ваш ответ
3 ответа
GitOps — это не что иное, как распространение принципов CI/CD за пределы кода приложения: на инфракод. Простой. Вы можете использовать Git как источник правды, который сочетается с Terraform (предоставление), Ansible (управление конфигурацией) и Kubernetes (оркестровка) в качестве примера ... для достижения цели сохранения Git как 1:1 отражения вашего инфра. В этом нет ничего нового, и не беспокойтесь о таких причудливых терминах...
CICD фокусируется на всей цепочке:
- Вы проверяете свой код
- Код пройти тестирование
- Контейнер создан и загружен
- Контейнер развернут
- Контейнер пройти тестирование
Плюс много других промежуточных шагов. Вот почему это непрерывная интеграция и развертывание. Можно также сказать, непрерывный процесс.
GitOps не заботится о вашем коде, сборке докеров или что-то в этом роде. Он полностью сосредоточен на обновлении ваших приложений (часть развертывания) в экстремальной форме с полностью автоматизированной прогрессивной доставкой с переключением трафика и проверками состояния, автоматическим откатом и т. Д.
Помимо этого, у вас есть другие мелкие детали, которые иногда имеют значение, например, push vs pull, автономность кластера, разделение задач.
Краткий ответ - GitOps - это фреймворк, CI/CD - это процесс!
GitOps стремится использовать Git как источник истины и дает разработчикам возможность выполнять ИТ-операции. Он автоматизирует рабочий процесс Git за счет непрерывной интеграции и непрерывной доставки (CI/CD). Позвольте мне привести здесь пример - у меня есть кластер kubernetes, для которого у меня настроены конвейеры CI/CD для автоматизации, но мы привыкли видеть инциденты, когда кто-то вручную вносил изменения в версию приложения непосредственно в кластере (происходит везде!). Мы использовали GitOps для объявления моего кластера, чтобы каждый раз, когда кто-то вносил изменения вручную, он отменял и возвращал его к исходному состоянию, заявленному в Git (выполняется с помощью агента GitOps, такого как Flux).