Как стать автором
Обновить

Об админах, девопсах, бесконечной путанице и DevOps-трансформации внутри компании

Время на прочтение6 мин
Количество просмотров24K
Всего голосов 43: ↑39 и ↓4+35
Комментарии58

Комментарии 58

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


Девопсы — это ребята, которые про взаимодействие разработки программного обеспечения с внешней инфраструктурой.

Было бы неплохо, чтобы вы раскрыли более подробно, что имеется в виду, потому что как раз именно это все трактуют кто как хочет. Хотя вы в статье начали объяснять, но как-то очень абстрактно.

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

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

Эту технологическую и социальную интеграцию и обеспечивает девопс.

Получается что DevOps-инженер это фактически Системный архитектор и Team Lead/менеджер в одном лице?
Мне понятно что такое DevOps, но я нигде не могу найти первоисточник или хотя бы внятное объяснение кто такой DevOps-инженер. Это либо каждый сотрудник отделов разработки, тестирования и эксплуатации (ведь они все так или иначе используют эти инструменты и практики), либо некий руководитель, который связывает все эти отделы воедино (но это же Архитектор или Директор по ИТ).
Но все же что-то свое подразумевают: кто-то думает, что это автоматизатор, кто-то — что чувак, который шарит именно в Ansible/K8s/IasS, кто-то вообще думает что это админ, который должен программировать. В этой сфере какая-то анархия вообще.

Всё ведь просто, DevOps-инженер — это тот, кто выстраивает пайплайны.

Загадка.
Кейс: Иван Иванович посмотрел на проект и понял, что погоняв тесты, можно создать автоматически новый тег и начать сборку боевого пакета с отправкой его пользователям. Он заводит задачу на создание в gitlab ci новой job'ы, которая будет запускаться после успешных тестов и назначает на Семёна Семёновича. Тот успешно её делает и отправляет MR на своего Team Lead'а Сергея Сергеевича, который принимает этот MR в мастер-ветку.
Вопрос: кто здесь DevOps-инженер?

onegreyonewhite ну у вас тут набор — целая ДевОпс тим! Видимо большая компания :) Нет девопс не тимлид и не менеджер, это точно такой же тайтел, который имеет своих менеджеров, лидов, джунов и тд. При том никто не говорит что девопсы не пишут код, увы не все заканчивается на пейплайнах в «Пополурная CI». Дак кто же он такой?

Человек который хорошо понимает процесс разработки, доставки и тестирование в компании (или DO lead/manager кто может быстро его понять).
Человек которому интереснее делать хорошо команде, чем писать крутой HL сервис
Человек которому интересно всего понемногу (full-stack разработчик) — которого демотивирует нудятина в бакенд отделе HL проекта или битва с очередным фреймворком в отделе фронтенда.
Человек который любит автоматизировать, а не разрабатывать «умную корзину»
Который иногда любит пошарить на сервере в конфигурационных файликах и почувствовать себя хакером из кино.

