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, но об этом в следующих статьях.