Пару лет назад мы были в середине огромного проекта, что требовало жесткую мощность обработки. Мы полагались на Red Hat OpenShift в качестве платформы контейнеров (мы все еще делаем:), и как спрос на потенциал, нам пришлось периодически добавлять новые рабочие узлы.
Добавление новых рабочих узлов было ветером, но чаще всего, чем наши приложения не удалось сжиматься на этих новых узлах по разным причинам, которые все сводится к чему-то глупому, как отсутствуют некоторые свойства конфигурации. Очень скоро нам стало ясно, что нам нужен механизм для создания желаемое состояние. И вот где концепция инфраструктуры как код идеально подходит.
Инфраструктура в качестве кода представляет собой механизм создания и обслуживания инфраструктуры времени выполнения на основе определения, обычно хранящегося в системе управления версией.
Основная идея здесь заключается в том, что инфраструктура во время выполнения может быть определена с помощью машиночитаемых файлов, которые могут быть сохранены и версистыми, очень похожи на обычный исходный код. Если вы можете создать конкретную версию приложения на основе исходного кода в системе управления версией, почему бы вам не сможете сделать то же самое с вашей инфраструктурой — обеспеченностью конкретной инфраструктуры на основе файлов определения в вашей системе управления версиями.
Перед инфраструктурой в качестве кода наши узлы (хотя должны быть идентичными) были довольно уникальными, потому что настройка узлов была человеческой задачей. С помощью документации конфигурации разбросаны на несколько файлов Wikis и Word, и люди не являются сценариями Shell (поэтому забывают вещи), каждый теперь, а затем кто-то бросил мяч и забыл установить некоторые свойства. По сути, наши узлы оказались Снежинки — Каждый очень уникальный и с тонкой конфигурационными различиями, которые не были видны невооруженным глазом, но тем не менее заставляли наши приложения потерпеть неудачу по конкретным узлам … ни в одной особой причине … по крайней мере, это казалось так.
Инфраструктура в качестве кода заботится о том, что конфигурация инфраструктуры четко определена в системе управления версией и последовательно применяется к инфраструктуре. Изменения в инфраструктуре выполняются исключительно через запросы на тягу в системе управления версией. Нужен дополнительный процессор для вашего приложения? Не беспокойтесь, просто сделайте это изменение в файле конфигурации и сделайте запрос на тягу. Когда кто-то одобряет запрос на тягу, изменение будет объединено в багажник, и процесс будет инициирован для предоставления новой конфигурации инфраструктуры — новое желаемое состояние.
Для инфраструктуры в качестве кода для работы там должен быть способ Полностью автоматизировать задачи. Это где различные инструменты пригодны. Каждое публичное облако имеет свой собственный аромат: AWS CloudFormation, Manager Azure Resource Manager и менеджер по развертыванию Google облака, чтобы назвать некоторые. Другие популярные инструменты включают террафору, неизбежные и так далее.
Кроме того, автоматические задачи должны быть idempotent Это означает, что они могут быть выполнены несколько раз с тем же эффектом, поскольку они были выполнены только один раз. Это гарантирует, что полная конфигурация может быть применена снова и снова, не боясь сломать что-то. IDEMPOTENT операции резко упрощают реализацию, поскольку нам не нужно заботиться о состоянии (I.E. Запись, которые были изменены/сценарии уже выполнены и должны быть опущены из будущего выполнения).
Инфраструктура в качестве кода является такая мощная концепция, которая позволяет нам добавлять новые кластерные узлы, которые идентичны другим, а также создавать целые новые среды, которые являются племенными изображениями продукции. И когда что-то идет ужасно неправильно, кластеры могут автоматически воссоздать одинаковую конфигурацию как старые. Помните, что аналогия с домашними животными и скотом? Правильная работа восстановления-от резервного копирования требуется много времени. Обычно проще и намного быстрее просто отбросить весь кластер и восстановить его с нуля. Это, если честно, то, что мы будем делать с полноценными серверами приложений и другим тяжелым временным средам времени выполнения, если у нас был быстрый и надежный процесс восстановления.
Исторически инфраструктура в качестве узора кода обратилась только к управляющей инфраструктуре в центрах обработки данных, таких как серверы и параметры сети. Но в темноге произошло две вещи: Git стал преобладать систему управления версией, а во-вторых, с подъемом облака, дополнительный уровень абстракции, накапливаемый в виде контейнерового оркестрататора, в частности, kubernetes.
Поскольку IAC был такой полезным рисунком, не было бы остынет, чтобы продлить его таким образом, чтобы он использовал GIT в качестве системы управления версией и управляет не только основными серверами, но и экземпляром Kubernetes? И, вуаля, гитапы возникли.
Как и IAC — это шаблон, который управляет инфраструктурой, Gitops — это шаблон, который управляет экземпляром Kubernetes И обрабатывает задачи, такие как настройки пространств имен, пределы и квоты, контролирующие количество экземпляров контейнеров и так далее. Как говорит название, Gitops использует Git как единый источник правды Для управления экземпляром Kubernetes. Быть контейнером- и облачными носителями, гитапп идеально подходит для современных архитектур и современных технологических технологий. Используя GitOps, вы можете воссоздать кластер Kubernetes, настроив все пространства имен, пределы и квоты и повторный развертывающую все контейнеры. На нажатии кнопки вы можете обойти все вниз и воссоздать идентичное состояние как раньше.
Люди часто спрашивают В чем разница между IAC и Gitops. Это не простой вопрос. IAC — это система контроля версий агностическая. Гитопп, с другой стороны, использует только git. IAC сделки только с базовой инфраструктурой. Гитопы фокусируются на управлении экземпляром Kubernetes выше. Значит ли это, что гитаппы не должны также управлять инфраструктурой? Нет, почему бы не гитапп также управлять инфраструктурой?
Мы можем смотреть на Gitops как «делать OPS», используя Git для хранения конфигураций. Уведомление здесь, как «Doing Ops» не ограничивается только управляющими серверами или только для управления экземпляром Kubernetes. Мы можем посмотреть на это целостко, как управлять тем, что нужно. В этом смысле мы можем посмотреть гитапу в качестве более конкретной реализации шаблона IAC.
В последнее время мы использовали CD ARGO для реализации гитапсов и в восторге от того, насколько плавно работает. Денис написал хорошую статью о ARGO CD И я тепло предполагаю, что вы прочитали это.
Инфраструктура как код и гитаупс работает лучше всего! Преимущества огромные:
- Скорость, Поскольку установка и настройка экземпляра Kubernetes может быть автоматизирована.
- Консистенция, Поскольку все экземпляры всегда строятся и настроены с использованием той же процедуры и той же входных параметрах.
- Аудит, Поскольку все изменения выполняются через конфигурацию, хранящуюся в системе управления версией, легко выяснить, кто сделал особое изменение.
- Прослеживаемость, Снова все изменения выполняются через конфигурацию, хранящуюся в системе управления версией, легко выяснить, как система завершилась в текущем состоянии.
- Самоустройство и разработчик, ориентированные, Поскольку изменения в инфраструктуре могут быть сделаны даже разработчиками … в отличие от только операций. С другой стороны, мы не хотим анархии … Вот почему мы используем запросы на тягу, что кому-то нужно одобрить.
- Разработчики могут развиваться (а более позднее устранение неполадок) в среде, одинаковую для производства. Разработчики любят это.
- Курсы обратной связи короче, поскольку QA может быть сделано в среде, идентичной продукции. Проблемы пойманы перед производством.
- Производительность и стресс-тесты также имеют смысл только при выполнении в среде, одинаковую для производства
Если вы заинтересованы в получении интервью с лидерами мысли и дайджестом захватывающих идей из мира DevOps прямо к вашему входящику, Подписаться на наш новостной рассылку 0800-DEVOPS!
Оригинал: «https://dev.to/ikrnic/infrastructure-as-code-vs-gitops-1cp9»