«– Мой код превосходен, а инфраструктура тормозит. А еще ваша сеть, кхм-кхм, работает так себе.
– Сеть работает отлично, задержка в пределах нормы, это вы там что-то понаписали»
– из разговора разработчика и системного администратора
До появления DevOps, подобное “перебрасывание мяча” от одного отдела к другому было обыденностью:
- у сетевого администратора не хватало компетенций и информации о том, как настраивать сервера для развертывания среды разработки;
- приходилось подключать для этого самих программистов;
- у которых, в свою очередь, не было исчерпывающих компетенций в инфраструктуре.
Бизнес такая картина не устраивала, и к моменту, когда time to market встал во главе бюджетов на ИТ, на стыке этих областей знаний появился DevOps-инженер – системный администратор, который понимает и инфраструктурную часть, и разработку.
Иными словами, DevOps – это новый виток эволюции админа, который умеет больше и, конечно, зарабатывает больше. Он значительно ускоряет релизы обновлений, открывает путь к легкому масштабированию и повышению надежности инфраструктуры и превращает разработку в полноценный “конвейер”.
Путь такой эволюции часто тернист. Рассмотрим, как пройти его без помех и овладеть инструментами DevOps-инженера.
Управление исходным кодом
На этапе старта обязательно знать 3 инструмента:
Git
Git позволяет отслеживать изменения в коде, совместно работать над проектами и управлять историей версий. Git обеспечивает эффективную работу в команде, возможность ветвления и слияния кода, а также возврат к предыдущим версиям при необходимости.
GitHub
Основные преимущества: высокая доступность и производительность своей инфраструктуры, понятный интерфейс с продвинутыми функциями, различные интеграции и хороший уровень безопасности.
Gitlab
Система поддерживает полный цикл разработки, включающий управление исходным кодом на Git, Continuous integration, Continuous Delivery, issue tracking. На одном Gitlab можно полностью вести разработку, «деплоиться» и прочее. Хорошей новостью для будущих DevOps стал открытый бета-тест Code Suggestions — ИИ-функции, помогающей разработчикам писать код. С помощью Code Suggestions пользователи могут генерировать фрагменты кода по текстовому описанию на естественном языке. К примеру, можно попросить написать шаблонный сниппет или тесты.
Контейнеры и контейнерная оркестровка
Контейнеры – это изолированные и легковесные пакеты, включающие приложения и их зависимости, например, библиотеки и конфигурационные файлы. Они могут быть запущены на любой платформе с контейнерной поддержкой.
Технология обеспечивает единообразное окружение для разработки, тестирования и развертывания приложений в разных средах. Ключевые инструменты:
Docker – это платформа, позволяющая упаковать приложения в легковесные, изолированные контейнеры, которые могут быть развернуты на любой платформе. Docker облегчает разработку, доставку и масштабирование.
Чтобы быстрее освоить инструмент, рекомендуем ознакомиться с подборкой из 21 исполняемой и информативной команды Docker.
Kubernetes – это система контейнерной оркестровки с открытым исходным кодом, которая обеспечивает автоматизированное развертывание и управление контейнеризированными приложениями. Kubernetes позволяет создавать и администрировать кластеры, обеспечивая автоматическое масштабирование, самовосстановление и балансировку нагрузки.
Helm – это пакетный менеджер для Kubernetes. Helm позволяет упаковывать приложения и компоненты инфраструктуры Kubernetes в управляемые чарты, которые легко устанавливать и обновлять.
Инфраструктура как код (IaC)
Это подход, при котором инфраструктура и ее конфигурация определяются и управляются через код. IaC позволяет автоматизировать процессы развертывания и управления инфраструктурой, а также обеспечивает повторяемость и масштабируемость. Наиболее популярные инструменты: Terraform, Ansible, Puppet и Chef.
Terraform позволяет определить инфраструктурные ресурсы в виде декларативного кода и автоматически развернуть их на облачных платформах или локальных серверах. Terraform обеспечивает повторяемость, масштабируемость и упрощает управление состоянием инфраструктуры. Овладеть инструментом быстрее поможет утилита для автоматизации и организации совместной работы с Terraform – terrakube.
Ansible – это инструмент для автоматизации конфигурации и управления серверами. Он позволяет определить и автоматически достичь желаемого состояния как локальных, так и удалённых систем.
44 совета по Ansible: рекомендации, Best Practices, подходы для работы с внутренними компонентами продукта – размещены здесь.
Puppet или Chef – это инструменты для конфигурационного управления и оркестрации серверов, обеспечивающие централизацию, масштабируемость и повторяемость процессов.
Процессы непрерывной сборки и доставки (CI/CD)
Continuous Integration/Continuous Delivery – это практика разработки ПО, которая включает автоматическую сборку, тестирование и развертывание приложений на протяжении всего жизненного цикла проекта. В DevOps необходимо знать CI/CD, чтобы ускорять процесс доставки приложений и снижать вероятность ошибок, позволяя командам быстро и безопасно вносить изменения. На практике используют:
Jenkins – это инструмент с открытым исходным кодом для автоматизации сборки, тестирования и развертывания приложений.
GitLab CI/CD позволяет разрабатывать, тестировать и развертывать приложения на основе репозиториев GitLab.
CircleCI – это облачная платформа CI/CD, которая предоставляет простые и гибкие возможности для автоматизации сборки и развертывания приложений.
Мониторинг и логирование
Мониторинг и логирование помогают обеспечить стабильность и производительность:
- отслеживая состояния системы, метрик, доступности и проблем с приложениями;
- собирая и анализируя записи о действиях и событиях.
Инструменты, которые DevOps должен знать:
Prometheus – популярная система мониторинга и сбора метрик, которая позволяет отслеживать состояние системы и приложений, а также предоставляет возможности алертинга. Полезное о Prometheus – Awesome Prometheus.
Grafana – инструмент для визуализации данных из различных источников, в том числе, Prometheus, и создания дашбордов для мониторинга производительности и состояния системы.
Nagios – система с открытым исходным кодом, которая предоставляет возможности для мониторинга различных ресурсов и служб, а также отправки оповещений о проблемах.
Резюме
Мы рассмотрели ключевые инструменты, которые необходимо освоить, чтобы стать DevOps. Но на этом путь не заканчивается – концепция напрямую взаимосвязана с такими понятиями, как Lean, ITIL и Agile. Как именно – рассказали тут. Об облачной “революции” в мире разработки – тут.
Также всё большую популярность набирает область DevSecOps, где безопасность и управление уязвимостями играют одну из ключевых ролей. О главном в защите приложений и управлении уязвимостями за 10 минут рассказали здесь. А о том, чему могут научить самые крупные кибератаки – здесь.
На “десерт” – Общий набор DevOps tools 2023:
Подробный список с описанием тут.