devops инженер обучение с нуля
Как стать DevOps инженером за полгода или даже быстрее. Часть 1. Введение
Целевая аудитория
Вы разработчик, который хочет повернуть свою карьеру в сторону более совершенной модели DevOps? Вы являетесь классическим Ops-инженером и хотели бы получить представление о том, что означит DevOps? Или же вы не являетесь ни тем, ни другим и, потратив некоторое время на работу в области ИТ-технологий, хотите поменять работу и понятия не имеете, с чего начать?
Если да, то читайте дальше, чтобы узнать, как можно стать инженером DevOps среднего уровня за шесть месяцев! Наконец, если вы уже много лет занимаетесь DevOps, то все равно сможете почерпнуть много полезного из этого цикла статей и узнать, где находится отрасль интеграции и автоматизации в данный момент и куда она стремится в своем развитии.
Что это вообще такое?
Во-первых, что такое DevOps? Вы можете погуглить определения и пробраться через всю эту словесную шелуху, но знайте, что большинство из определений просто мешанина слов, облеченная в обтекаемую форму. Поэтому я приведу вам выжимку из всех этих определений: DevOps — это такой способ поставки программного обеспечения, при котором головная боль и ответственность делится между всеми причастными. Вот и все.
Хорошо, но что же все-таки означает это сокращение? Оно означает, что традиционно разработчики Developers (люди, создающие программное обеспечение) в своей работе руководствовались стимулами, которые значительно отличались от стимулов Operations (операционистов, или людей, которые управляют программным обеспечением). Например, как разработчик, я хочу как можно быстрее создать как можно больше новых функций. В конце концов, это моя работа, и именно этого требуют клиенты! Однако, если я человек Ops, то мне нужно как можно меньше новых функций, потому что каждая новая функция — это изменение, а любое изменение чревато неполадками. В результате такого рассогласования стимулов и родился DevOps.
DevOps пытается объединить разработку и операции (интеграцию и автоматизацию) в одну группу. Идея заключается в том, что теперь одна группа будет разделять как боль, так и ответственность (и, вероятно, вознаграждение) за создание, развертывание и получение дохода от программного обеспечения, ориентированного на клиента.
Пуристы скажут вам, что нет такой вещи, как ”инженер DevOps». «DevOps — это культура, а не роль”, — скажут они вам. Конечно, с технической точки зрения они правы, но, как это часто бывает, этот термин вышел за пределы своего первоначального значения. Так вот, инженер DevOps – это что-то вроде “системного инженера 2.0». Другими словами, это тот, кто понимает жизненный цикл разработки программного обеспечения и создает инструменты и процессы разработки программного обеспечения для решения классических операционных задач.
DevOps в конечном счете означает создание цифровых конвейеров, которые берут код с ноутбука разработчика и превращают его в доход от использования конечного продукта, вот в чем все дело. Обратите внимание на то, что выбор карьеры DevOps достаточно высоко компенсируется финансовым вознаграждением, причем почти каждая компания либо “делает DevOps”, либо претендует на это. Независимо от того, где находятся эти компании, общие возможности трудоустройства в качестве DevOps довольно высоки и подразумевают «веселую» и значимую занятость на долгие годы вперед.
Однако будьте осторожны с компаниями, нанимающими “команду DevOps » или «отдел DevOps». Строго говоря, такие вещи не должны существовать, потому что в конечном счете DevOps — это все же культура и способ доставки программного обеспечения, а не укомплектование новой команды или создание отдела с модным названием.
Отказ от ответственности
А теперь давайте на минутку отставим в сторону стакан «Кул-Эйда» и подумаем о следующем. Вы слышали старую пословицу «младших инженеров DevOps не бывает?”. Если нет, то знайте, что это популярный троп на Reddit и StackOverflow. Но что он значит?
По-простому эта фраза означает, что требуется много лет опыта в сочетании с твердым пониманием инструментов, чтобы в конечном итоге стать действительно эффективным практиком Senior DevOps. И, к сожалению, здесь нет кратчайшего пути для достижения цели. Таким образом, это не попытка обмануть систему — я не думаю, что на самом деле можно притвориться старшим инженером DevOps с несколькими месяцами опыта в этой отрасли. Достижение четкого понимания быстро меняющихся инструментов и методологий требует многолетнего опыта, и от этого никуда не деться. Однако существует почти согласованное (модное, если хотите) меню инструментов и концепций, которые используют большинство компаний, и именно об этом пойдет речь.
Опять же, инструменты отличаются от навыков, поэтому, пока вы изучаете инструменты, убедитесь, что вы не пренебрегаете своими навыками (опросы, создание сетей, письменное общение, устранение неполадок и т. д.). Главное, не упускайте из виду то, что мы хотим найти – способ создания полностью автоматизированного цифрового конвейера, который берет идеи и превращает их в приносящие доход фрагменты кода. Это единственный и самый важный вывод из всей этой статьи!
Хватит болтовни, когда я смогу начать?
Ниже приведена дорожная карта «Фундаментальные знания DevOps». Освоив все, что там изображено, можете смело и честно называть себя инженером DevOps! Или облачным инженером, если вам не нравится название “DevOps”.
Эта карта отображает мое (и, вероятно, большинства людей, работающих в этом пространстве) представление о том, что должен знать компетентный инженер DevOps. Тем не менее, это только мнение, и, конечно, будут несогласные с ним. Это нормально! Мы здесь не стремимся к совершенству, мы стремимся к прочному фундаменту, на котором реально можно строить.
Вы должны пройти этот путь постепенно, слой за слоем. Начать (и продолжать!) следует с фундаментальных основ, изучив сначала элементы, обозначенные синим цветом — Linux, Python и AWS. Затем, если позволит время или спрос на рынке труда, займитесь фиолетовыми вещами — Golang и Google Cloud.
Честно говоря, основополагающий верхний слой — это то, что вам придется изучать бесконечно. OS Linux очень сложна, и на ее освоение уходят годы. Python требует постоянной практики, чтобы оставаться в курсе событий. AWS развивается так быстро, что то, что вы знаете сегодня, через год составит лишь часть общего портфеля знаний. Как только изучите основы, переходите к реальному набору навыков. Обратите внимание, что всего существует 6 синих колонок (Конфигурирование, Версия, Пакетирование, Развертывание, Запуск, Мониторинг), по одной на месяц изучения.
Вы, конечно, заметили отсутствие в нашем шестимесячном конвейере важного этапа – тестирования. Я намеренно не включил его в дорожную карту, потому что написание модуля, интеграция и приемо-сдаточные тесты даются нелегко и традиционно ложатся на плечи разработчиков. И пропуск этапа «тестирование» объясняется тем, что цель этой дорожной карты как можно быстрее освоить базовые навыки и инструменты. Отсутствие опыта тестирования, по мнению автора, является лишь незначительным препятствием для правильного использования DevOps.
Кроме того, помните, что мы не изучаем здесь целую кучу несвязанного технического лепета, а стремимся к пониманию инструментов, которые в единой связке создают понятную историю. Эта история представляет собой сквозную автоматизацию процесса — цифровой конвейер, который перемещает биты подобно сборочной линии. Вы же не хотите изучать кучу инструментов и постоянно останавливаться! Инструментарий DevOps меняется быстро, а концепции — гораздо реже. Поэтому вы должны стремиться к использованию инструментов в качестве обучающих прокси для концепций более высокого уровня.
Ладно, давайте копнем немного глубже!
Фундаментальные знания
Под верхней ступенькой с надписью Foundation вы видите навыки, которыми должен овладеть каждый инженер DevOps. Эти навыки – уверенное обращение с тремя «столпами» отрасли, коими являются: операционная система, язык программирования и публичное облако. Эти вещи не являются тем, с чем можно по-быстрому ознакомиться и пойти дальше. Эти навыки нужно постоянно совершенствовать и оттачивать мастерство обращения с ними, чтобы находится в авангарде отрасли и актуализировать окружающую вас профессиональную среду. Давайте пройдемся по ним по очереди.
Linux это то, где все работает. Можете ли вы быть потрясающим практиком DevOps, полностью оставаясь в рамках экосистемы Microsoft? Конечно, можете! Нет такого закона, который предписывал бы использовать только Linux. Однако учтите – не смотря на то, что все вещи Linux можно проделать и в Windows, там это происходит гораздо болезненней и с меньшими функциональными возможностями. На данный момент можно смело предположить, что без знания Linux невозможно стать настоящим профессионалом DevOps, поэтому Linux это то, что вы должны изучать и изучать.
Честно говоря, лучший способ сделать это — просто установить Linux (Fedora или Ubuntu) дома и пользоваться им как можно больше. Конечно, вы переломаете кучу вещей, будете застревать в рабочих процессах, вам придется все исправлять, зато вы узнаете Linux!
Кстати, в Северной Америке более распространены варианты RedHat, поэтому имеет смысл начать с Fedora или CentOS. Если вы задаетесь вопросом, следует ли вам приобрести KDE или Gnome edition, выберите KDE. Это то, чем пользуется сам Линус Торвальдс.
Python в наши дни является доминирующим бэк-энд языком. С ним легко начать работу, он широко используется. Python очень распространен в сфере искусственного интеллекта и машинного обучения, поэтому, если вы когда-нибудь захотите перейти в еще одну горячую сферу деятельности, то будете полностью к этому готовы.
Amazon Web Services: опять же, невозможно стать опытным профессионалом DevOps без твердого понимания того, как работает публичное облако. И если вы хотите узнать об этом как можно больше, изучите Amazon Web Services. Это ведущий игрок в данной области услуг, который предлагает самый богатый набор рабочих инструментов.
Можно ли вместо этого начать с Google Cloud или Azure? Конечно, можно! Но помня последний финансовый кризис, следует учесть, что AWS — это самый безопасный вариант, по крайней мере, в 2018 году, так как позволяет бесплатно зарегистрировать аккаунт и приступить к изучению возможностей облачных сервисов. Кроме того, AWS console предоставляет пользователю простое и понятное меню для выбора. Хорошая новость заключается в том, что для этого вам не нужно знать все технологии Amazon.
Начните со следующего: VPC, EC2, IAM, S3, CloudWatch, ELB (Elastic Load Balancing под прикрытием EC2) и Security Group. Этих вещей достаточно, чтобы начать работу, и каждое современное, облачное предприятие достаточно активно использует эти инструменты. Собственный учебный сайт AWS — хорошее место для начала работы.
Я рекомендую вам ежедневно уделять 20-30 минут изучению и практике с языком Python, операционной системой Linux и облачным сервисом AWS в дополнение к другим вещам, которые вам придется изучить. В целом, я считаю, что тратить по часу в день пять раз в неделю достаточно, чтобы понять происходящие в отрасли DevOps процессы в течение 6 месяцев или даже меньше. Существует в общей сложности 6 основных составляющих, каждая из которых соответствует месяцу обучения. Это все, что вам понадобится для приобретения базовых знаний.
В последующих статьях мы рассмотрим следующий уровень сложности: как полностью автоматизировать настройку, версию, пакетирование, развертывание, запуск и мониторинг программного обеспечения.
Немного рекламы 🙂
Где можно пройти хорошие онлайн курсы по DevOps?
Хочу попробовать стать devops. Может кто-то проходил хорошие курсы на начинающих, с которых можно начать изучать devops? Интересует только онлайн курсы
Простой 1 комментарий
Почему умение обращаться с docker, Jenkins или GitLab создаёт новую специальность? Вопрос риторический.
Почему умение обращаться с docker, Jenkins или GitLab создаёт новую специальность?
Да все уже привыкли, что с сисадов специализирующихся на DevOps, так называют
Имхо, это вообще не сисадминство.
Это на стыке программиста и сисадмина.
Запросто из программистов можно в DevOps податься.
а можете подробнее рассказать, что значит на стыке?
Почему умение обращаться с docker, Jenkins или GitLab создаёт новую специальность?
А вот этот текст с пониманием дела написал или инженер DevOps или senior developer:
https://habr.com/ru/company/dataart/blog/436346/
и этот
https://habr.com/ru/post/438064/
И как программист может податься в DevOps?
stratosmi, первую статью написал архитектор (Solution Architect), насчет второй не знаю, но себя они DevOps не называли. Да и называть человека DevOps как-то странно, правильнее наверное DevOpser, если уж на то пошло.
Да и называть человека DevOps как-то странно, правильнее наверное DevOpser, если уж на то пошло.
С другой стороны и программисты приходят в DevOps, обычно путем «так, ну вот надо разобраться, настроить», а через какое-то время «ну вот я всё это теперь знаю, могу называться DevOps’ом».
Гайд по DevOps для начинающих
В чем важность DevOps, что он означает для ИТ-специалистов, описание методов, фреймворков и инструментов.
Многое произошло с тех пор, как термин DevOps закрепился в IT-мире. С учетом того, что большая часть экосистемы имеет открытый исходный код, важно пересмотреть, почему это началось и что это значит для карьеры в IT.
Что такое DevOps
Хотя нет единого определения, я считаю, что DevOps — это технологическая структура, которая обеспечивает взаимодействие между командами разработчиков и операционными командами для более быстрого развертывания кода в производственных средах с возможностью повторения действий и автоматизации. Остаток статьи мы потратим на распаковку этого утверждения.
Слово «DevOps» является объединением слов «разработка» (development) и «операции» (operations). DevOps помогает увеличить скорость доставки приложений и услуг. Это позволяет организациям эффективно обслуживать своих клиентов и становиться более конкурентоспособными на рынке. Проще говоря, DevOps — это согласованность между разработкой и ИТ-операциями с более эффективным взаимодействием и сотрудничеством.
DevOps предполагает такую культуру, при которой сотрудничество между командами разработчиков, операторами и бизнес-командами считается критически важным аспектом. Речь идет не только об инструментах, поскольку DevOps в организации постоянно приносит пользу и клиентам. Инструменты являются одним из его столпов, наряду с людьми и процессами. DevOps увеличивает возможности организаций по предоставлению высококачественных решений в кратчайшие сроки. Также DevOps автоматизирует все процессы, от сборки до развертывания, приложения или продукта.
Дискуссия о DevOps сосредоточена на взаимоотношениях между разработчиками, людьми, которые пишут программное обеспечение для жизни, и операторами, ответственными за поддержку этого программного обеспечения.
Вызовы для команды разработчиков
Разработчики, как правило, с энтузиазмом и желанием внедряют новые подходы и технологии для решения проблем организаций. Однако они также сталкиваются с определенными проблемами:
Проблемы, с которыми сталкивается операционная группа
Операционные группы исторически ориентированы на стабильность и надежность ИТ-сервисов. Именно поэтому операционные команды занимаются поиском стабильности с помощью внесения изменений в ресурсы, технологии или подходы. К их задачам относятся:
Как DevOps решает проблемы разработки и операций
Вместо того, чтобы выкатывать большое количество функций приложения одновременно, компании пытаются выяснить, смогут ли они развернуть небольшое количество функций для своих клиентов с помощью серии итераций релизов. Такой подход имеет ряд преимуществ, таких как лучшее качество программного обеспечения, более быстрая обратная связь с клиентами и т.д. Это, в свою очередь, обеспечивает высокую степень удовлетворенности клиентов. Для достижения этих целей от компаний требуется:
DevOps пытается решить различные проблемы, возникающие в результате применения методологий прошлого, в том числе:
Противостояние DevOps, Agile и традиционного IT
DevOps часто обсуждается в связи с другими ИТ-практиками, в частности, гибкой и водопадной ИТ-инфраструктурой.
Agile — это набор принципов, ценностей и методов производства программного обеспечения. Так, например, если у вас есть идея, которую вы хотите преобразовать в программное обеспечение, вы можете использовать принципы и ценности Agile. Но это программное обеспечение может работать только в среде разработки или тестирования. Вам нужен простой и безопасный способ быстро и с высокой повторяемостью переносить программное обеспечение в производственную среду, а путь лежит через инструменты и методы DevOps. Гибкая методология разработки программного обеспечения сосредоточена на процессах разработки, а DevOps отвечает за разработку и развертывание — самым безопасным и надежным способом.
Сравнение традиционной водопадной модели с DevOps – хороший способом понять преимущества, которые дает DevOps. В следующем примере предполагается, что приложение будет запущено через четыре недели, разработка завершена на 85%, приложение будет запущено, и процесс закупки серверов для отправки кода только что был начат.
Традиционные процессы | Процессы в DevOps |
---|---|
После размещения заказа на новые серверы команда разработчиков работает над тестированием. Оперативная группа работает над обширной документацией, необходимой на предприятиях для развертывания инфраструктуры. | После размещения заказа на новые серверы, команды разработчиков и операторов совместно работают над процессами и документооборотом для установки новых серверов. Это позволяет лучше понять требования к инфраструктуре. |
Искажена информация о восстановлении после отказа, избыточности, расположении центров обработки данных и требованиях к хранилищам, так как отсутствуют входные данные от команды разработчиков, которая обладает глубокими знаниями в области применения. | Подробная информация о преодолении отказа, избыточности, аварийном восстановлении, расположении центров данных и требованиях к хранилищам известна и корректна благодаря вкладу команды разработчиков. |
Оперативная группа не имеет представления о прогрессе команды разработчиков. Также она разрабатывает план мониторинга на основе собственных представлений. | Оперативная группа полностью осведомлена о прогрессе, достигнутом командой разработчиков. Она также взаимодействует с командой разработчиков, и они совместно разрабатывают план мониторинга, который удовлетворяет IT и потребности бизнеса. Они также используют инструменты мониторинга производительности приложений (APM). |
Нагрузочный тест, проводимый перед запуском приложения, приводит к сбою приложения, что задерживает его запуск. | Нагрузочный тест, проводимый перед запуском приложения, приводит к снижению производительности. Команда разработчиков быстро устраняет узкие места, и приложение запускается вовремя. |
Жизненный цикл DevOps
DevOps подразумевает принятие определенных общепринятых практик.
Непрерывное планирование
Непрерывное планирование опирается на принципы бережливости, для того чтобы начать с малого, определив ресурсы и результаты, необходимые для проверки ценности бизнеса или видения, постоянной адаптации, измерения прогресса, изучения потребностей клиентов, изменения направления по мере необходимости с учетом маневренности, а также для обновления бизнес-плана.
Совместное развитие
Процесс совместной разработки позволяет бизнесу, командам разработчиков и командам тестировщиков, распределенным по разным часовым поясам, непрерывно поставлять качественное программное обеспечение. Сюда входит многоплатформенная разработка, поддержка программирования на разных языках, создание пользовательских историй, разработка идей и управление жизненным циклом. Совместная разработка включает в себя процесс и практику непрерывной интеграции, что способствует частой интеграции кода и автоматической сборке. При частом внедрении кода в приложение, проблемы интеграции выявляются на ранних этапах жизненного цикла (когда их легче исправить), а общие усилия по интеграции сокращаются благодаря непрерывной обратной связи, поскольку проект демонстрирует непрерывный и наглядный прогресс.
Непрерывное тестирование
Непрерывное тестирование снижает стоимость тестирования, помогая командам разработчиков балансировать между скоростью и качеством. Оно также устраняет узкие места в тестировании благодаря виртуализации услуг и упрощает создание виртуализированных тестовых сред, которые можно легко совместно использовать, развертывать и обновлять по мере изменения систем. Эти возможности сокращают расходы на инициализацию и поддержку тестовых сред, а также сокращают время цикла тестирования, позволяя проводить интеграционное тестирование на ранних стадиях жизненного цикла.
Непрерывные выпуск и развертывание
Эти методики привносят за собой одну из основных практик: непрерывные выпуск и развертывание. Это обеспечивают непрерывный конвейер, который автоматизирует ключевые процессы. Он сокращает количество ручных операций, время ожидания ресурсов и объем переделок, позволяя осуществлять развертывание по нажатию кнопки, что обеспечивает большее количество релизов, снижение количества ошибок и полную прозрачность.
Автоматизация играет ключевую роль в обеспечении стабильного и надежного выпуска программного обеспечения. Одна из важнейших задач заключается в том, чтобы взять на вооружение ручные процессы, такие как сборка, регрессия, развертывание и создание инфраструктуры, и автоматизировать их. Для этого требуется контроль версии исходного кода; сценарии тестирования и развертывания; данные об инфраструктуре и конфигурации приложений; а также библиотеки и пакеты, от которых зависит приложение. Еще одним важным фактором является возможность запрашивать состояние всех сред.
Непрерывный мониторинг
Непрерывный мониторинг обеспечивает формирование отчетов корпоративного уровня, которые помогают командам разработчиков понять доступность и производительность приложений в производственном окружении еще до того, как они будут развернуты в производство. Ранняя обратная связь, обеспечиваемая непрерывным мониторингом, имеет решающее значение для снижения стоимости ошибок и управления проектами в правильном направлении. Эта практика часто включает в себя инструменты наблюдения, которые, как правило, раскрывают показатели, связанные с производительностью приложений.
Постоянная обратная связь и оптимизация
Непрерывная обратная связь и оптимизация обеспечивают визуальное представление потока клиентов и точное определения проблемных участков. Обратная связь может быть включена как на предпродажной, так и на постпроизводственной стадиях для максимизации ценности и обеспечения успешного завершения еще большего количества транзакций. Все это обеспечивает немедленную визуализацию первопричины проблем клиентов, которые влияют на их поведение и влияние на бизнес.
Преимущества DevOps
DevOps может способствовать созданию среды, в которой разработчики и операторы работают как одна команда для достижения общих целей. Важной вехой в этом процессе является внедрение непрерывной интеграции и непрерывной доставки (CI/CD). Эти методики позволят командам быстрее выводить программное обеспечение на рынок с меньшим количеством ошибок.
Важными преимуществами DevOps являются:
Принципы DevOps
Принятие DevOps породило несколько принципов, которые эволюционировали (и продолжают эволюционировать). Большинство поставщиков решений разработали свои собственные модификации различных методик. Все эти принципы основаны на целостном подходе к DevOps, и организации любого размера могут использовать их.
Разрабатывайте и тестируйте в среде, похожей на производственную
Суть заключается в том, чтобы позволить командам разработчиков и специалистов по контролю качества (QA) разрабатывать и тестировать системы, которые ведут себя как производственные системы, чтобы они могли видеть, как приложение ведет себя и работает задолго до того, как оно будет готово к развертыванию.
Приложение должно быть подключено к производственным системам как можно раньше в течение жизненного цикла для решения трех основных потенциальных проблем. Во-первых, это позволяет протестировать приложение в среде, близкой к реальному окружению. Во-вторых, это позволяет тестировать и проверять процессы доставки приложения заранее. В-третьих, это позволяет операционной команде проверить на ранней стадии жизненного цикла, как их среда будет вести себя, когда приложения будут развернуты, тем самым позволяя им создавать тонко настраиваемую, ориентированную на приложения среду.
Развертывание с воспроизводимыми, надежными процессами
Этот принцип позволяет командам разработчиков и операторов поддерживать гибкие процессы разработки программного обеспечения на протяжении всего жизненного цикла. Автоматизация имеет решающее значение для создания итеративных, надежных и воспроизводимых процессов. Следовательно, организация должна создать конвейер доставки, обеспечивающий непрерывное автоматизированное развертывание и тестирование. Частое развертывание также позволяет командам тестировать процессы развертывания, тем самым снижая риск сбоев развертывания во время реальных релизов.
Мониторинг и проверка качества работы
Организации хороши в мониторинге приложений на производстве, потому что у них есть инструменты, которые фиксируют показатели и ключевые показатели эффективности (KPI) в режиме реального времени. Этот принцип переносит мониторинг на ранние стадии жизненного цикла, гарантируя, что автоматизированное тестирование отслеживает функциональные и нефункциональные атрибуты приложения на ранних стадиях процесса. Всякий раз, когда приложение тестируется и развертывается, качественные показатели должны быть изучены и проанализированы. Инструменты мониторинга обеспечивают раннее оповещение о проблемах, связанных с эксплуатацией и качеством, которые могут возникнуть в процессе производства. Эти показатели должны быть собраны в формате, доступном и понятном всем заинтересованным сторонам.
Усовершенствование циклов обратной связи
Одна из целей процессов DevOps заключается в том, чтобы дать возможность организациям быстрее реагировать и вносить изменения. При поставке программного обеспечения эта цель требует, чтобы организация получала обратную связь на ранней стадии, а затем быстро училась на каждом предпринятом действии. Этот принцип требует от организаций создавать каналы коммуникации, которые позволяют заинтересованным сторонам получать доступ и взаимодействовать по принципу обратной связи. Разработка может осуществляться путем корректировки своих проектных планов или приоритетов. Производство может действовать путем улучшения производственной среды.
В заключение
DevOps — это все более популярная методология, целью которой является объединение разработчиков и операторов в единое целое. Она уникальна, отличается от традиционных IT-операций и дополняет Agile (но не является столь же гибкой).
Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory: