21 февраля 2025

Блог

DevOps и инфраструктура

DevOps: наши лучшие практики в разработке

Не будет преувеличением сказать, что DevOps – один из ключевых элементов успеха ИТ-продукта в условиях конкурентоспособного, быстро меняющегося рынка. В этом материале мы расскажем о некоторых практиках, которых придерживаются наши DevOps-инженеры.

Введение

DevOps – это подход, который помогает командам разработчиков и специалистов по эксплуатации работать вместе, чтобы создавать, тестировать и запускать программное обеспечение быстрее и надежнее. Если говорить простыми словами, DevOps объединяет людей, процессы и технологии. Его главная цель – сократить время между написанием кода и его запуском в реальной работе, улучшая качество продукта и делая систему более устойчивой.

В современном мире компании стремятся выпускать обновления как можно чаще, при этом избегая сбоев и ошибок. Именно здесь на помощь приходят лучшие практики DevOps. Они помогают автоматизировать рутинные задачи, контролировать качество на каждом этапе и быстро реагировать на непредвиденные ситуации. Ниже мы расскажем о ключевых практиках, опишем, какие проблемы они решают, и какие инструменты используем в своей работе мы, компания True Engineering.

Непрерывная интеграция (CI)

Непрерывная интеграция – это процесс, при котором каждый раз, когда разработчик вносит изменения в код, система автоматически собирает и тестирует его. Это позволяет выявлять ошибки на раннем этапе, пока они еще не превратились в большие проблемы и их можно легко исправить. Кроме того, непрерывная интеграция позволяет всем разработчикам работать с одной общей версией кода, что уменьшает риск конфликтов и сложностей.

В своей работе для организации непрерывной интеграции мы используем AzureDevOps и GitLab CI, в которых происходят автоматические сборки и тестирование нового кода.

2. Непрерывная поставка (CD)

Непрерывная поставка – это дополнение CI (часто их называют вместе CI/CD), при котором после успешного тестирования код автоматически разворачивается на тестовых (а иногда даже на продуктовых) серверах. Непрерывная поставка позволяет снижает риски появления больших проблем, так как небольшие обновления легче тестировать и, если что, быстро откатить. Также постоянное обновление продукта позволяет пользователям получать новые функции и исправления быстрее и чаще, что позволяет быстрее получать обратную связь и реализовывать новый функционал.

Для реализации непрерывной поставки мы также используем AzureDevOps и GitLab CI, позволяющие автоматизировать полный процесс развертывания кода на любую платформу – на виртуальные машины, в k8s, в облачную инфраструктуру.

3. Автоматизация процессов

Автоматизация – это использование программ и скриптов для выполнения повторяющихся задач вместо того, чтобы делать их вручную. Это помогает снизить количество ошибок и ускорить работу команды, дает более предсказуемые результаты за счет того, что процессы выполняются каждый раз одинаково, высвобождает больше времени на творческую работу.

Мы используем для автоматизации как общедоступные инструменты, такие как Ansible и Terraform, так и свои скрипты, которые мы пишем по большей части на Python.

4. Управление конфигурацией и Infrastructure as Code (IaC)

Infrastructure as Code (IaC) – это, по сути, часть предыдущего пункта (автоматизации процессов), но крайне важная часть, заслуживающая отдельного упоминания. IaC - это метод, когда инфраструктура (серверы, базы данных, сети) описывается в виде кода. Это позволяет быстро развертывать и изменять окружения, позволяет получать предсказуемую инфраструктуру, точную копию production-среды для разработки. Кроме того, использование IaC добавляет все преимущества контроля версий – все изменения в инфраструктуре фиксируются в коде и видно историю этих изменений.

Для реализации подхода IaC мы используем уже названные Ansible и Terraform, которые отлично дополняют друг друга.

5. Контейнеризация и оркестрация

Контейнеризация – это технология, которая позволяет упаковать приложение со всеми его зависимостями в единый контейнер, который можно запустить в любой инфраструктуре. Оркестрация – это управление этими контейнерами в большом количестве, чтобы они работали согласованно и надежно. Главные преимущества такого подхода - приложение в контейнере работает одинаково в любом месте – от локальной машины до облака, контейнеры можно быстро дублировать при увеличении нагрузки. Системы оркестрации, в свою очередь, предоставляют стандартизированный подход к управлению этими контейнерами, к тому, как контейнеры между собой взаимодействуют, предоставляют систему разделяемого доступа и гибкие возможности публикации сервисов.

В своей работе для большинства приложений мы используем Kubernetes в разных его видах (как сам по себе, так и OpenShift). Все инженеры DevOps в нашей компании проходят сертификацию Certified Kubernetes Administrator (CKA) от CNCA. Для шаблонизации манифестов и управления пакетами у нас Helm, для хранения готовых образов – Harbor. Для работы некоторых инфраструктурных statefull-сервисов мы также используем Docker и Docker-compose.

