Devops что должен знать
Перейти к содержимому

Devops что должен знать

  • автор:

Как это работает: Отдел DevOps. Навыки и технологии

Продолжаем нашу рубрику “Как это работает” рассказом DevOps-инженера Виктора Ефимова.

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

Итак, для начала разберём: что такое DevOps?

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

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

Навыки и технологии, которыми должен владеть DevOps специалист

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

Текущий спектр технологий и инструментов, с которыми будет работать DevOps-инженер, зависит от конкретной компании и проектов, поэтому можем выделить следующие пункты, которые обязательны для DevOps-профессионала:

1) Основы компьютерных сетей

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

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

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

Знать все возможности каждой версии, каждой системы невозможно, но хороший DevOps-специалист понимает общие принципы работы любой ОС.

3) Языки программирования

Необязательно знать языки программирования на очень высоком уровне, но в работе DevOps важно уметь ориентироваться в чужом коде и понимать хотя бы на минимальном уровне, как он работает. К тому же часто требуется написать скрипты для автоматизации или тестирования определенного процесса. Сегодня самыми популярными скриптовыми языками программирования являются Python, Go, Bash, Powershell.

4) Системы контроля версий

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

Сейчас систем контроля версий много и они отличаются набором характеристик, но на данный момент Git является самой популярной, этаким «золотым стандартом», который используется практически везде, поэтому имеет смысл изучать именно его.

5) Системы управления конфигурацией (например, Ansible)

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

Самыми популярными на сегодняшний день инструментами являются Ansible, Chef, Puppet, Saltstack и т.д.

6) CI/CD инструменты

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

Самыми популярными инструментами для реализации CI/CD концепции являются GitLab, Jenkins, TeamCity, Bamboo и т.д.

7) Системы оркестрации и микросервисы

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

8) Infrastructure as Code

Модель «Инфраструктура как код» (IaC) является неотъемлемой частью работы DevOps-инженеров. С помощью IaC описывается гибкая, масштабируемая архитектура, которая, при желании, может быть легко изменена, дополнена либо уничтожена через код. Также можно быстро автоматизировать развертывание нового проекта и избавиться от зависимости, железа или провайдеров. На данный момент самым популярным средством IaC является Terraform.

9) Cloud platform (AWS, GCP, AZURE)

Сейчас бизнес уходит от развертывания своей инфраструктуры в собственных дата-центрах в пользу создания окружения у облачных провайдеров. Облачные платформы позволяют уменьшить затраты на инфраструктуру, легко масштабировать ресурсы, использовать для разработки собственные PaaS/Saas-решения и т.п. Поэтому DevOps-инженеру необходимо знать решение как минимум одного облачного провайдера. На сегодняшний день самыми известными являются Amazon Web Services, Azure, GCP, в России — Yandex Cloud.

10) Английский язык

Данный пункт всё-таки можно отнести к soft skills, но знание английского довольно важно, поскольку почти вся документация и обучающие материалы по стэку DevOps предоставлена исключительно на английском языке. И, если речь идет об иностранном рынке (иностранных клиентах или работодателе), то знание английского обязательно. Кроме этого, будет нелишним иметь навыки делового общения и переписки на английском.

Если вы хотите попробовать свои силы в таком суперперспективном направлении как DevOps, то мы будем рады увидеть вас в нашей команде! Просто отправьте резюме на hr@dbi.ru.

Чем занимается DevOPS-инженер: преимущества и недостатки профессии

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

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

  1. DevOPS-инженер при разработке плана работ помогает определить, какую архитектуру применять в программе, как именно будет происходить масштабирование, какую систему оркестрации лучше всего использовать.
  2. На следующем этапе автоматизирует проверку кода, настраивает сервера.
  3. Как только продукт готов, автоматизирует его тестирование.
  4. После релиза анализирует результаты опроса пользователей, внедряет обновления и улучшает приложения так, чтобы никто не заметил.
  5. Одновременно занимается решением проблем, которые возникают в работе разработчиков, менеджеров и других специалистов.

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

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

Что должен знать DevOPS-инженер

Специалист должен обладать широким кругозором и разбираться сразу в нескольких областях:

Разработка. DevOPS-инженер должен знать пару языков программирования, чтобы прочитать код, написать быстро программу и автоматизировать процессы.

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

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

Системы оркестрации. Инженер знает, как функционируют контейнеры и как строить систему.

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

Преимущества профессии:

  1. Высокооплачиваемая профессия.
  2. Специалисты востребованы на рынке труда.
  3. Профессиональные навыки можно использовать в любой сфере IT.
  1. DevOPS-инженер часто сталкивается с форс-мажорами, в которых необходимо быстро принимать решение.

