Появление облачных вычислений сильно изменило способы размещения и доставки ПО. Практически для всего, что нам сегодня нужно, существуют веб-сервисы — это касается и сферы торговли, и инфраструктуры вычислений. В этой статье мы рассмотрим, как технологии облачных вычислений, в частности, системы IaC (Infrastructure as Code) и контейнеры, могут быть полезны для непрерывной интеграции, доставки и развертывания.
Может быть, вы настраиваете CI/CD-пайплайн впервые, или же, напротив, у вас уже есть развернутая локально система — понимать, как вам могут пригодиться эти техники и инструменты, одинаково полезно всем.
Задача непрерывной интеграции и развертывания — сделать процесс выпуска ПО более эффективным и устойчивым.
Если автоматизация сборки, создания окружений и тестирования сопровождается практикой «небольших и частых изменений», вы сокращаете задержку между разработкой и релизом, а также можете быть увереннее в качестве продукта.
Более поздние стадии CI/CD-процесса, как правило, включают сквозное тестирование и тестирование производительности, для которых нужны окружения, довольно точно повторяющие продакшн. Чтобы тестирование было максимально эффективным и соблюдало консистентность, эти окружения должны обновляться автоматически, а не вручную. Чтобы реализовать это, нужны не только навыки и инструменты DevOps, но и много инфраструктуры, которая бы обеспечила необходимые вычислительные мощности для CI-сервера, билд-агентов, тестовых окружений и хранилищ данных.
То, сколько вашему пайплайну сборки потребуется устройств, зависит от объема и сложности вашего проекта и от количества вовлеченных разработчиков. Также число устройств может меняться со временем.
Если вы сами размещаете и поддерживаете инфраструктуру CI/CD-пайплайна, вам нужно понять, каков для вас баланс между достаточными мощностями, позволяющими в момент высокого спроса одновременно запускать несколько заданий, и расходами на покупку и поддержку устройств, которые большую часть времени будут простаивать. И в этом случае облачная инфраструктура может предложить ряд преимуществ.
Возможность размещать инфраструктуру в облаке породила совершенно новые способы управления ей.
Модель Infrastructure as a Service (IaaS) предполагает, что вычислительные ресурсы предоставляются через виртуальные машины или контейнеры. Если вам нужно больше мощностей, вы просто запрашиваете их (и вносите оплату) — вам не нужно заботиться ни о поставке, ни об установке и администрировании, ни об оборудовании.
Таким образом, организация не будет знать, на каких устройствах размещены используемые ей виртуальные машины и контейнеры (известно может быть лишь их территориальное расположение — в нормативных целях и на случай аварийного восстановления). И это существенно меняет мышление.
При размещении в облаке масштаб доступных вычислительных мощностей таков, что отдельные серверы можно считать взаимозаменяемыми и одноразовыми ресурсами — это так называемый «скот». Это совершенно противоположно традиционному размещению на серверах, которых необходимо содержать как домашних животных: их называют по имени, о них заботятся, когда они болеют, и, конечно, все надеются, что они проживут долго.
«Скотская инфраструктура» подразумевает, что любой сервер, которому требуется обновление или ремонт, просто заменяется на новый, соответствующий требованиям. Никто не тратит время и силы изменение или исправление существующих серверов — вместо этого достаточно заново настроить образ и развернуть новый сервер.
Подход IaaS (Infrastructure as a Service) подразумевает, что вы платите только за те вычислительные мощности, которыми пользуетесь, —включается то самое понятие «скота». И здесь в игру вструпает IaC (Infrastructure as Code). IaC — это DevOps-подход, при котором предоставление инфраструктуры осуществляется при помощи скриптов.
Все детали конфигурации прописываются в виде кода, и этот код хранится в системе контроля версий вместе с кодом приложения. Так вам больше не нужно вручную править окружения, и вы никак не нарушите консистентность.
Для инфраструктуры, как и для разрабатываемого приложения, можно иметь CI/CD-пайплайн, который будет подтверждать, что инфраструктура работает ожидаемым образом, и даст вам возможность легко отменять изменения при необходимости.
Кодирование инфраструктуры дает вам возможность больше автоматизировать. Окружения будут создаваться автоматически, как только вам это понадобится. Обновления будут также выполняться автоматически — при выходе новых конфигураций.
IaaS-провайдер фактически предоставляет вам неограниченные вычислительные ресурсы, а значит, вы можете выполнять масштабирование с гарантией того, что любой отказавший сервер будет сразу же заменен. Это значит, что ваш CI/CD-пайплайн сможет отвечать росту спроса и обеспечивать бесперебойную работу.
С IaaS и CaaS поддержка оборудования, включая логистику дата-центров и управление ресурсами сети и хранилища, осуществляется облачным провайдером (как часть предоставляемого ими сервиса).
Это освобождает вашу команду от дополнительных хлопот, позволяя ей сосредоточиться на оптимизации процессов пайплайна и обеспечении безопасности. Поскольку стоимость зависит и от процессорных мощностей, и от процессорного времени, стоит распараллелить задачи там, где это возможно, — так разработчики смогут получать результаты раньше, чем если бы меньшее количество машин выполняло работу дольше.
Контейнеры реализуют принципы IaC и позволяют еще более эффективно использовать облачную инфраструктуру. Контейнер предоставляет вашему приложению все зависимости, необходимые для выполнения. "А на моей машине работает..." — благодаря контейнерам все это уходит в прошлое, и вам больше не придется отыскивать отличия в конфигурациях. Docker — одна из самых популярных технологий, однако есть и другие.
Подобно виртуальным машинам, контейнеры позволяют запускать несколько приложений на одном сервере, при этом обеспечивая им полную изоляцию друг от друга. Однако в отличие от виртуальных машин, контейнерам не нужна операционная система, благодаря чему они весят меньше; также они не требуют постоянного закрепления за ними серверных ресурсов. В результате одно и то же устройство может вместить намного больше контейнеров, чем виртуальных машин, поэтому контейнеры идеально подходят для быстрого развертывания приложений в облачной инфраструктуре.
Используя контейнеры, вы упаковываете само приложение, зависимости среды и детали конфигурации в один артефакт, который можно развернуть на любом устройстве, предоставляющем среду запуска контейнеров.
Приложение может работать в нескольких контейнерах (как в случае микросервисной архитектуры). Эти контейнеры должны быть развернуты на одном и том же устройстве или на кластере сети устройств. Инструменты управления контейнерами, такие как Kubernetes, разрабатывались для того, чтобы облегчить работу с большим количеством контейнеров за счет автоматизации таких задач, как развертывание, администрирование и масштабирование.
Используя контейнеры в CI/CD-пайплайне, вы упростите процесс развертывания свежей сборки на разных его стадиях. Артефактом сборки выступает образ контейнера. Готовясь к релизу в продакшн, вы можете развернуть его на каждом тестовом окружении, соблюдая полную консистентность.
При размещении CI/CD-пайплайна в облаке контейнеры позволяют эффективно использовать вычислительные ресурсы и применять инструменты автоматизации. Когда спрос растет, вы можете увеличивать мощность, а когда спрос понижается — выключать контейнеры, освобождать всю задействованную инфраструктуру и таким образом сокращать затраты.
В дополнение к IaaS некоторые облачные провайдеры теперь также предлагают CaaS (Containers as a Service) — подход, который позволяет организациям делать развертывание внутри контейнеров без необходимости оркестровки и настройки кластера.
Размещение CI/CD-пайплайна в облаке дает ряд важных преимуществ, касающихся стоимости инфраструктуры, масштабируемости и надежности. Однако стоит отметить и несколько недостатков.
Во-первых, использование облачных сервисов, таких как IaaS и CaaS, неизбежно связано с кривой обучения. Если у вас нет опыта в этих областях, вашей команде понадобится время для освоения навыков, либо вам нужно рассмотреть способ внедрения этих знаний. Очень желательно иметь опыт работы с облачными технологиями, поэтому, предоставляя вашим командам возможность развивать эти навыки и использовать новейшие технологии, вы обеспечите себе преимущество при удержании и найме персонала.
Если вы разрабатываете ПО для облака и используете микросервисы, контейнеры и другие облачные технологии, автоматизировать процесс при помощи облачного CI/CD-пайплайна, использующего контейнеры, вам будет довольно просто. С другой стороны, если вы работаете с монолитной архитектурой, упаковать приложение в контейнер может быть довольно сложно.
Разумеется, в облачном пайплайне вовсе не обязательно использовать контейнеры — вы можете обойтись виртуальными машинами, размещенными в инфраструктуре облачного провайдера. С помощью них, вы сможете точно так же запускать сборки и обеспечивать консистентные пре-продакшн окружения для тестирования. Однако виртуальные машины требуют больше ресурсов, чем контейнеры, и вам придется отдельно настраивать окружения.
Коль скоро речь об облаке, время — деньги. Никому не хочется платить за простой вычислительных ресурсов. Чтобы размещение в облаке было выгодным, важно эффективно его использовать. А именно, пользоваться инструментами, которые отслеживают нагрузку и выключают неиспользуемые серверы (по прошествии тайм-аута), либо же самостоятельно реализовывать эту логику. Последнее требует навыков, которых в вашей организации может не быть, поэтому стоит исследовать и взвесить все возможности.
Размещение данных и сервисов в облаке всегда сопряжено с вопросами безопасности. Для некоторых компаний сама концепция размещения критического ПО на чужом оборудовании является неприемлемой. Тем не менее многие организации предпочитают использовать публичное облако для размещения как своих сервисов, так и пайплайнов развертывания — начиная с репозитория системы контроля версий, заканчивая CI-сервером и тестовыми окружениями.
Чтобы снижать риски, важно понимать возможные векторы атак, вводить меры по защите пайплайна, чтобы не дать злоумышленникам проникнуть через него в вашу систему, а также применять лучшие практики, касающиеся тестовых данных, управления учетными данными и контроля доступа.
Несмотря на то, что IaC, контейнеры и их оркестровка основаны на облачных технологиях, их можно использовать и в гибридной инфраструктуре.
Те же инструменты можно использовать в частном облаке и в локальной инфраструктуре, правда с одним «но» —появятся ограничения по масштабированию пайплайнов. Если ваша организация планирует в будущем перейти на облачную инфраструктуру, облачные инструменты лучше внедрить как можно раньше — так вы наберете больше опыта и легче осуществите переход.
Технология Infrastructure as Code имеет ряд преимуществ для непрерывной интеграции и развертывания в локальной инфраструктуре. К примеру, вы сможете гораздо быстрей настраивать новые окружения — для этого нужно всего лишь запустить скрипт.
Создание окружения при помощи скрипта также обеспечивает консистентность. Вы сможете быть уверенными, что ваше препродакшн-окружение совпадает с настройками в продакшне, и его можно спокойно использовать для тестирования безопасности, производительности и интерфейса или же в качестве песочницы для использования командой продаж. Если вы будете хранить конфигурационные файлы инфраструктуры в системе контроля версий, у команды появится контрольный журнал, позволяющий отслеживать, какие изменения были внесены и когда, — это может помочь вам при отладке ошибок окружения.
Иногда организации решают использовать облачные ресурсы лишь для определенных стадий пайплайна развертывания. Например, поскольку тестирование нагрузки и производительности требует значительных ресурсов, для их выполнения может быть выгоднее использовать временное окружение в облаке. Используя такой подход, важно учитывать, насколько сложным и длительным будет для вас переход на новую инфраструктуру.
Автоматизация CI/CD-процесса дает большие преимущества, касающиеся скорости доставки и контроля качества. Ограничивающим фактором может стать ваше оборудование (его скорость, пропускная способность). Перенося пайплайн в облако, вы можете больше не думать о том, как обеспечить достаточное количество серверов при пиковом спросе, учитывая при этом затраты на покупку и поддержку устройств, которые будут частично простаивать.
Технологии и практики сloud-native позволяют эффективно использовать облачную инфраструктуру, а также улучшают техники непрерывной интеграции и развертывания. Те же подходы можно применить и к локальной инфраструктуре — это поможет ускорить доставку ПО и повысить ее надежность.