Найти в Дзене

Разбор DevOps RoadMap

Disclame

- Я не писатель, я читатель. Могу косноязычить и вообще писать с ошибками, но буду стараться прогонять тексты через словари и проверки стилей.
- Если что-то не понятно, можно спросить или уточнить. Общение вообще двигатель прогресса.
- Критика всегда приветствуется, но конструктивная. Я не гордый, если допустил ошибку могу и признать.
- Я не истина в последней инстанции. Так уж получилось, что человечество не стоит на месте и сказанное час назад может быть не верным. Буду стараться наиболее востребованные статьи держать актуальными.

Ну что ж, поехали!

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

Главная цель DevOps — обеспечить бесперебойную поставку ПО с помощью непрерывной интеграции рабочих процессов. При этом процессы разработки и развёртывания ускоряются и требуют меньше ресурсов, а компании экономя деньги, тем самым имеют возможность производить более качественные программные продукты.

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


Разбор DevOps RoadMap

В интернете есть множество статей и руководств как, что и в каком объеме необходимо изучить, чтобы привнести методологию DevOps в свой проект. Среди прочих выделяется ресурс [DevOps RoadMap](https://roadmap.sh/devops). Разберем эту дорожную карту.
Языки программирования

DevOps это чаще всего автоматизация, того что может быть автоматизированно. Я как-то раз услышал такую мысль: "Если тебе надо что-то сделать один раз - просто сделай это. Если надо сделать больше одного раза - автоматизируй." Это категоричное высказывание, но оно имеет под собой определенную боль. Потратить 1 час развернуть какой-то сервис или потратить 1 неделю на автоматизацию поднятия этого же сервиса. Тут надо решать на месте и "не забивать микроскопом гвозди".

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

Операционные системы (ОС)

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

Из дистрибутивов чаще всего используют:
- RHEL и его клоны;
- Debian и его клоны;
- FreeBSD (хотя я не так часто с ней встречался)

Знания терминала

Терминал это просто Command Line Interface (CLI) для работы с ОС. И красноглазить бывает надо много, чтобы что-то настроить или разобраться почему не работает как надо.

Мониторинг процессов
Процесс - это экземпляр выполняемой компьютерной программы. Каждый процесс идентифицируется уникальным номером, называемым идентификатором процесса (PID). Процесс - это запущенная программа. Операционная система отслеживает процессы с помощью идентификаторов процессов. Идентификатор процесса (PID) - это уникальный номер, который идентифицирует конкретный процесс. PID автоматически присваивается каждому процессу при его создании в системе. Существует несколько команд Linux, которые можно использовать для мониторинга процессов.

Мониторинг производительности
Существует множество инструментов для мониторинга производительности вашего приложения.

Сетевые инструменты
Сетевые инструменты используются для устранения неполадок в сети. Они также используются для мониторинга сетевого трафика и тестирования сетевого подключения.

Манипулирование текстом
Некоторые из наиболее распространенных команд, которые вы будете использовать в терминале, - это команды для манипулирования текстом. Эти команды позволяют выполнять поиск, замену и манипулирование текстом в файлах и потоках.

Системы контроля версий и их хостинг

Git - это бесплатная распределенная система контроля версий с открытым исходным кодом, предназначенная для быстрой и эффективной работы со всеми проектами, от небольших до очень крупных.

Раньше были распространены и другие системы, типа: CVS, Subversion, Mercurial, Bazaar.

При работе в команде вам часто требуется удаленное место для размещения вашего кода, чтобы другие могли получить к нему доступ, создавать свои собственные ветки и создавать или просматривать запросы на извлечение. Эти услуги часто включают в себя функции отслеживания проблем, проверки кода и непрерывной интеграции. Несколькими популярными вариантами являются GitHub, GitLab, BitBucket и AWS CodeCommit.

Контейнеризация

Контейнеризация - это технология, которая позволяет запускать приложения изолированно от основной операционной системы на базе средств ядра cgroups и namespace.

Программа упаковывается в специальную оболочку-контейнер, внутри которой находится среда, необходимая для работы. Контейнеры можно создавать, описывать и развёртывать, то есть запускать на устройстве, закрывать и удалять, конфигурировать и настраивать, выделять им память и передавать данные.

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

Как что-то поставить

Тут надо знать и понимать что и как ставить и настраивать. По большей части это через чтение документации или через общение с другими инженерами.

Сети и протоколы

Как инженеру DevOps, вам необходимо понимать основы сетевых протоколов, принципы их работы и то, как они используются в реальном мире. Для начала вам следует ознакомиться с протоколами TCP/IP, HTTP, HTTPS, FTP, SSH, SMTP, DNS, DHCP, NTP.

Облачные провайдеры

Облачные провайдеры предоставляют ряд API-интерфейсов для абстрагирования инфраструктуры и обеспечения ее функционирования с учетом требований безопасности и выставления счетов. Облако работает на серверах в центрах обработки данных, но абстрагирование умело создает видимость взаимодействия с единой “платформой” или большим приложением. Возможность быстрого предоставления, настройки и защиты ресурсов с помощью облачных провайдеров стала ключом как к огромному успеху, так и к сложности современного DevOps.

Бессерверные вычисления

Бессерверные вычисления, также известные как функция как услуга (FaaS), - это модель облачных вычислений, в которой поставщик облачных услуг управляет инфраструктурой и динамически распределяет вычислительные ресурсы по мере необходимости. Это позволяет разработчикам писать и развертывать код, не беспокоясь о базовой инфраструктуре.

Правда я еще не видел таких вычислений в бою.
Системы развертывания и конфигурирования

Подготовка инфраструктуры
Инструменты этой категории используются для подготовки инфраструктуры. Это включает в себя DNS, сетевое взаимодействие, политики безопасности, серверы, контейнеры и ряд специфичных для облачных рповайдеров сервисов. В этой категории настоятельно рекомендуется использовать инструменты, не зависящие от облачного провайдера, так как они могут быть применены к другим провайдерам.
Управление конфигурацией
Управление конфигурацией - это процесс обеспечения согласованности характеристик продукта на протяжении всего срока его службы. В мире технологий управление конфигурацией - это процесс управления ИТ, который отслеживает отдельные элементы конфигурации ИТ-системы. ИТ-системы состоят из ИТ-ресурсов, которые различаются по степени детализации. ИТ-ресурс может представлять собой часть программного обеспечения, сервер или кластер серверов.

Управление конфигурацией программного обеспечения - это процесс системной инженерии, который отслеживает изменения в метаданных конфигурации программных систем. При разработке программного обеспечения управление конфигурацией обычно используется наряду с контролем версий и инфраструктурой CI/CD. В этой статье основное внимание уделяется его современному применению в гибких программных средах CI/CD.

Здесь также важно упомянуть, что конфиругация серверов и сервисов может быть описана как код и также сохранена в системе контроля версий. Такой подход называется Infrastructure as Code(IaC).

CI/CD утилиты

CI/CD - это метод частой доставки приложений заказчикам за счет внедрения автоматизации на всех этапах разработки приложений. Основными концепциями CI/CD являются непрерывная интеграция, непрерывная поставка и непрерывное развертывание. CI/CD - это решение проблем, связанных с интеграцией нового кода, которые могут возникнуть у команд разработки и эксплуатации. В частности, CI/CD обеспечивает постоянную автоматизацию и непрерывный мониторинг на протяжении всего жизненного цикла приложений, от этапов интеграции и тестирования до доставки и развертывания. Взятые вместе, эти взаимосвязанные методы часто называют “конвейером CI/CD”, и они поддерживаются командами разработки и эксплуатации, работающими вместе, используя подход DevOps или site reliability engineering (SRE).

Управление секретами

Управление секретами является важным аспектом методологии DevOps, поскольку оно предполагает безопасное хранение и управление конфиденциальной информацией, такой как пароли, API-ключи, сертификаты и другие секреты, которые используются приложениями и инфраструктурой.
Эффективное управление секретами имеет важное значение для поддержания безопасности и целостности среды. Важно регулярно пересматривать и обновлять методы управления секретами, чтобы обеспечить безопасное хранение секретов и управление ими.

Мониторинг инфраструктуры и приложений

Мониторинг инфраструктуры - это практика отображения производительности и состояния инфраструктуры. Чаще всего для мониторинга инфраструктуры используется Zabbix, хотя я бы использовал Prometheus/VictoriaMertics.

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

Управление логами

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

Системы управления контейнерами

Системы управления контейнерами (системы оркестровки) - это системы для администрирования, которые руководят работой контейнеров и сопровождающих систем и сервисов.

Такие системы нужны для гибкого масштабирования инфраструктуры. Они управляют «расписанием» (говорят, когда запускать тот или иной сервис) и распределяют нагрузку на серверы, чтобы вычислительные ресурсы расходовались равномерно. 

Примеры систем управления контейнерами:
- Kubernetes. Открытая платформа, разработанная Google.
- Rancher, OpenShift, Nomad и другие. 

Управление артифактами

Артифакты - это выходные данные процесса сборки, обычно генерируемые инструментом непрерывной интеграции (CI). Эти выходные данные могут быть исполняемыми файлами, библиотеками, документами или файлами любого другого типа, которые создаются в результате сборки, компиляции или упаковки кода.

GitOps

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

Service Mesh

Service Mesh - это способ управления тем, как различные части приложения обмениваются данными об инфраструктуре друг с другом. Этот уровень инфраструктуры может документировать, насколько хорошо (или нет) взаимодействуют различные части приложения, поэтому становится проще оптимизировать взаимодействие и избегать простоев по мере роста приложения.

Шаблоны облачного проектирования

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

Выводы

Написано много, теперь бы понять и осознать вот это вот всё. Как сказал один из моих бывших начальников: "Любой инструмент служит для решения проблемы. Не рационально использовать инструмент, если он проблему не решает, а только усложняет." Всё знать не обязательно, но иметь насмотренность и широкий кругозор крайне желательно, а дальше уже изучать глубже по интересующим вас темам. Не даром существуют DevSecOps, DevMLOps и прочие DevOps, но об этом в следующих статьях.