Т.е. получается все остальные не делают хорошо для команды? То что вы написали очень похоже на отдел по автоматизации.
Вообще у нас постоянная команда 4 человека +несколько удаленщиков для некоторых проектов.
Но у нас все DevOps (как я понимаю, всё как код включает и сотрудников). У нас все делают хорошо для команды, но по разному. Вот Рома, например, делает так чтобы фичи как можно быстрее попадали в GUI (https://habr.com/ru/post/456146/), а ещё один парень занимается тем, чтобы эти фичи могли быть как можно быстрее сделаны. Есть и тот, кто делает, чтобы мы могли управлять инфраструктурой этой через кнопку "Сделать хорошо" из Gitlab'а.
Каждый занимается и внедрением самих фич, но в рамках своей компетенции (front-, backend, сборка и установка). Мы придерживаемся Bus Factor, чтобы команда как можно дольше могла работать без одного из членов и быстро подхватить то, что было недоделано. Релиз-менеджер у нас тот, кто может апрувить мердж в мастер-ветку.
Мне сложно сказать кто у нас DevOps-инженер — наверное все.

В не больших командах оно так. А теперь представьте что таких команд 2-3 и у каждого есть желание имплементировать кнопку так как хочет он используя какой то набор инструментов предпочтительных ему. В итоге вы получаете зоопарк инструментов технологий и напряжёнка в команде, ведь Вася из отдела Х почемуто может имеет большую свободу чем Петя из отдела Y

А в маленьких командах, получается, Вася и Петя всегда равноправны по умолчанию?
Проблема, которую вы описали, не в размере. Проблема в том, что кто-то этим размером не умеет пользоваться: нет коммуникации и адекватного централизованного управления. Когда мы говорим о DevOps, то мы говорим о принципиальном подходе к разработке, тестированию и эксплуатации где "все как код" и "все как сервис". В старых подходах есть для каждого продукта своя команда и там каждый делает как удобно ему. В DevOps лучше всего когда есть "облако ресурсов" и оттуда берутся силы для проекта. Таким образом есть минимальная команда (они же "Совет", который решает как это всё должно реализовываться), а есть "подключаемые ресурсы" (это могут быть удаленщики или просто резервная группа для только для непосредственного решения четко описанных задач).
У нас была команда где каждый творил что хотел и как хотел — это был ужас. Но я очень много вдохновлялся командой Gitlab и в целом Open Source сообществом и это очень оживило процесс разработки.

В старых подходах есть для каждого продукта своя команда и там каждый делает как удобно ему.

Так в "новом" подходе все то же самое. Только вот уже получается, что в команде должны быть представлены все компетенции (от DBA до девопса). Причем на высоком уровне. Иначе не работает.

Вы про реальную практику внедрения? Тогда соглашусь — именно так и делают. Иногда DevOps "натягивают" на что угодно, но в итоге ЭТО невозможно даже причислить к DevOps практикам.
Как вы сказали, если команды разделены, то там должны быть все, но это ж форменный беспредел и неразумный расход ресурсов.
Я согласен с вами в другом комменте, что речь в статье про "единорожку", которой быть не может. Просто если сводить используемый термин только к инструментам оркестровки и мониторинга, то это всё равно что слону отрезать "второй" хобот, повесить на шею и говорить, что носишь слона: так-то да, но по факту что-то другое. А говоря про DevOps-инженера многие именно менеджера по оркестровке и имеют в виду, хотя это всего лишь инженер автоматизации.

Да. Могу только добавить, что единый пул ресурсов не всегда ведёт к экономии средств. Потому что есть разные задачи и их эффективнее каждую решать наиболее подходящим для этого способом. Иначе это напоминает попытку использовать единый инструмент для всего, что есть порочная практика. Т.е. нужен некий баланс между унификацией и "у каждого свой огород".
К сожалению, это обычно приводит к борьбе между отделами, т.к. у всех свои цели и свои kpi.
Простой пример. Если есть в компании некое платформенное решение (скажем, oracle или хадуп), то внедрить другое такое же решение, которое будет эффективно решать проблемы какого-то продукта (пускай он лучше будет лететь на монге и s3, соответственно) — от сложно до почти невозможно. Экономия? Эффективность? Нет, не слышал.


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

Не понимаю проблемы.
Смотрите. Если мы придерживаемся продуктового подхода, то, да, действительно каждая команда вправе выбирать каким тулингом пользоваться. И какими средствами решать задачу бизнеса в рамках, первую очередь, бюджета. Действительно, нет двух абсолютно одинаковых команд и двух абсолютно одинаковых продуктов. Но если мы рассматриваем ситуацию крупного энтерпрайза, который может себе позволить штат архитекторов, менеджеров, безопасников, админов и пр… Ну, там действительно возможна централизация инструментария и предоставление инфры командам как сервиса. Но в этом случае душатся все начинания девопса и эджайла. Универсальной формулы как "сделать все эффективно" пока не изобрели. Вот и ходим кругами и называем явления и вещи неподходящими терминами.


В итоге вы получаете зоопарк инструментов технологий и напряжёнка в команде, ведь Вася из отдела Х почемуто может имеет большую свободу чем Петя из отдела Y

Почему вдруг Вася из отдела Х пересекается с Петей из отдела У. Суть разбивки по отделам какая? По функциональностям или всё-таки по продуктам?

То бишь билд инженер?
Дьявол в том, что Девопс инженера нет. Это такой единорог. Мифический зверь. Который нужен всем. Фактически же это история как с врачами. Никто не будет заставлять нейрохирурга лечить простату. С Девопс инженером фактически такая же ситуация. Это может быть билд инженер, разработчик софта, инженер по мониторингу и пр. И в чем разница между "разработчик инфраструктуры" и "администратор инфраструктуры"? Только лишь в том, что первый ее развивает, а второй только поддерживает?
Поэтому, мое мнение, статья вредная. Ибо называет вещи не своими именами.
Но м разумное зерно тоже есть, т.к. недостаточно присовокупить админа к разрабам и надеяться, что внезапно будет все хорошо

Называйте как хотите — но если, допустим, вы являетесь разработчиком софта и самостоятельно настраиваете пайплайн, то есть настраиваете development operations, а соответственно от части вы являетесь DevOps-инженером)