На сайте hh.ru размещено 2113 вакансий по запросу «DevOPS-инженер» по всей России (сентябрь 2021).

профессия девопс

Читайте нас в Telegram — stranavozmojnostey Поделиться в социальных сетях

Кто такой DevOps и как им стать: план обучения

Как стать DevOps-инженером? В этой статье мы разобрались, что должен знать DevOps-специалист, делимся инструментами и планом обучения.

Кто такой DevOps-инженер, чем занимается и как им стать — рассказывает Василий Озёров, руководитель международной команды Fevlake и SVP of Infrastructure в Airpush Inc.

  1. Что такое DevOps?
  2. Что должен знать DevOps-инженер?
  3. Как стать специалистом в DevOps?
  4. Заключение

На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

В этой статье я постараюсь рассказать о том, что требуется ИТ-специалисту, чтобы стать DevOps-инженером. Но сначала несколько слов о себе, чтобы познакомиться поближе. Меня зовут Василий, работаю SVP of Infrastructure в одной из рекламных компаний, владею собственным бизнесом и на досуге пишу в свой канал Хмельной DevOps.

С Unix системами я познакомился в далеком 2005 году, ещё будучи учеником лицея. О да, те незабываемые ночи, проведенные за установкой FreeBSD и компиляцией KDE из исходников. К слову, именно благодаря этому я и нашел свою первую работу, где разрабатывал небольшие проекты на QT/C++, занимался настройкой Cisco, а также поднимал почтовые сервера.

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

Но, окунувшись в неё с головой, я понял, что все не так уж и страшно. Я увидел, как приложения собираются, как тестируются, как уходят в продакшн, где их видит весь интернет. Давайте приподнимем завесу тайны и посмотрим, как же стать успешным DevOps-инженером.

Что такое DevOps?

DevOps — это сокращение от Development Operations, и, на самом деле, это не название профессии. Это культура, методика, если угодно. DevOps-движение возникло в 2008 году и было призвано решить накопившиеся проблемы. Очень много компаний видели проблему во взаимодействиях команд разработки и эксплуатации.

Разработчики считали, что если код запустился у них локально, то нет проблем — можно запускать в продакшен. Если всё же проблемы возникали, то со стороны команды эксплуатации звучало: «Да это проблемы с кодом, пусть разработчики разбираются». Из-за такого подхода релизы продуктов постоянно затягивались и зачастую страдало качество конечного продукта. Сильно накладывало отпечаток ещё и то, что за один релиз выкатывалось очень много изменений и было очень трудно разобраться, что же породило проблемы на продакшене.

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

  • Build Engineer — человек, отвечающий за сборку кода. Подтягивание зависимостей, разбор конфликтов в коде — это все про него.
  • Release Engineer — отвечает за доставку кода от разработки в продакшн. Какая ветка пойдет в тестирование, какой билд попадет на продакшн, релиз-инженер занимается именно этим.
  • Automation Engineer — инженер по автоматизации. Автоматизирует все, что движется. А что не движется, двигает и тоже автоматизирует. Автоматическая сборка при пуше в гит, прогон тестов, деплой на staging, деплой в продакшн — это все его задачи. Ключевая роль в DevOps подходе.

В целом можно выделить ещё несколько ролей. Например, Security Engineer, который будет отвечать за прогон security-тестов и изучение уязвимостей в используемых компонентах.

В реальном мире все (или почти все) эти роли по отдельности обычно совмещает какой-нибудь другой человек. К примеру, роль билд-инженера можно отдать в руки разработчика. Да и автоматизация настройки серверов обычно отдается системным администраторам. А DevOps-специалисту остаётся проработать и автоматизировать процесс сборки и доставки кода от разработчика в продакшн.

Что должен знать DevOps-инженер?

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

Как стать DevOps-инженером в 2022 году: дорожная карта

Senior System Administrator

Или хотя бы Middle. Идея в том, что вы должны на хорошем уровне разбираться в среде, в которой будут работать ваши приложения. Как они стартуют (init, systemd), что делать, если вы видите ошибку too many open files, использовать или не использовать swap. Все это очень сильно пригодится, когда вы будете запускать реальные проекты.

  1. Пройдите базовый курс по Linux.
  2. Я учился по сайту lissyara.su, речь тут идет больше о FreeBSD, но, изучив все статьи, получится хорошо расширить свой кругозор по часто используемом софту.
  3. Самое главное во время обучения devops — с головой окунуться в происходящее. Этому очень способствуют тематические форумы и телеграмм-каналы.

Networking — CCNA

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

  1. Запишитесь на курс CCNA.
  2. Установите себе GNS 3 и прокачивайтесь в настройке сетевого оборудования.

