Методология и принципы DevOps
9
10521
4 сентября 2020 12:24
4/09/2020
Visitors have accessed this post 10521 times.
«Когда ты это выяснишь, юный Билл, ты сможешь осознать Три Пути, – говорит он. – Первый Путь помогает нам понять, как наладить быстрый поток работы, соединяющий отдел разработки и IT-сопровождения, потому что именно он лежит между бизнесом и клиентами. Второй Путь показывает нам, как сократить и усилить цикл обратной связи, чтобы можно было сразу фиксировать качество и избегать ненужных переделок. И Третий Путь показывает нам, как создать культуру постоянного эксперимента, как учиться на ошибках и понять, что повторение и практика – это то, что ведет к настоящему мастерству» (из книги «Проект «Феникс». Роман о том, как DevOps меняет бизнес к лучшему»).
Эта цитата прекрасно иллюстрирует самую суть DevOps. Но давайте разберем, как появился DevOps и что такое методология DevOps.
Немного из истории DevOps
DevOps как отдельная дисциплина (и как термин – Development + Operations = DevOps) появился в 2009 году после первой конференции DevOpsDays, организованной бельгийским разработчиком Патриком Дебуа (хотя, нужно сказать, что некоторые источники считают, что DevOps появился еще в 2008, а после конференции получил широкое распространение). На конференции собрались сисадмины, разработчики, менеджеры и системные программисты со всего мира. Идея DevOps, предлагающая новый порядок взаимодействия команд разработки, тестирования и внедрения, пришлась им настолько по вкусу, что вместе с ними она разлетелась и начала транслироваться по всей планете.
Что интересно, DevOps появился не с подачи крупного вендора, а по сути, родился из потребностей практиков – системных администраторов, разработчиков, менеджеров проектов. Благодаря этому, DevOps постепенно стал достаточно массовым движением в сфере ИТ.
Идеологи DevOps тратили много времени и сил на его описание и обсуждение. Но они столкнулись с недостатками общепринятых ИТ-инструментов, с которыми им приходилось работать. Так появилось поколение новых инструментов, которые позволили формализовать так называемые best practices (лучшие практики), таких как puppet, chef, vagrant, Jenkins и т.д.
Однако популярным DevOps стал не сразу. В 2011 году о нем как о перспективном и, возможно, интересном для крупного бизнеса направлении упоминает в своей презентации аналитик Gartner Кэмерон Хейт. Вскоре после этого и возникает всплеск интереса к DevOps у корпораций и крупных вендоров, которые начинают спешно осваивать передовые методики DevOps.
Принципы DevOps
Ок, краткий экскурс в историю провели, а теперь давайте разбираться, чем же так хорош DevOps, помимо того, что он был создан практиками, а значит, для решения злободневных практических задач, которые перед ними стояли.
DevOps позволил убрать стену между отделами разработки и внедрения. Как результат, это упростило и ускорило процесс их взаимодействия, а значит, пошло на пользу и бизнесу, потому что эффективность процессов существенно возросла. В DevOps-культуре нет такого, что разработчики делают свою часть и их не слишком интересует, смогут ли ее запустить в продакшн системные администраторы. А системные администраторы, в свою очередь, вовсю «кроют» разработчиков, которые, по их мнению, передали им малопригодный к работе продукт.
В культуре DevOps каждый ответственен за конечный результат. А значит, возникающая проблема – общая, и каждый должен быть максимально заинтересован в ее устранении.
Повысить эффективность разработки и эксплуатации ПО помогает непрерывная интеграция и использование инструментов автоматизации. Но сам по себе DevOps, как дисциплина на стыке разработки, тестирования и эксплуатации, подразумевает не только определенные технологии и процессы, но и культуру взаимодействия в команде.
Итак, основные принципы DevOps:
- Автоматизация – автоматизируйте все, что возможно. Что невозможно, тоже. Чтобы все процессы по тестированию, сборке и развертыванию приложения, выкатке обновлений, сбору фидбека производились автоматически.
- Ускорение релиза, в том числе через упрощение процесса разработки. Этот принцип подчеркивает прямую связь идеологии DevOps с потребностями бизнеса – чем быстрей заказчик получит конечный работающий продукт, тем выше будет эффективность и конкурентоспособность его бизнеса. Поэтому DevOps активно использует best practices, которые помогают, например, усовершенствовать процессы мониторинга или сократить время, затрачиваемое на процессы доставки продукта пользователю.
- Получение быстрой обратной связи – именно DevOps-методология позволила ускорить этот процесс, а самое главное – по следам ОС от пользователей оперативно вносить корректировки в продукт и производить его обновления.
- Наличие стандартов. Для DevOps важно наличие темплейтов и стандартов настройки и использования тех или иных инструментов. Благодаря этому, сложный процесс, задействующий одновременно разработку, тестирование и эксплуатацию, не превращается в «хаос», а напротив, получает возможности для автоматизации каждого этапа.
- Непрерывное тестирование. Процесс запуска непрерывных security-тестов позволяет полностью контролировать процесс и оперативно реагировать на возникающие проблемы.
DevOps часто рассматривается с точки зрения некоторого совпадения идеологии с подходом к разработке Agile. Но в нашем случае этот подход масштабируется не только на разработку, но и на эксплуатацию и тестирование. Тут можно выделить ряд принципов, которые DevOps заимствует из Agile. Кстати, описанный выше принцип автоматизации тоже восходит к Agile.
5 принципов, заимствованных из Agile (CALMS)
- Культура – так как DevOps подразумевает определенную культуру взаимодействия разных подразделений – разработки, тестирования, эксплуатации;
- Бережливость – тут подразумевается бережное отношение к процессам и времени, затрачиваемому на них, а значит, отказ от действий с низкой эффективностью, постоянный поиск методов для улучшения производительности и ускорения процессов, оперативное обнаружение и решение проблем.
- Измерения – цифровые показатели и критерии для оценки работы очень важны в DevOps.
- Обмен – это пункт про совместную ответственность нескольких команд за жизнедеятельность продукта.
- Автоматизация – о принципе «Автоматизируйте все» мы уже рассказали чуть выше.
Методы DevOps и инструменты их реализации
Хотя методология DevOps была создана в большей степени именно разработчиками, в ее распространении сыграли не меньшую роль и системные администраторы, так как предложенный инструментарий был направлен в том числе и на повышение эффективности их работы. DevOps существенно видоизменил их работу и зону ответственности в целом.
До этого перед системными администраторами стояла задача по поддержке большого числа разнообразных приложений, а значит, выполнения для каждого из них большого количества работ – нужно было настраивать базы данных и сервера, балансировать нагрузку, управлять безопасностью и т.д., и т.п. Конечно, с появлением DevOps эти задачи никуда не исчезли. Но DevOps предложил инструментарий, который позволил стандартизировать процессы настройки, развертывания и запуска приложений.
До появления методологии DevOps процесс разработки и последующего развертывания ПО представлял собой достаточно строгую последовательность – собственно, разработка, тестирование, ввод в эксплуатацию. Подход DevOps стал неким буфером, который позволил разработчикам и специалистам по эксплуатации как работать в более тесном сотрудничестве, так и меньше зависеть от проблем и особенностей деятельности друг друга. А появление инструментов DevOps как некой совместной экосистемы и вовсе стерло четко существовавшие до этого грани между разработкой и эксплуатацией.
В течение всего жизненного цикла приложения в DevOps применяются на разных этапах конкретные методики, которые либо автоматизируют и ускоряют конкретный этап, либо позволяют создать целостный продуктивный процесс, охватывая сразу несколько этапов.
Непрерывные интеграция и доставка (CI/CD)
При помощи непрерывной интеграции разработчики имеют возможность оперативно добавлять изменения в основной код. Он сразу же автоматически тестируется, что повышает стабильность работы приложения.
При непрерывной доставке новые версии регулярно автоматически разворачиваются в продакшн. за счет автоматизации этой операции возможны более частые обновления.
То есть, CI/CD позволяет автоматизировать все действия от фиксации кода до развертывания его в продакшн. Это позволяет сократить временные и трудозатраты на рутинные операции и ускорить процесс развертывания кода с минимальными рисками.
Управление версиями
В методике управления версиями отслеживаются все исправления и изменения кода, что помогает упростить процесс его анализа и восстановления в случае ошибок. Системы управления версиями позволяют команде разработчиков совместно создавать код, обеспечивая объединение его изменений в файлах, разрешение конфликтов и, в случае необходимости, откат к более ранним версиям. Таким образом задачи по написанию кода делятся между командами, весь код можно восстановить в случае проблем, это существенно ускоряет разработку.
Гибкая разработка программного обеспечения
В этой методике очень важная совместная работа разных команд, получение оперативной обратной связи от пользователей и адаптация к коротким циклам выпуска ПО. Это позволяет учитывать пожелания клиентов и быстро вносить изменения в приложения.
Инфраструктура как код
В этой методике системные ресурсы описываются как код, что помогает разворачивать среды разработки, тестирования и эксплуатации оперативно, предсказуемо и надежно. Снижает риски ошибок, связанных с человеческим фактором.
Управление конфигурацией
Эта методика позволяет управлять состоянием ресурсов (серверов, виртуальных машин и баз данных) в системе. При помощи определенных инструментов DevOps-инженер может разворачивать изменения контролируемо и систематически, при этом сведя к минимуму риски изменения конфигурации. А также отслеживать актуальное состояние системы и любые изменения\отклонения в конфигурации от нужного ее состояния.
Используя эту методику вместе с IaC, возможно автоматизировать настройку любой, самой сложной, системы.
Непрерывный мониторинг
Методика подразумевает отслеживание в реальном времени производительности и работоспособности приложения. Для этого автоматически собираются определенные показатели телеметрии и метаданных, а также настраиваются оповещения об отклонениях в работе приложения.
Эта информация помогает решать возникающие проблемы очень оперативно и помогает понять, что можно улучшить в будущих циклах разработки.
Таким образом, в ведении DevOps-инженера часто оказываются следующие процессы (хотя тут можно выделить несколько самостоятельных профессий — инженер по автоматизации, release инженер, security инженер и др.):
- Работа с кодом в части его анализа и контроля версий, а также написания скриптов (Code)
- Процесс непрерывной интеграции нового кода (Build)
- Процесс непрерывного тестирования с оперативной обратной связью (Test)
- Процесс установки приложений (Operate)
- Процесс автоматизации выпуска релизов, в том числе в части управления изменениями (Release)
- Процесс непрерывного развертывания, управление инфраструктурой как кодом (Deploy)
- Процесс непрерывного мониторинга работы приложения (Monitor)
В части решения этих задач в DevOps используется широкий перечень инструментов, например:
- Для планирования и оценки – JIRA.
- Для контроля версий — Git, Mercurial, хостинги GitHub / BitBucket / GitLab.
- Инструменты контейнеризации — Docker, rkt, CRI-O, Swarm, Nomad by HashiCorp, Kubernetes.
- Для сборки и тестирования приложения — Jenkins, TeamCity, GitLab CI, Bamboo.
- Для непрерывного развертывания и управления инфраструктурой как кодом — Puppet, Chef, Ansible, SaltStack.
- Для управление облачными ресурсами — Terraform.
- Для мониторинга и алертинга – Prometheus, Grafana, New Relic, DataDog, AlertManager, PagerDuty.
Надо сказать, что список постоянно расширяется и пополняется новыми инструментами, именно поэтому DevOps – это не статичная дисциплина, а постоянный путь самообразования и совершенствования как своих знаний, так и работы доверенных вам приложений.
Если вам интересно посещать открытые онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN. *Анонсы мероприятий каждую неделю
Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.
Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.