6. Мониторинг и логирование

После того как приложение заработало на всех средах, работа DevOps не заканчивается. Необходимо обеспечить надежность и безопасность этой работы.

Мониторинг – это постоянное наблюдение за работой приложений и серверов. Логирование – это сбор информации о событиях, происходящих в системе. Вместе они помогают понять, как работает система, и быстро находить ошибки. Если что-то идет не так, система сразу сигнализирует об этом, а логи помогают понять, почему произошла ошибка, и как ее исправить.

Для мониторинга и логивания мы используем целый стек инструментов – ELK (Elasticsearch, Logstash, Kibana) для сбора и анализа логов, Zabbix, Prometheus, VictoriaMetrics и Grafana для мониторинга и визуализации системных, технических и бизнес метрик, а также для оповещения в случае проблем.

7. Внедрение безопасности (DevSecOps)

Все важнее и важнее с каждым годом становится обеспечение безопасности работы приложений. DevSecOps – это интеграция мер безопасности в каждый этап разработки и эксплуатации. Вместо того чтобы добавлять защиту после завершения разработки, безопасность становится частью каждого процесса.

 Автоматизированные проверки помогают обнаруживать проблемы с безопасностью на ранних этапах и минимизировать количество уязвимостей. При каждом обновлении кода система автоматически сканирует его на наличие известных уязвимостей. Если обнаружена проблема – разработчик получает уведомление и может быстро исправить ошибку, прежде чем она попадет в основную ветку кода.

Здесь нам помогают такие инструменты как GitLeaks, проверяющий код на наличие утечек данных, SonarQube, производящий анализ кода на наличие уязвимостей и Trivy, тестирующий итоговые docker-образы.

8. Прозрачность и совместная работа

Одна из ключевых идей DevOps – это культура сотрудничества. Это означает, что разработчики, администраторы и другие участники команды работают вместе, делятся информацией и помогают друг другу. Все участники процесса знают, что происходит в системе, и могут оперативно решать проблемы. Совместная работа позволяет быстрее реагировать на изменения и инциденты.

Ежедневно мы проводим короткие daily-митинги, на которых обсуждаем текущие задачи, делимся проблемами и планируем дальнейшие действия. Это помогает быстрее выявлять и устранять ошибки.

9. Документация и обучение

Чем больше и сложнее становятся системы, тем важнее становится сбор всех знаний, описаний процессов, конфигураций и инструкций в одном месте. Новые сотрудники могут быстро ознакомиться с проектом, а существующие – найти нужные инструкции. Хорошо задокументированные процессы помогают быстрее решать проблемы и внедрять новые технологии. Важным процессом для роста сотрудников компании является сертификация по продуктам, которые мы используем (Linux, Kubernetes, Terrafom). Обучение помогает оставаться в курсе новых технологий и улучшать свои навыки.

Будущие тенденции в DevOps

Развитие технологий не стоит на месте. Главные тенденции, которые уже сейчас заметны в нашей компании и в целом в индустрии:

  • Интеграция искусственного интеллекта: Автоматизированные системы смогут предсказывать сбои, оптимизировать процессы CI/CD и автоматически исправлять ошибки. 
  • Развитие GitOps: Управление инфраструктурой через Git станет стандартом. Git станет главным источником правды, а все изменения будут проходить через систему контроля версий. 
  • Усиление безопасности: Системы безопасности будут использовать машинное обучение для быстрого обнаружения аномалий и угроз. 
  • Больше облачных решений: Переход на облачные сервисы будет только ускоряться, а инструменты для работы с облаками будут интегрированы в общую экосистему DevOps. 

Сегодня мы уже видим, как системы мониторинга начинают использовать алгоритмы машинного обучения для предсказания сбоев. В будущем эти системы станут еще умнее, а автоматизированное исправление проблем будет происходить почти без участия человека.

 Заключение

DevOps – это не просто набор инструментов, это целая культура, направленная на постоянное улучшение процессов разработки и эксплуатации. Лучшие практики DevOps помогают:

  • Автоматизировать рутинные задачи; 
  • Быстро обнаруживать и исправлять ошибки; 
  • Создавать стабильные и масштабируемые инфраструктуры; 
  • Повышать безопасность и качество выпускаемого программного обеспечения. 

Использование таких инструментов, как Kubernetes, Helm, GitLab, AzureDevOps, Harbor, ELK, Grafana, VictoriaMetrics, Ansible и Terraform, позволяет нам выпускать и поддерживать наши сервисы быстро и надежно, иметь стабильную и повторяемую инфраструктуру, следить за ее работой и быстро реагировать на нештатные ситуации. При этом культура открытости, совместной работы и постоянного обучения играет не менее важную роль.