Junior Developer

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

Многие могут не согласиться со мной, аргументируя это тем, что код должен писать разработчик. Но, простите, если вы не понимаете, как создаётся программный продукт, то как вы будете автоматизировать его сборку, тестирование и депплой? Сможете ли вы заметить узкое место в архитектурном решении до того, как оно попадет на продакшн?

Чтобы ответить на эти вопросы, devops должен немного углубиться в основные понятия. С чего начать:

  1. Изучить основные типы используемых данных.
  2. Посмотреть на основные применяемые алгоритмы.
  3. Почитать про паттерны программирования.
  4. Пройти простой курс по любому языку программирования, например, у golang есть неплохой интерактивный онлайн-туториал.

Junior DBA

На самом деле это входит в предыдущий пункт, но я все же решил его вынести отдельно. Поскольку все текущие проекты в любом случае используют базы данных, было бы неплохо уметь писать SQL запросы, использовать explain и понимать, как работают и зачем нужны index‘ы. Ну и до кучи посмотреть на популярные NoSQL решения.

  1. Самое простое — это пройти какой-нибудь курс, например от Enterprise DB.
  2. Если курс не хочется,то открываем документацию по PostgreSQL, устанавливаем базу, создаем таблички и изучаем основные команды, такие как select , insert , join . Смотрим на execution plan запроса, создаем индексы, а также бэкапим, восстанавливаем и настраиваем репликацию.

Судя по моей личной статистике, чаще всего в DevOps приходят люди из эксплуатации, поскольку у разработчиков обычно не прокачан первый скилл из списка. Но я знаю два случая из жизни, когда senior developers становились DevOps, потому что им надоело, как работает эксплуатация. И, к слову, помимо технических навыков вам точно потребуются некоторые софт скилы. Как минимум вы будете очень много общаться со всеми заинтересованными сторонами. Также вы будете продвигать новые идеи и технологии, что потребует от вас умения ясно и четко доносить свои мысли и умение спорить. Про стрессоустойчивость писать не буду, но терпение вам точно понадобится, поскольку внедрить новую крутую технологию зачастую невозможно в течение одного дня.

Как стать DevOps-инженером?

Вообще DevOps-инженер — это больше про опыт, нежели про знание конкретного софта. Девопс-ребята постоянно учатся, изучают и тестируют новые проекты и технологии. Они должны постоянно задавать себе вопрос: улучшит ли эта технология наш проект? Что лучше выбрать в качестве языка: Ruby, Python, Go или написать на чистых плюсах? А как мы будем доставлять изменения в продакшен, чтобы не поломать работающие системы?

Главное, что надо понимать, — DevOps-специалист обладает действительно хорошим кругозором. Чтобы его расширить необходимо постоянно заниматься самообучением. Ниже я привел примерные шаги, которые помогут вам вырасти из, например, системного администратора в DevOps-инженера. Запомните: список всего лишь указывает направление, оттачивать навыки придётся вам самим.

  1. Сразу напишем небольшое приложение. Язык выбираем абсолютно любой. Приложение будет отдавать информацию о пользователях через HTTP. По сути, простенькое API.
  2. Теперь давайте добавим работу с базой: пусть наши пользователи хранятся в базе. Идеально структуру базы хранить рядом с кодом и научиться прогонять миграции при новых изменениях. Таким образом ваше приложение само синхронизирует базу до нужной структуры.
  3. Регистрируемся на GitHub/Bitbucket и закидываем весь исходный код нашего приложения туда.
  4. На своей машине поднимаем Jenkins/TeamCity и настраиваем автоматическую сборку приложения из нашего репозитория по кнопке.
  5. Усложняем задачу. Настроим webhooks на GitHub/Bitbucket, которые будут автоматически запускать сборку на Jenkins/TeamCity.
  6. Добавим тестов в Jenkins: как минимум можно прогонять линтер по нашему коду или набросать unit-тесты.
  7. Переключимся на настройку dev окружения. Берём в руки Ansible, Chef, Puppet или SaltStack и настраиваем виртуалку с нуля: создаем пользователей, устанавливаем необходимые библиотеки и зависимости.
  8. Подводим все это дело под Vagrant: виртуалка должна автоматически подниматься и настраиваться. Это важный этап в девопс.
  9. Подключаем vagrant к Jenkins с помощью соответствующего плагина: при пуше в Git наше приложение собирается, и поднимается виртуальное окружение с помощью Vagrant + Configuration System Management.
  10. Ищем best practices по деплою приложений на языке, который вы выбрали. Можно заворачивать всё в deb-пакеты, можно деплоить Ruby с помощью Capistrano. Главное — выбрать решение.
  11. Выбор сделан, реализуем его и конфигурируем Jenkins, чтобы после пуша в репозиторий, Jenkins, помимо сборки приложения и развертывания окружения, выкладывал и запускал наш код.
  12. Добавляем смоук-тесты: после запуска Jenkins должен запросить список пользователей у нашего API и убедиться, что получает ответ.
  13. Добавляем мониторинг нашего проекта: изучаем time series базы, настраиваем prometheus, grafana, автоматически подключаем новый инстанс нашего приложения к мониторингу.
  14. Улучшаем мониторинг: интегрируемся со Slack и PagerDuty, чтобы получать нотификации.
  15. Читаем про Docker, пишем Dockerfile и оборачиваем наше приложение.
  16. Изучаем увлекательные статьи про настройку систем оркестрации Swarm, Kubernetes, Rancher Cattle. Следуем рекомендациям и поднимаем кластер.
  17. Меняем Jenkins: собираем Docker-образ, прогоняем тесты, запускаем собранный докер на кластере Kubernetes, проводим smoke-тесты, вводим наше приложение в балансировку.

