Сегодня мы решили взглянуть на ситуацию с Java- и Python-разработчиком, который задумался о «погружении» в тему DevOps в тот момент, когда он начал все больше отдаляться от привычных инструментов в пользу работы с Oracle Weblogic и shell-скриптами. Он решил совместить свой опыт в области разработки с новым опытом в работе с процессами.
Мы посмотрели на основные советы экспертов в области DevOps на Quora и дополнили рассказ примерами из опыта команды 1cloud.
Джонатан Феноччи (DevOps разработчик в Bazaarvoice): Мне очень нравится работать в сфере облачных технологий и заниматься темой DevOps. Зачастую, этот термин используют, чтобы описать системных программистов (иногда также называют инфраструктурными разработчиками, системными разработчиками, разработчиками процессов (операций), или, самым неподходящим способом, системными администраторами).
DevOps означает совсем не это, но в контексте карьерного роста, в этих определениях отражается понимание того, чем занимается «современный» системный программист.
Итак, ты разработчик и хочешь перейти к работе с процессами. Здесь тебя ожидает сюрприз. Весь смысл не в том, чтобы установить Arch Linux и начать изучать Perl. Для подобного рода вещей существует определенное место (очень маленькое и темное в самом отдаленном углу нашей вселенной), но для начала давай определимся, что представляет из себя DevOps, и чем он не является.
Что подразумевает под собой работа в области DevOps:
- Разработку ПО;
- Разработку инструментов;
- Инфраструктурное проектирование;
- Регулярное решение сложных задач;
- Масштабирование, потому что оно необходимо;
- *NIX;
- Мониторонг;
- Виртуализация;
- Быть на связи при отключении электричества в 2 часа ночи;
- Техническое обслуживание (например, решение проблемы с утечкой памяти виртуального хоста);
- Гибкая методология разработки;
- Циклы выпуска ПО и контроль за ними;
- Автоматизация, автоматизация и снова автоматизация;
- Метрики/отчетность (идут параллельно с мониторингом);
- Разработка плана по использованию веток и релизов продукта для конкретных СУВ(SCM) (git, Mercurial, svn, др);
- ИБ;
- Облачные технологии;
- Оптимизация/тонкая настройка;
- Тестирование и замеры уровня нагрузки/производительности;
- Управление конфигурацией (Puppet, Chef, Ansible, и прочее);
- Сервисы аутентификации;
- Системы управления пакетами;
- Умение работать с командной строкой (awk);
- Балансировка нагрузки/ проксирование (служб, систем, компонентов и процессов);
- CI/CIT/CD — непрерывная интеграция, интеграционное тестирование и развертывание новых версий (deploy);
- Базы данных (SQL, NoSQL, без разницы);
- Уверенное знание систем (сетевого стэка, жесткие диски/файловые системы/системная память/процессор).
Что НЕ подразумевается под работой в области DevOps:?
- Простота (по сравнению с разработкой ПО);
- Отсутствие необходимости программировать;
- Установка Linux и прощание с твоей любимой ОС;
- Намного «интереснее», чем разработчик ПО;
- Совершенно новая область работы.
Нужно сделать несколько вещей, чтобы начать позиционировать себя как DevOps разработчика.
Пройти интервью в компании, которой нужен DevOps. Если тебя примут на работу, то ты быстро научишься работе с процессами. Очень быстро. Иначе тебя уволят. Если тебя не уволят, то ты поймешь, чего тебе не хватает, чтобы дойти до уровня полноценного DevOps-разработчика.
Получить опыт работы используя свои навыки разработчика ПО для построения инструментов, а не ПО. Изучить OpenStack. Важно понимать различие компонентов и их важность.
Участвовать во всех процессах, связанных с операциями: развертывание, масштабирование и так далее. Если твоя команда не занимается этим (например, они отсылают все отделу работающим с операциями), нужно обратиться к ребятам, которые занимаются операциями и посмотреть за процессом нескольких развертываний.
Нужен ли существенный опыт? Я задавал этот вопрос себе множество раз. Я начинал с разработки, и менее чем за год работы с операциями стал DevOps-разработчиком. Я не обладал заметными алгоритмическими способностями, но опыт разработки у меня был приличный. Хороший разработчик хорош во всем: и в написании ПО, и в его развертке. Необходимо понимание сложности систем и интуитивное понимание того, как они все влияют друг на друга.?
Ярослав Ворожко (DevOps разработчик в Delivery Hero): По большому счету, DevOps затрагивает очень широкий круг знаний, с которым сложно и интересно работать.
Вот как выглядит моя обычная рабочая неделя:
- Развертывание (выпуск ПО и автоматизация развертывания ПО на Fabric и Python);
- Управление инцидентами (работа с возникающими проблемами, написание восстановительных процедур и мониторинг);
- Мониторинг ПО, находящегося в эксплуатации (Icinga, Newrelic, Munin, управление логами, например, с помощью Splunk);
- Управление конфигурацией (Saltstack, Chef, Puppet и Ansible, весь стэк служб, которые необходимы для работы приложения);
- Написание различных скриптов (с bash и python, работа с awk, sed, grep, sort, uniq, cat, cut, echo, fmt, tr, nl, egrep, fgrep, wc).
Мы решили привести и пару примеров из практики команды 1cloud.
Так, технологический стек back-end разработчика составляет: .NET, C#, ASP.NET MVC, Visual Studio, Team Foundation Server.
С точки зрения API, SDK: Vcloud SDK .NET, vSphere SDK .NET, NetApp Manageability SDK C#.
Управление инцидентами осуществляется с помощью ServiceNow, для мониторинга используется Zabbix. Для работы с различными скриптами применяется bash, PowerShell. В дальнейшем планируется переход на управление конфигурацией с помощью Puppet.
Посмотрим, чем занимаются специалисты по смежным задачам.
Вот так выглядит список ежедневных задач администратора систем Microsoft:
- Решение пользовательских инцидентов;
- Выполнение заявок пользователей;
- Работа над текущими проектами (настройка серверов на базе Windows Server для предоставления клиентам сервисов: терминальные службы, MS SQL и других);
- Планирование изменений (cоставление планов перед проведением работ на серверах – ServiceNow);
- Общение с вендорами по проблемам в работе с ПО;
- Написание скриптов для автоматизации проводимых работ (PowerShell);
- Анализ событий от системы мониторинга (SCOM).
Базовые обязанности менеджера по информационной безопасности:
- Мониторинг событий ИБ в Security Information and Event Management system (SIEM) AV USM, в TrendMicro Deep Security, PaloAlto 2050, WAF ModSecurity;
- Управление уязвимостями ИБ, проведение внутреннего и внешнего сканирования (OpenVAS на основе AV USM и Qualys);
- Получение лицензии ФСТЭК на ТЗКИ и ФСБ «на криптографию» (аттестация помещения и АРМов, сбор и подготовка документов);
- Проведение обучения работников по вопросам ИБ;
- Управление инцидентами (работа с возникающими проблемами, написание восстановительных процедур и мониторинг).
P.S. Парочка дополнительных материалов о работе над нашим облачным сервисом на Хабре:
Комментарии (17)
Secessus
20.02.2016 11:49+7Установка Linux и прощание с твоей любимой ОС
Логическое противоречие же. Или автор был любителем FreeBSD? ;-)
Revkov
20.02.2016 14:04+3Админам не нравится когда их называют админами. Поэтому не админ, а DevOps)
thunderspb
20.02.2016 14:32админ != девопс
Не совсем понял пример с админом и ИБшником и содержанием остальной статьи…
Fen1kz
20.02.2016 14:51+8Возможно я неправильно понял, но DevOps выглядит как шаг назад, как такой "программист-эникейщик" 100 уровня. Только вместо "не работает принтер" теперь "не собирает Ansible", как бы эникейщик для самих программистов.
Какие проблемы в приложении не станут кидать на DevOps'a?pessom
20.02.2016 16:19-3Программист разрабатывает приложение.
Системный администратор готовит инфраструктуру\сервер\ОС.
DevOps размещает и запускает приложение разработанное программистом, напрямую взаимодействуя с первыми и вторыми при возникающих проблемах.
nonname
20.02.2016 15:05+4Начал осваивать DevOps будучи сисадмином и кажется что все-таки сисадмину освоить DevOps проще. Это же по сути отличается от программирования, даже занимаясь написанием плейбуков для Ansible, тебе приходится понимать устройство множества конфигов ПО, особенностей *nix, системных инструментов, взаимодействия подсистем, а это по сути и есть работа обычного сисадмина. Только пришлось столкнуться с программированием когда понадобилось собрать CI.
fear86
20.02.2016 17:39Хороший опыт проектирования ПО куда полезнее будет. Разработка инструментов, микросервисов, api, общая архитектура системы и отдельно взятых узлов (контейнеров). Так что легче всего будет только архитектору ПО для линукс систем, и сетей )
romy4
22.02.2016 16:02Самые лучшие прогеры в большинстве случаев как раз из тех, кто имеет настраивать железо и софт самостоятельно.
Nikon_NLG
22.02.2016 23:03+1работа с awk, sed, grep, sort, uniq, cat, cut, echo, fmt, tr, nl, egrep, fgrep, wc
Вот зачем он это написал? Сейчас с wc и echo на семинарах обучают работать? А особенно grep/egrep/fgrep, учитывая что это одна и та же команда grep, только с ключами -e и -fAlexBin
24.02.2016 03:27+1Кроме того необходимо знание манипулятора «мышь», клавиш Space, Escape, F1-F12, Scroll Lock, Backspace, Page Up, Page Down, знание оконных менеджеров, RDP, SSH и понимание принципов смены раскладки клавиатуры.
saintp16
Неплохо. У меня есть приятель, который в основном занимается front-end, но в качестве хобби возится с домашним сервером и другими железками. Кстати, еще и CCNP сдал. Понятно, что до DevOps далеко, но действительно иногда так и приходят к этому