Повторюсь. Я строго против наименования DevOps инженер. Оно затуманивает смысл.
Если же в примере разраб настраивает пайплайн, то он настраивает пайплайн. Не больше и не меньше.

Исторически примерно так:
Стали распространяться компьютеры, для них появились администраторы. Они ползали по полу, протягивая кабели и вставляя в слоты диски с Windows.
Компьютеров стало больше. Выяснилось что специалисты кладут кабели и вставляют диски лучше. Их стали называть PC–техниками.
Компьютеров и админов под них стало очень много. Появились средства автоматизации, пайплайнов и т.д. Произошло разделение на «админов старой школы» и Девопс. (Одновременно PC–техников стали заменять на программы вроде Foreman)
Теперь стало понятно, что инфраструктура это код. Её всю можно описать в коде, и управлять как кодом, и автоматизировать вообще всю. А это уже смена парадигмы. Как разрабатывать код мы знаем, и это значит знания программирования, тесты, версии, среды разработки, проверки синтаксиса и т.д.
Сейчас всех, кто использует эти инструменты называют «ДевОпс инженеры», но одновременно идёт разделение на тех кто может программировать, и не может.
Те кто не может, в конце-концов будут скачивать и настраивать программы от тех кто может. Появятся какие-нибудь «ДевОпс техники».
Компьютеров стало больше. Выяснилось что специалисты кладут кабели и вставляют диски лучше. Их стали называть PC–техниками.
(Одновременно PC–техников стали заменять на программы вроде Foreman)
шта? =)
Кабели отдали на аутсорс специализированным компаниям ;)
Напридумывают терминов и обмазываются. Примерно такие же пространные обсуждения были, когда придумали термин «облако».
Всё просто — чем меньше организация, тем больше ролей может взять на себя один человек. Может человек быть и системным администратором, и DevOps-инженером, и даже кадровиком и водителем, если компания на 5-10 человек. И если кто-то в вакансии указывает в требованиях, что ему нужен «многостаночник», то так и есть — отдельно сисадмин, и отдельно DevOps-инженер просто не будут достаточно загружены.
А зачем компании 5-10 человек DevOps-инженер и админ?
Ну вот у нас 3 программиста, 1 тестировшик и я — он же админ, он же девопс, и тд и тп. Правда я на удаленке, потому что незагружен. Но и без меня никак — локальную серверную ферму и кучу вдс кто-то же должен администрировать.
У нас девопсят программисты сами. Ну кто постарше да поумнее.
Зачем тестер? Человек, умеющий в пайплайны дженкинса, и знающий, как работает продукт, может писать блекбокс и функциональные тесты
А ему это надо? Своей работы полно.
Денег больше хочется же :)
Возможно, но большинство моих знакомых сами бы кому-нибудь приплатили, лишь бы никак с тестами не связываться.
Так лучше понимаешь продукт, и глубже связь с командой разработки (для чего собственно и придумали девопс). Кроме того, тебе за час платят больше, чем QA, а работа по инфраструктуре, ну как у Вас выше, не всегда есть.

какая путаница?
у людей куб проде по 2+ года уже
четко по вакансии понимает контора чтото или нет
пара наводящих вопросов к команде так же все проясняет

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

Не придет, не принимайте его за дурачка.
А если и придет, то будет понимать зачем (например, лычка Девопс даёт +30% к з/п) и какой ценой для него это дастся.

НЛО прилетело и опубликовало эту надпись здесь
Очень интересный вопрос! Не уверен, что на него есть единый правильный ответ. Мне кажется, тут всё решается «на земле», в конкретном случае. Разработчики могут быть и изолированы от инфраструктуры Заказчика.

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

Либо же наоборот, Заказчик может захотеть никак не связываться с «цифровой» частью проекта и целиком отдать всё на откуп Разработчика.

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


Если сервис интегрируемый и неотчуждаем от инфраструктуры заказчика — то развертывание осуществляется заказчиком, а разработчик просто не реализует этап Continuous Deployment, т.е. делает всё вплоть до поставки готового артефакта заказчику.

Но без CD он всего лишь релиз-инженер :)
Развернуть инструменты разработки — это ещё недавно было работой обычного админа.

это он у заказчика без CD, а локально на тестовых стендах полный цикл CI/CD на нем

Если это разные команды, и Dev команда не имеет отношения к эксплуатации (Ops), то DevOps сюда не подходит

DevOps — как вместо одной стены (dev vs ops) получить две (dev vs "devops" vs ops).


Типичный пример:
Продакшен сломался.
Разработчики — "Ты же Девопс, иди чини продакшен!!"

Просто найдите курс на EMC: "DevOps: What, Why, and How".

> что DevOps-инженер и системный администратор — это две разные сущности
Ага, только ни у кого денег нет на то, чтобы они были отдельными сущностями.
Классическим администраторам работа осталась только в достаточно специфических компаниях, которые по факту продают инфраструктуру (либо настолько крупные, что сами у себя вынуждены поддерживать парочку крупных облаков). При этом в последних тоже не всё гладко с этим.
Коллеги, различалка «DevOps инженер — это про технологии и про менеджмент, а админ — это только про технологии» так себе и не дает ответов на многие вопросы, например а чем/кем управляет DevOps инженер, если он про менеджмент?

Я все же стою на позиции, что DevOps — это область, а в ней есть множество ролей, минимум их шесть:

— инфраструктурный инженер (строит платформу или работает с уже готовой, например инженер по Amazon)
— сервисный инженер (например строит сервис аналитики или балансировки нагрузки)
— разработчик со знанием DevOps подходов и 12-factor app
— инженер по автоматизированному тестированию
— релиз-менеджер (синхронизирует выкатки и бизнес)
— CTO, который умеет этим всем управлять

Выделение DevOps инженера никаких реальных проблем не решает, кроме появления козла отпущения, да и еще запутывает команды, где вышеописанные роли надо явно определять. В итоге получается такое.

Получается, что само понятие "DevOps-инженер" лишено смысла, ведь есть конкретные понятия. Либо это некий тип very-fullstack-разработчика.

Именно! Я про это же, но с другой стороны пишу выше
Что может быть, вероятно, это менеджер по внедрению девопс-практик. Ведь есть же эджайл коучи? Но это больше не техническая должность тогда.

Все просто! Бизнес требует CDO по цене DevOps, DevOps по цене сисадмина и сисадмина по цене аникея.

Самая большая боль рынка в том, что народ путает роли и профессии.
Я думаю что DevOps это роль для профессии Software Engeenear и пока не понимаю как их начали роднить с админами (не в обиду инженерам инфраструктурщикам)
точно так же, как и прям в начале статьи породнили эникейщика и обычного админа