Разобрались, как стать DevOps-инженером? Смотрите также, какие инструменты используются в DevOps.

Главной целью всех этих шагов является получение опыта работы с различными технологиями. Я уже говорил, что самое главное для DevOps-специалиста — это кругозор, так что берем эти же 17 пунктов и в каждом из них меняем технологию на новую. Писали приложение на Go? Теперь пишем на Ruby. Использовали Jenkins? Берём TeamCity. Поднимали Kubernetes? Настраиваем swarm. Таким нехитрым образом через несколько месяцев вы заранее сможете понять, что лучше использовать в конкретной ситуации, а это — самое главное качество грамотного и успешного DevOps.

Заключение

Да, стать DevOps-инженером с нуля не так-то просто, серебряной пули не существует. Не существует её и в любой другой области. Всегда придётся изучать, читать, пробовать. Но после 10-ой итерации вы войдёте во вкус. Вы не будете пропускать ни одной интересной софтинки, станете изучать и пробовать всё новое и неизведанное. А новое и неизведанное — это всегда круто. Кто бы там что ни говорил, дерзайте!

Что должен знать DevOps-инженер?

Так как DevOps-инженер отвечает за автоматизацию процессов на всех этапах разработки ПО, он обязан понимать, как устроен процесс разработки в целом, начиная от построения архитектуры, заканчивая доставкой приложения пользователям. Разумеется, еще он должен владеть DevOps-инструментами. Но ведь это еще далеко не все.

corptocorp_devops_engineer_1-1801-46a90c.jpg

Если рассматривать вопрос в контексте найма хорошего DevOps-специалиста, то такой соискатель, кроме вышеупомянутого, должен знать следующее:

  • языки программирования. Дело в том, что автоматизация предполагает написание скриптов и программ. Разумеется, не обязательно знать много языков, чаще всего достаточно одного-двух. И учтите, что в настоящее время в DevOps-сфере распространены такие языки, как Python, Go и Bash;
  • операционные системы. Базово надо знать основные ОС, глубже следует разбираться в Windows и Linux;
  • методологию CI/CD. Она позволяет автоматизировать интеграцию кода в репозитории, а также сборку, тестирование и запуск программных приложений в продакшн;
  • облачные технологии. Обеспечивают перенос разработки в облачную среду и, как следствие, сокращают затраты на инфраструктуру. С учетом современных тенденций DevOps-инженер обязан разбираться в решениях и инструментах, существующих сегодня на облачных платформах;
  • методика управления версиями. Позволяет отслеживать исправления и истории изменений кода, что упрощает его анализ и восстановление. Одна из наиболее известных систем управления версиями — Git;
  • микросервисы и системы оркестрации. Для обеспечения доставки и развертывания ПО сегодня активно используют контейнеры и микросервисы. Для управления контейнерами применяют системы оркестрации, самая популярная — Kubernetes.

Вместо послесловия

Опытные наниматели утверждают, что минимальный опыт работы DevOps-специалиста, претендующего на позицию Middle, составляет 3-5 лет. А вот уже следующий переход (с Middle на Senior) может занять от года и выше, но тут уже все будет зависеть от конкретного человека и его способностей развиваться. При дальнейшем карьерном росте такой инженер может стать архитектором решений, который выстраивает процесс непрерывной разработки, а также проектирует системы в соответствии с бизнес-задачами. Также он может отвечать за разработку технологической стратегии развития компании (RnD).

В общем путь DevOps-инженера сложен и непрост, но результат того стоит! Главное — начать.

BootcampDevOps_970x550__1-20219-daace4.png

Статья написана по материалам блога Mcs.Mail.ru.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *