Что такое DevOps?
DevOps - development & operations - это набор методик и инструментов для объединения процессов
разработки, тестирования, доставки релизов программного продукта и аспектов его эксплуатации
в единые автоматизированные циклы.
Проще говоря, DevOps сокращает дистанцию между разработчиками, которые пишут код, и системными
инженерами, которые доставляют этот код в тестовые и продуктовые окружения.
Зачем нужен DevOps?
Короткий ответ - для скорости и качества.
Несколько лет назад разработчик ПО приходил в трепет от слова "рефакторинг", системный администратор
планировал свою работу по принципу "работает - не трогай", менеджер проекта устанавливал жесткое требование -
никаких релизов в пятницу и перед майскими выходными, каждое изменение в большую монолитную архитектуру
становилось значительным событием. Между тем, условия высокой конкруренции выводят на первый план
скорость доставки новых возможностей продукта к пользователю.
DevOps призван стать этим конкурентным приемуществом.
Как это происходит?
Ключевое слово здесь - автоматизация.
Современный инструментарий позволяет автоматизировать почти любой этап на пути кода от разработчика к пользователю - от коммита
до масштабирования приложения.
Это и создание виртуальных или аппаратных ресурсов, и наполнение хостов нужным ПО, и автоматизация тестов и, собственно,
доставка кода в прод с контролем статуса выполнения любого из этапов.
Какие еще важные слова мне следует узнать?
Еще одни важные понятия: микросервисы и CI/CD - continuous integration & continuous
delivery - непрерывная интеграция/непрерывная доставка.
CI/CD pipeline - это стратегия или алгоритм, описывающий итерацию доставки новой версии кода в окружение.
Самый рядовой пример - разработчик производит коммит в git репозиторий, появление коммита служит
триггером для создания новой песочницы с нужным ПО, где производтся тестирование, и по результату тестирования новый код
доставляется в продуктовое окружение, создание которого тоже может быть автоматизировано.
То есть, можно говорить, что релиз новой версии приложения происходит по кнопке.
Дальше разработчики смотрят метрики и журналы работы приложения, которые тоже являются органичной
частью окружения.
Shut up and take my money! Сколько это стоит?
Хорошая новость - методология и большинство DevOps инструментов открыты и хорошо документированы.
Однако DevOps - это не коробка с надписью "Счастье", которую можно просто купить.
Очень часто выстраивание DevOps процессов начинается с глубокого переосмысления архитектуры
собственного программного продукта с последующей декомпозицией архитектуры на микросервисы.
Что такое микросервисы?
Микросервисы - это модульный подход к архитектуре программного продукта, когда компоненты архитектуры представляют
из себя компактные сервисы, выполняющие элементарные действия, общаясь между собой с использованием
легковесных REST или им подобных протоколов.
Ключевые плюсы микросервисных архитектур:
- отдельные компоненты проще обновлять
- архитектура перестает быть привязанной к единым требованиям, например, компоненты могут быть реализованы на разных языках программирования
- масштабировать микросервисы гораздо проще, чем монолитную архитектуру
Хорошо, я понял, а причем тут хостинг?
Подходы DevOps выдвигают свои требования к платформам для размещения приложения в сети.
Часто при описании методик DevOps приводится концепция Pets vs. Cattle - пример,
сравнивающий домашних питомцев и животных в больших стадах.
Этот пример нагрядно демонстрирует разницу в отношении хозяев к предмету своей заботы.
В первом случае каждый домашний любимец получает собственное забавное имя, для своего владельца
он единственный и неповторимый. Во втором случае технологичность сразу становится
очевидной необходимостью.
Так же дело обстоит и с разницей между ручным управлением железным или виртуальным сервером(VDS/VPS) и
автоматизированным окружением с большим количеством хостов. Если раньше системный администратор каждому серверу давал название
по имени персонажа из греческой мифологии, вручную настраивал ПО, то в масштабах десятков и сотен хостов
такой ручной подход уже плохо работает.
В контексте такого сравнения также упоминаются Snowflakes vs Phoenixes - уникальные и неповторимые снежинки и
фениксы, которые могут быть воссозданы в их прежнем виде.
Сейчас DevOps инженер должен иметь возможность оркестровать ресурсы - шаблонизировать и автоматизировать не только установку
самих хостов, но и их внутренее наполнение, причем с возможностью точно знать статус запрошенной операции, а
также возможность быстрого пересоздания или удаления ресурсов, которые больше не нужны.
Наш хостинг предоставляет услуги на платформе Openstack, который имеет стандартизированный API, командный
интерфейс и полностью отвечает потребностям DevOps.
Кроме того, сетевая инфраструктура наших виртуальных датацентров снимает необходимость
конфигурировать сеть непосредстенно на виртуальных серверах, как локальную сеть(учетом и
конфигурированием сети занимается виртуальный DHCP сервер), так и внешние IP адреса (подключаемые
плавающие IP адреса).
А кто такой DevOps инженер?
Это специалист, который конфигурирует и сопровождает DevOps инструментарий, тем самым
обеспечивая реализацию подходов DevOps. Как правило, эту роль берут на себя системные инженеры/администраторы,
иногда разработчики.
С DevOps подходами разобрались, а какой DevOps инструментарий существует и для чего?
Расскажем о некоторых.
Gitlab - система хранения исходного кода, которая умеет CI/CD автоматизацию и интеграцию с
другим DevOps инструментами.
Jenkins - мощный инструмент для реализации CI/CD процессов.
Terraform - популярный инструмент для деплоя и сопровождения окружений, умеет подключения к облачным провайдерам,
использует собственный декларативный язык HCL.
Ansible - мощная система централизованного управления конфигурациями серверов, умеет
подключаться к облачным хостинг-провайдерам, достаточно легко осваивается, использует синтаксис YAML и Jinja2.
Docker - популярный инструмент для создания и запуска Linux контейнеров, который позволяет обеспечить одинаковую работу
контейнеров и на локальном хосте, и в облачном окружении.
Kubernetes - мощная система для оркестрации контейнеров.
Все перечисленные инструменты вы можете установить на нашем хостинге в 1 клик, используя
шаблоны окружений, и автоматизировать с их помощью
процессы разработки, деплоя и эксплуатации вашего продукта.