Инструменты DevOps
7
7648
16 октября 2020 9:04
16/10/2020
Visitors have accessed this post 7648 times.
Один из основных принципов DevOps – автоматизируйте все. Конечно, для автоматизации того широкого круга процессов, которые затрагивает методология, — разработка, тестирование, внедрение, внесение изменений – нужны эффективные инструменты. В этой статье мы рассмотрим, какие инструменты DevOps используются на разных этапах работы DevOps-инженера. Надо отметить, что этот перечень не является чем-то статичным, отнюдь. Ведь путь прогресса неотвратим – поэтому постоянно появляются новые методики и разрабатываются новые инструменты.
Планирование и оценка
Основной и самый широко используемый инструмент DevOps для планирования и оценки – это JIRA. Он позволяет отслеживать проблемы и ошибки и налаживать взаимодействие пользователей в рамках проекта.
Этот инструмент управления жизненным циклом приложений был разработан компанией Atlassian, поэтому он легко интегрируется с другими продуктами компании, например, с Bitbucket. Jira поддерживает основные типы баз данных (MySQL, Microsoft SQL Server, Oracle и др.) и веб-браузеров (Google Chrome, Internet Explorer, Firefox).
К числу преимуществ системы можно отнести простоту ее развертывания — как веб-приложения в Linux или Windows — и интуитивно понятный интерфейс. JIRA подходит для компаний любого масштаба – от маленьких до крупных. Кроме того, благодаря ее функциональной совместимости, можно «допилить» систему под свои потребности и создать на ее основе платформу любого уровня, даже в рамках корпорации.
Основным элементом учета в JIRA является задача или тикет. Именно в ней определяется проект, его содержание, приоритеты и компоненты. В тикет можно вносить изменения или менять статус. Все изменения сохраняются в журнале. Для каждого проекта можно определить свой тип задачи, статусы и workflow.
Контроль версий
Для контроля версий используются системы Git, Mercurial и хостинги GitHub / BitBucket / GitLab.
Git — это распределенная система контроля версий. Она позволяет обеспечить скорость разработки, при этом сохраняя целостность данных за счет поддержки распределенных рабочих процессов.
Это означает, что система сохраняет все изменения, которые вносятся в файлы, в виде снимков, так называемых коммитов. Благодаря этому, несколько человек могут одновременно работать в одном репозитории и вносить изменения. Так как коммиты сохраняются на разных серверах, в случае сбоя можно легко восстановить код или «откатить» систему до нужного состояния.
Mercurial – это консольная программа для распределенного управления версиями. Предназначена для работы прежде всего с очень объемными репозиториями.
Поддерживая весь основной функционал системы контроля версий (сохранение изменений, возможность распределенной работы), Mercurial предлагает еще и возможность полностью децентрализованной работы, без единого основного репозитория кода. Еще в числе важных особенностей Mercurial – возможности ведения нескольких веток проекта и копирования изменений между ними (ветвление), а также функционал, позволяющий проводить слияние репозиториев.
GitHub — платформа для размещения кода с возможностями контроля версий и совместной работы. Включает все функции Git и ряд дополнительных возможностей — контроль доступа, совместная работа, отслеживание ошибок, создание функций и запросов, управление задачами.
Bitbucket — веб-хостинговая платформа, разработка Atlassian, что позволяет просто интегрировать ее с другими продуктами Atlassian. Также легко интегрируется с такими инструментами DevOps, как Jenkins и Bamboo.
Bitbucket по своему функционалу аналогичен GitHub, также реализует функционал проверки кода, отслеживания изменений, предлагает возможности для совместной распределенной разработки и управление правами доступа на уровне отдельных ветвей проекта. Основан на системах контроля версий Mercurial и Git. База пользователей Bitbucket меньше, чем у GitHub. Но у него есть одно существенное преимущество – возможность бесплатного размещения приватных репозиториев с ограничением на размер команды до пяти человек. Поэтому Bitbucket предпочитают использовать небольшие команды разработки
GitLab — основной конкурент платформы GitHub, которая появилась на 3 года раньше (в 2008 году) и завоевала наибольшую популярность среди хостингов репозиториев. Но сегодня явно видна тенденция перехода команд разработки на GitLab, как более функциональное решение.
GitLab – это система управления репозиториями для Git с открытым исходным кодом. В ней реализованы собственная вики, отслеживание ошибок, CI/CD pipelines, функционал API, доски задач, возможность комментариев и ряд других функций. GitLab позволяет управлять публичными и приватными репозиториями, пользователями и их группами, назначать права доступа к репозиториям, разворачивать и анализировать код. Система может быть интегрирована с разными CI-системами (например, с Jenkins) или можно процесс непрерывной интеграции кода встроенными средствами GitLab.
Контейнеризация
Контейнеризация стала отличной альтернативой аппаратной виртуализации. Она позволила существенно сэкономить ресурсы и увеличить эффективность процессов разработки и эксплуатации приложений. С ней стало возможным упаковать приложение сразу со средой запуска, отсекая проблему зависимостей в различных окружениях.
Популярные DevOps-инструменты контейнеризации — (Docker, rkt, CRI-O) и системы оркестрации (Swarm, Nomad by HashiCorp, Kubernetes). Остановимся кратко на каждом из них.
Docker – это удобный интерфейс для работы с контейнерами. Его можно использовать на всех этапах работы с приложениями — при разработке, тестировании, ревью и эксплуатации. По сути, он ускоряет процесс настройки среды для приложения. Мы запаковываем приложение в образ и можем развернуть его, где угодно. То есть, отделить наше приложение от собственно инфраструктуры и одновременно управлять инфраструктурой как приложением. Docker позволяет запустить на одном хосте одновременно несколько контейнеров.
Главное преимущество Docker – это скорость. С Docker можно быстрей тестировать, быстрей выкладывать приложения, быстрей запускать и редактировать код.
Rkt (он же Rocket) — альтернатива Docker, созданная для серверных сред с более строгими требованиями безопасности и производительности. Используется вместе со спецификацией App Container.
CRI-O – еще одна альтернатива Docker, созданная при участии Red Hat, Intel, SUSE, Hyper и IBM. Подходит для запуска контейнеров в практически любой исполняемой среде при условии, что она совместима с OCI (в частности, это может быть runc или Clear Containers от Intel).
Kubernetes (он же K8s) – это, пожалуй, самый популярный сегодня оркестратор, система управления контейнерами. Если в рамках одной ОС вы можете справиться средствами, к примеру, Docker, то для запуска сервисов на нескольких серверах сразу или запуска нескольких тысяч контейнеров в сложном порядке без Kubernetes вам придется сложно. Kubernetes — это API высокого уровня, которое позволяет логически группировать контейнеры, балансировать нагрузку и определять для них размещение.
Основными преимуществами K8s являются гибкость и модульность. От позволяет запустить множество задач из тысяч приложений с любых хостов – тоже нескольких сразу. Модули инструмента можно комбинировать по-разному, сохранив при этом все его возможности.
K8s может работать в связке с другими инструментами контейнеризации, например, с Docker.
Kubernetes был создан Google как проект с открытым кодом больше 10 лет назад. Сегодня Kubernetes as a Service есть у всех крупных поставщиков облачных решений — Yandex, Google, AWS, Azure.
Swarm – это инструмент для кластеризации контейнеров Docker и объединения их в виртуальные хосты. Он был разработан позже, чем Docker, и стал часть его платформы. Так как у Docker Swarm есть удобный REST API-интерфейс, автоматически совместимый с API Докера, то пользователям Докера сразу же стали доступны инструменты для работы с кластерами контейнеров, без добавления дополнительных сущностей. Инструмент подходит для работы с ограниченным числом контейнеров (не более 50 000) и нод (не более 1 000), поэтому в большей степени ориентирован на малые и средние компании.
Nomad by HashiCorp – еще один инструмент оркестрации контейнеров, созданный компанией HashiCorp и любимый поклонниками их стека (Terraform, Vagrant). Поддерживает работу не только с Docker, но и другими инструментами контейнеризации. Позволяет поддерживать серьезные сетапы и многочисленные дата-центры. Отметим еще, что у этого инструмента очень качественная документация.
Сборка и тестирование приложений
Кратко остановимся на следующих инструментах для сборки и тестирования приложения — Jenkins, TeamCity, GitLab CI, Bamboo.
Jenkins — пожалуй, самый популярный сегодня инструмент для непрерывной доставки и интеграции кода с использованием контейнеров для сборки и развертывания. Jenkins — это проект с открытым исходным кодом. Он достаточно просто интегрируется с другими инструментами для тестирования и развертывания. Работает с системами управления версий Git, Mercucial, CVS, Subversion и другими. Возможности инструмента могут быть расширены при помощи плагинов.
Jenkins работает в контейнере сервлетов (к примеру, в Арасhe Tomcat), что позволяет расширить возможности сервера.
Может выполнять проекты Apache Ant, Apache Maven, пакетные файлы Windows и произвольные сценарии оболочки. Включает несколько способов запуска сборки — в порядке очереди по завершению другой сборки, по плану, по запросу, после фиксации изменений в системах управления версиями.
Bamboo — продукт от Atlassian для непрерывной интеграции. Его преимущество в том, что все функциональные возможности являются встроенными, не требуют дополнительной загрузки плагинов, в отличие от Jenkins. Удобен тем, что есть возможность простой интеграции с другими разработками Atlassian, в частности, с JIRA и Bitbucket. Также его можно использовать в облаке или установить на свои сервера.
TeamCity — это инструмент непрерывной интеграции от JetBrains на основе сервера, создающего инструмент для управления. Отличается удобным пользовательским интерфейсом. Этот инструмент умеет тестировать код перед коммитом. Благодаря удаленной сборке перед запуском, предотвращает запуск кода с ошибками, которые нарушают его сборку. В TeamCity есть функционал, который позволяет делать несколько сборок одновременно, при этом тестирование проводится на разных платформах и в разном программном окружении.
TeamCity может быть интегрирован с разными средами разработки — Eclipse, IntelliJ IDEA, Visual Studio. Поддерживает платформы Java, PHP, .NET и Ruby.
GitLab CI — инструмент для непрерывной интеграции при помощи образа Docker из Docker Hub. Это позволяет не беспокоиться об установке платформ типа Node.js, Ant, Maven на сервер, так как с GitLab CI мы можем ссылаться на любые зависимости, доступные на Docker Hub, без установки их на нашем сервере. В Jenkins, например, для получения аналогичной функциональности нужно будет установить дополнительный плагин.
Непрерывное развертывание и управление инфраструктурой как кодом
DevOps-инструменты для непрерывного развертывания и управления инфраструктурой как кодом — Puppet, Chef, Ansible, SaltStack.
Puppet — инструмент с открытым исходным кодом для управления конфигурацией. Позволяет настраивать, разворачивать и управлять парком серверов или компьютеров. В случае необходимости дает возможности для динамического масштабирования числа машин. Развивается в рамках концепции Infrastructure as a code. Создавалось, чтобы управлять конфигурацией ОС внутри сети.
Chef тоже предназначен для управления инфраструктурой и относится к проектам с открытым кодом. Может использоваться для сложных инфраструктур – с виртуальными, физическими или облачными машинами.
Надо сказать, оба вышеописанных инструмента – в числе «ветеранов» (выход первых версий — 2005 и 2009 годы). Они хороши в масштабировании, настроены на работу с клиент-серверной архитектурой. Но есть некоторые сложности в работе с ними для новичков, так как, например, шаблоны конфигураций нужно писать на Ruby.
Поэтому мы остановимся еще на более современных и простых инструментах для управления инфраструктурой.
Ansible — это инструмент с открытым исходным кодом для управления инфраструктурой и развертывания приложений. Позволяет автоматизировать как простые, так и многоуровневые ИТ-приложения. Ansible прост и в установке, и в использовании, даже для новичков. Шаблоны конфигураций пишутся в виде YAML-формата. Так как инструмент отличается безагентской архитектурой, вам не нужно будет заморачиваться с установкой клиентов на управляемых машинах — они взаимодействуют через SSH/PowerShell. Единственный недостаток Ansible в том, что он может не подойти для инфраструктуры, содержащей более тысячи хостов – может быть существенное падение скорости.
SaltStack — инструмент с открытым исходным кодом. Написан на python и пользуется push-моделью для выполнения команд по SSH. SaltStack может взаимодействовать с машинами и агентским, и безагентским способами. Поддерживает как горизонтальное, так и вертикальное масштабирование сети. Для записи скриптов используются YAML-шаблоны.
Из недостатков отметим, что у SaltStack не самая понятная документация.
Управление облачными ресурсами – Terraform
Для управления облачными ресурсами в DevOps традиционно используется Terraform, инструмент, разработанный компанией Hashicorp. Terraform позволяет настраивать, разворачивать, изменять, управлять версиями инфраструктуры. А значит, пользователь может легко вносить или отслеживать изменения в инфраструктуре.
Он достаточно несложный в установке и дальнейшей работе – инфраструктура для развертывания описывается в декларативном формате, проверяется при помощи команды terraform plan и запускается с terraform apply. В бесплатной версии Terraform отсутствует серверная часть, которая должна собирать логи, управлять и следить за выполнением процессов. В платной версии эта функциональность представлена.
Мониторинг и оповещения
Назовем лишь некоторые из современных решений для мониторинга и алертинга – Prometheus, Grafana, NewRelic, DataDog, PagerDuty.
Prometheus появился в 2012 году и сегодня стал уже практически стандартом для мониторинга. Так, его используют для своих систем мониторинга такие разработчики ПО, как DigitalOcean и Docker.
Prometheus – решение с открытым исходным кодом, в нем собраны самые разные экспортеры, которые позволяют быстро настроить мониторинг вашей инфраструктуры. Также возможна настройка многих дополнительных инструментов.
Prometheus может осуществлять мониторинг практически любых систем – от серверов и баз данных до отдельных виртуальных машин. Так как он способен обнаруживать целевые объекты, Prometheus отлично подходит и для решений с использованием контейнеров и распределенной архитектуры.
Grafana — это тоже решение из числа open source, предназначенное для отслеживания показателей инфраструктуры, приложения и аппаратных устройств. Grafana может получать информацию из разных источников, к примеру, из Prometheus или Elasticsearch. С ее помощью можно настроить визуализацию полученных данных и получение оповещений. Также есть возможность для создания и совместного использования панели инструментов.
New Relic — это SaaS-инструмент для мониторинга и анализа производительности приложений. В режиме реального времени собирает и представляет на диаграммах, графиках и отчетах актуальные данные о производительности веб-приложений и уровне удовлетворенности пользователей.
DataDog — это SaaS-платформа анализа данных, предоставляющая инструменты для мониторинга облачных приложений, серверов, баз данных. Может быть интегрирована с веб-серверами и другими приложениями. Позволяет визуализировать графики мониторинга инфраструктуры в реальном времени.
PagerDuty – платформа для обработки инцидентов с возможностями для интеграции и выставления нужных вам настроек. Может обрабатывать инциденты, устанавливать порядок дежурств и направлять алерт-сигнал дежурному по уровню срочности и важности инцидента. Об инциденте высокой важности инженер будет уведомлен звонком, в ином случае это будет push/SMS.
От редакции
Если вам интересно посещать открытые онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN. *Анонсы мероприятий каждую неделю
Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.
Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.