Devops — это идея, из которой вышел некоторый набор практик.
Это точно не отдельный человек и не роль. Отдельные люди, которых скорее всего и ищут — это:


  • Билд\релиз инженер — человек, который отвечает за сервисы сборки, релиза, деплоя, помогает выстроить процесс сбора обратной связи.
  • Инженер инфраструктурных сервисов — человек, который строит удобное внутреннее\внешнее облако для запуска сервисов. Это он делает мониторинг aaS, базу aaS, сбор трейсинг-спанов aaS, что-то ещё aaS.
  • Инженер по надёжности систем — человек, который радеет за то, что сервис будет работать, редко падать и быстро чиниться. Это он учит людей правильным архитектурным паттернам.

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


P.S. Системный администратор — это администратор какой-то\каких-то систем. Это нормально — называть сисадминами людей, один из которых рулит флотом серверов на амазоне, а второй отвечает за работоспособность двух серверов 1С-Бухгалтерия и локальной сети. Должности одинаковы, системы (а скорее всего и уровни ответственности\оплаты) — разные.

Дима, нам нужно про это написать статью! Хотя конечно комментарий твой весь смысл отражает очень полно.
А бывает наоборот. На собеседовании на DevOps спрашивают
-«А на каких языках вы программируете?»
-«Эмм… не на каких, я пишу скрипты автоматизации, пайплайны CI/CD»
-«Ой вы нам не подходите, нам нужен девопс который помогает разработчикам указать что у них может быть не так в коде»
-«Лолшто??»
И так больше половины вакансий, я конечно могу сказать разрабу что у него не хватает пакета в requirements.txt по тексту ошибки питона, но если бы я хотел писать код то стал разработчиком сам.
Многим маленьким командам нужен как тут правильно сказали «многостаночник», а поскольку инфраструктуры в основном облачные то желательно девелопер, который будет еще и виртуалочки в амазоне поднимать. Ну что же, удачи этим смелым парням найти такого.
У нас таких 2
Что подтверждает, что Вы удачливый!
Нет, потому что один из них — я.

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

не любая автоматизация, очевидно, DevOps.
Вот, например, автоматизация работы бухгалтерии — это DevOps? Скорее нет, чем да. Верно?

Видимо имеется в виду автоматизация не внутри какого-то продукта, а его окружения и инфраструктуры. Автоматизация внутри бухгалтерии это не девопс, автоматизация развертывания тестовых баз, новых версий и конфигураций самой бухгалтерии — куда ближе
Devops это процесс, а не человек.
Уметь писать pipeline'ы для CI/CD это не так много знаний, и это часто делают админы (которые в статье почему-то превратились в людей у которых компетенций таких нет). Infrastructure as code появилась задолго до слово «devops», админы давно эти практики используют. Да, в небольших компаниях ты можешь одновременно писать инфраструктурный код, выстраивать CI/CD, мониторинг, логирование, тюнить базы данных, поддерживать и дорабатывать внутренние проекты компании, внедрять kuberentes и docker, и при этом менять коллегам мышки, ползать на четвереньках, обжимать витую пару — и твоя должность будет называться системный администратор. На практике в больших компаниях этим просто будут заниматься отдельные люди (DBA, SRE, ops-инженеры, админы внутренней инфраструктуры компании, эникеи), но чем здесь заниматься будет человек с должностью «devops» не очень понятно. А непонятно, на мой взгляд, потому что это все таки процесс.

Если задача приходит в отдел разработки, они там что-то месяц делают, а потом бегут к человеку с должностью «devops» и говорят настрой нам срочно CI/CD, мониторинг, логирование этого дела — это не DevOps. Мне кажется DevOps это про тесное взаимодействие ops и dev, когда они параллельно решают задачу и быстро обмениваются информацией. А как называть людей, которые реализуют пайплайны, деплой и т.д. это уже дело десятое. Да и делать это могут люди совершенно с разными ролями, потому что как правило CI/CD касается как и разработчиков, так и людей которые отвечают за инфраструктуру, поэтому делать это скорее всего они будут вместе, а не отдельно взятый человек.

С другой стороны, мне как админу нравится слово DevOps. Говоришь что ты DevOps и получаешь больше денег.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий