Что необходимо знать DevOps-инженеру для старта?

  • 3 месяца назад
  • от Александр Мельников
  • читать 3 мин.

Сегодня DevOps является одной из самых быстрорастущих профессий в области информационных технологий. Стоит лишь взглянуть на рейтинги: согласно отчету SD Times, «роль инженера DevOps увеличилась на 225%», а позиция занимает 2-е место в рейтинге Glassdoor «50 лучших вакансий в Америке».

DevOps — это методология разработки программного обеспечения, задача которой наладить взаимодействия разработчиков, тестировщиков и operations отдела в компании.

Путь в Devops-инженеры непрост и тернист, но стоит того. Александр Мельников расскажет, что нужно изучить для того, чтобы претендовать на такую должность.

 

Что необходимо DevOps-у для старта?

Перечень «хард скилов»:

  • Обязательное знание английского языка.
  • Общие представления о сетях и TCP/IP.
  • Основы Linux-администрирования.
  • Непрерывная разработка и интеграция: Jenkins
  • Системы версионирования: Git, GitHub и GitLab
  • Система управления конфигурациями: Ansible
  • Архитектура как код: Terraform
  • Облачная архитектура: AWS либо другая облачная платформа.
  • Контейнеризация и оркестрация: Docker, Kubernetes.
  • Знание Web Servers Apache и
  • Знание языков программирования, хотя бы одного на выбор: Bash, Python.
  • Системы мониторинга: Prometheus, Grafana.
  • Системы логирования: Loki, ELK

Поговорим о них подробнее:

Знание английского языка

В первую очередь оно нужно, потому что вся работа в разработке и эксплуатации ведётся на английском языке. Кроме этого, важно иметь навыки делового общения и переписки на английском. Потому что DevOps-инженер отвечает за сквозную архитектуру, и ему необходимо общаться с многими клиентами, обсуждая архитектурные аспекты взаимодействия или решая проблемы в этом взаимодействии. И если мы говорим об иностранном рынке (иностранных клиентах или работодателе), то знание английского обязательно. Сейчас много материалов и курсов для его изучения, поэтому для любого человека найдется подходящий формат. Из самых популярных платформ: https://www.udemy.com/ , https://lingualeo.com/, а также https://www.youtube.com/ .

 

Общие представления о сетях и TCP/IP

Я считаю, что нельзя писать онлайн-сервисы, не понимая, как работает сеть. Никто не говорит, что надо заучивать семь уровней модели OSI, но точно потребуется знать, как работает IP, TCP/UDP и, конечно, протокол уровня приложения — например, HTTP, HTTP/2. Это сохранит вам кучу нервов выискивая причины ошибки Connection Refused.

 

Основы Linux-администрирования

Главной платформой для работы DevOps-a является Linux (дистрибутив не имеет значения, главное — свежий). Основным способом для изучения необходимой информации для DevOps-инженера в странах СНГ является youtube-канал ADV-IT, там же и есть уроки по основам Linux, которых с головой хватит для старта в карьере DevOps-инженера.

 

Непрерывная разработка и интеграция: Jenkins

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

 

Системы версионирования: Git, GitHub и GitLab

Git — распределённая система контроля версий, которая даёт возможность разработчикам отслеживать изменения в файлах и работать совместно с другими разработчиками. Она была разработана в 2005 году Линусом Торвальдсом, создателем Linux, для того, чтобы другие разработчики могли вносить свой вклад в ядро Linux. Git известен своей скоростью, простым дизайном, поддержкой нелинейной разработки, полной децентрализацией и возможностью эффективно работать с большими проектами.

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

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

 

Система управления версиями: Ansible

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

Такая информация обычно включает точные версии и обновления, которые были применены к установленным программным пакетам, а также местоположения и сетевые адреса аппаратных устройств. Например, если вы хотите установить новую версию сервера WebLogic / WebSphere на всех машинах, имеющихся на вашем предприятии, вам не представляется возможным вручную перейти и обновить каждую машину. Вы можете установить WebLogic / WebSphere за один раз на все свои машины с помощью самых простых книг и инвентаризации Ansible. Все, что вам нужно сделать, это перечислить IP-адреса ваших узлов в инвентаре и написать книгу для установки WebLogic / WebSphere. Запустите playbook со своего компьютера управления, и он будет установлен на всех ваших узлах.

 

Архитектура как код: Terraform

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

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

 

Облачная архитектура: AWS либо другая cloud платформа

 Clouds — современная инфраструктура уже давно вышла за пределы дата-центров. Без понимания того, как работает открытый облачный сервис невозможно стать DevOps-инженером. Благо, что крупные провайдеры предоставляют пробные периоды на доступных условиях и попробовать, что такое облако, можно легко. А главное, что бесплатные планы можно использовать для изучения различных инструментов и оттачивания навыков. Amazon Web Services(AWS), пожалуй, лучшее место для изучения всей отрасли, так как он предлагает наиболее богатый набор инструментов для работы.

 

Контейнеризация и оркестрация: Docker, Kubernetes

Использование контейнеров — один из наиболее активно развивающихся сегментов IT-рынка, ориентированный на корпоративное использование облачных услуг.

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

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

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

Kubernetes — очень сложная система, которая позволяет делать практически все, что касается оркестрации контейнеров. У нее отличный dashboard, гибкие политики безопасности, она поддерживает распределенные/сетевые файловые системы «без танцев с бубнами», обладает широкими возможностями по определению своих метаданных для сервисов, что удобно в больших инфраструктурах.

 

Знание веб серверов Apache и Nginx

Apache и Nginx — 2 самых широко распространенных веб-сервера с открытым исходным кодом в мире. Вместе они обслуживают более 50% трафика во всем интернете. Оба решения способны работать с разнообразными рабочими нагрузками и взаимодействовать с другими приложениями для реализации полного веб-стека.

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

 

Знание языков программирования, хотя бы одного на выбор: Bash, Python

 На сегодняшний день Python является одним из наиболее используемых языков в сфере создания не только непосредственно программных продуктов, но также обеспечения их инфраструктуры. Вследствие этого многим девопсам, по их воле или против оной, пришлось учить новый язык для последующего использования в качестве дополнения к старым добрым Bash-скриптам. Однако Bash и Python исповедуют различные подходы к написанию кода и имеют определенные особенности, в виду чего портирование Bash-скриптов на «змеиный язык» иногда оказывается ёмкой и далеко не тривиальной задачей.

Чтобы упростить жизнь девопсам, создано и продолжает создаваться много полезных библиотек и утилит на Python.

 

Системы мониторинга: Prometheus, Grafana

 Хорошая мониторинговая платформа позволит отследить производительность всей системы и приложений локально, в облаке или в контейнерных средах. Эффективный набор инструментов повысит производительность и поможет сократить или даже устранить время простоя. Вы сможете планировать обновления и новые проекты, лучше распределять время и другие ресурсы, а самое важное – обнаруживать и решать проблемы до того, как их увидит пользователь. Prometheus – инструмент со встроенной базой данных, использующий pull-метод для сбора информации. Grafana- позволяет пользователям создавать дашборды с панелями, каждая из которых отображает определенные показатели в течение установленного периода времени. Каждый дашборд универсален, поэтому его можно настроить для конкретного проекта или с учетом любых потребностей разработки и/или бизнеса.

 

Системы логирования: Loki, ELK

Системы логирования не являются чем-то сложным и на обыденном уровне представляют собой запись всей поступающей/исходящей информации в файл или базу данных. Данные системы реализованы во многих программах, отслеживающих свою работу и позволяющие контролировать все изменения внутри системы. Зачастую функции отката системы связаны с логированием, то есть ,используя правильно настроенные логи и фиксируя несанкционированный доступ либо нежелательное изменение со стороны пользователя, можно восстановить функциональность системы до необходимой даты.

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

Loki — это набор компонентов для полноценной системы работы с логами. В отличие от других подобных систем Loki основан на идее индексировать только метаданные логов — labels (так же, как и в Prometheus), a сами логи сжимать рядом в отдельные чанки.

Для того чтобы наша программа сама нам могла сообщить, что у неё «болит», мы возьмем пару готовых и бесплатных решений в виде ELK Stack — ElasticSearch, LogStash и Kibana — и свяжем их воедино.

ElasticSearch — самонастраивающаяся база данных с хорошим поиском по тексту.

LogStash — синхронизатор с ElasticSearch и сбор логов из источников.

Kibana — веб-интерфейс с большим количеством дополнений.

Принцип работы: Наше приложение сохраняет логи на сервере. Logstash инкрементально передает данные на ElasticSearch, в базу данных. Пользователь заходит в Kibana и видит сохраненные логи.

 

Софт-скиллы, необходимые DevOps-инженеру

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

Среди таких скиллов особенно выделяются:

  • коммуникабельность;
  • клиентоориентированность;
  • эмоциональный интеллект;
  • способность принимать взвешенные решения и нести ответственность за них;
  • спокойствие в стрессовых ситуациях;
  • инициативность и вовлечённость;

 

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

 

title

content