Матрица навыков инженера DevOps


В этой статье мы рассмотрим критические навыки DevOps-инженера, которые сделают вас экспертом. Итак, поскольку мы понимаем, что люди приходят в нашу компанию с разных мест работы и у всех разный объем компетенций и уровень знаний, мы решили создать универсальную дорожную карту для роста и развития инженера DevOps. Но это не сработало так, как мы хотели, поэтому мы решили пойти другим путем и создать список навыков и компетенций, необходимых для работы в нашей компании. Таким образом, сделав трехуровневую систему, каждый уровень состоит из анкеты и критериев для кандидата. Говоря иначе, мы подготовили первую версию грейдинга и сертификации. Однако и эта система не помогла решить нашу проблему. Позже мы нашли отличный инструмент – матрицу навыков самооценки. Мы решили применить этот инструмент на практике для DevOps и позже преобразовали его в матрицу навыков. После этого мы провели сессию, на которой поставили себе текущие и желаемые полугодовые оценки. В качестве инструмента мы использовали Miro, но вы также можете воспользоваться листами Google.

Поскольку DevOps-инженеры в Mad Devs глубоко погружаются в операционную и инфраструктурную части, мы определили стек знаний для наших нынешних и будущих сотрудников, чтобы начать работать в качестве младших “MadOps”.

Для начала работы вам необходим уровень как минимум среднего сисадмина. Также для дальнейшего роста необходимы навыки и понимание абстрактных навыков и принципов:

  • подготовка и эксплуатация сервиса в продакшене;
  • логирование анализа;
  • создания отказоустойчивости;
  • аварийного восстановления;
  • программирования сценариев и автоматизации;
  • управление конфигурацией.

Linux

В основе лежит ядро Linux, подсистемы и окружающие их утилиты. Что вам нужно знать:

  • Процессы, устройства, дисковые разделы, lvm, файловые системы, пространства имен и cgroups;
  • Загрузчики, процесс запуска, systemd и модули;
  • Сетевая подсистема Netfilter, пользовательские утилиты: iptables, Shorewall, tc и т.д., базовые знания сетевых протоколов;
  • Виртуализация – в первую очередь KVM, также необходимо знать типы виртуализации и другие технологии;
  • Как настроить и работать с основными сервисами: dhcpd, NFS, sshd, DNS (bind), почта (postfix, Sendmail), веб (Nginx, apache, caddy, traefik, etc.), базы данных (MySQL, Postgres);
  • Базовый скриптинг на bash/python;
  • Базовый поиск и устранение неисправностей.

Docker/контейнеры

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

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

Что нужно знать:

  • Различия между контейнеризацией и виртуализацией;
  • Какие компоненты ядра Linux необходимы для работы контейнеров;
  • Как запускать контейнеры docker, используя публичные образы docker;
  • Уметь писать собственные Docker-файлы на основе лучших практик (порядок слоев, кэши, многоступенчатые сборки и т.д.);
  • Готовить файлы docker-compose для ускорения и упрощения локальной разработки;
  • Как работает сеть в docker;
  • Практики безопасности для docker и dockerized приложений;
  • Как перейти на dockerless инструменты, если это необходимо. Например, buildkit, buildah, kaniko и т.д.

Terraform и IaC

Среди огромного разнообразия инструментов (pulumi, Cloudformation, AWS CDK и т.д.), которые помогают донести подход IaC (Infrastructure as a Code) до масс, мы решили использовать Terraform в качестве основного инструмента для описания инфраструктурной составляющей.

Об этом необходимо знать:

  1. Terraform не является серебряной пулей и не может заменить абсолютно все инструменты. Для конфигурирования виртуальных машин лучше использовать следующие инструменты:a) Packer;b) Ansible/Chef/Puppet/Salt;c) Что угодно (bash?).
  2. Terraform не является инструментом управления мультиоблаками. Назвать его таковым можно с большой натяжкой. Управляя только AWS, вы не сможете развернуть инфраструктуру в GCP, используя тот же код. Каждый провайдер имеет свой набор ресурсов, и эти ресурсы называются по-разному. Однако использование Terraform позволяет не изучать новый синтаксис различных инструментов и новые подходы к организации кода для работы с разными облаками/провайдерами. Что в разы ускоряет процесс написания, сопровождения и передачи кода между инженерами.

Требования к знаниям:

  • Умение читать чужой терраформный код. Это означает, что вы можете прочитать и понять код, используемый в публичных модулях (параметры ввода/вывода, логика, используемые ресурсы); Свободное использование публичных модулей;
  • Способность описать инфраструктуру проекта в виде читаемого, сопровождаемого и многократно используемого кода;
  • Написание собственных модулей и понимание того, как их использовать;
  • Понимание того, как организовать структуру проекта;
  • Ручная работа с файлом состояния (импорт существующих ресурсов в код, удаление объектов, перемещение объектов между ресурсами (например – из ресурса в модуль));
  • У MadDevs есть Open Source проект GitHub – maddevsio/aws-eks-base: Этот шаблон содержит конфигурации terraform для быстрого развертывания кластера Kubernetes, поддерживающих сервисов и базовой инфраструктуры в AWS. Предполагается, что человек, владеющий навыками работы с Terraform на достаточном уровне, активно участвует в обсуждении улучшений, а также периодически вносит изменения.

CI/CD

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

Необходимые знания в этой области:

  • Понимание концепций CI, CD и CD. Знайте, что это такое и в чем различия.
  • Написание простых и читабельных конвейеров;
  • Умение переносить поток разработки на CI / CD конвейер, который может включать сложную логику:
    • откаты,
    • ручные шаги,
    • триггеры других заданий, сервисы,
    • уведомления..;
  • Оптимизация конвейера. Умение находить узкие места, ускорять и оптимизировать с точки зрения затрат;
  • Знание различных стратегий развертывания нового релиза и умение их реализовывать:
    • Скользящее обновление,
    • Синий/Зеленый;
    • Канарейка;
  • GitOps – что это такое, когда его лучше применять и какие инструменты лучше использовать;
  • Знание инструментария. Интеграция анализа кода инфраструктуры и приложений, образов и систем на предмет уязвимостей, а также проверки безопасности публичных конечных точек в этапы конвейера.

AWS/Azure/GCP (облако)

Каждый из этих облачных провайдеров предлагает более 100 услуг. Для детального ознакомления со всеми не хватит времени. Значительная часть сервисов совершенно уникальна и может никогда не встречаться в работе.

Что необходимо знать:

  • Как настроить сеть: сюда могут входить такие сервисы, как VPC, – Группы безопасности и ACL, топология и подсети, пиринги, VPN и т.д;
  • Виртуальная машина;
  • IAM;
  • Хранилища: блочные и объектные хранилища;
  • Сервисы развертывания контейнеров: ECS, AppRunner, Beanstalk, AppEngine, Web Apps и т.д;
  • Услуги баз данных (как реляционных, так и нет);
  • Управляемые кластерные сервисы Kubernetes;
  • Балансировщики нагрузки, CDN, WAF.

При построении облачной инфраструктуры также полезно:

  • Понимать и знать различные PaaS, IaaS и SaaS. Эти знания могут значительно ускорить начало проекта без лишних шагов;
  • Уметь мигрировать в облака из локальных и между облаками. Необходимо правильно рассчитать мощность и стоимость, выбрать необходимые сервисы, разработать и реализовать план миграции;
  • Постоянно помнить о парадигме оптимизации затрат и применять методы снижения затрат (споты, резервирование, вытесняющие узлы, лучшие и более эффективные сервисы или самостоятельные решения);
  • Понимать хорошо спроектированную структуру и уметь строить инфраструктуру на ее основе;
  • Знать, как построить инфраструктуру, соответствующую определенным требованиям (iso 27001, PCI, GDPR, HIPAA) и готовую к аудиту;
  • Уметь эффективно управлять обширной инфраструктурой (ежемесячная проверка составляет более 10 тыс. и выше).

Kubernetes

Там, где это возможно (а это 99,9999999% проектов), мы используем управляемые решения от облачных провайдеров, что определяет характер работы с k8s. Большую часть времени мы выступаем в роли пользователей кластера, а не администраторов кластера, поэтому список необходимых знаний основан на опыте пользователей:

  • Уметь различать управляемые и вендоры: GKE, EKS, AKS. Знать, в чем преимущества и недостатки.
  • Понимать, уметь работать и отлаживать основные объекты: Pod, Deployment, Replicaset, Jobs/Cron Jobs, DaemonSet, Statefulset.
  • Знать типы сервисов и что такое Ingress.
  • Уметь работать с Configmaps, Secrets, sealed secrets и external secrets.
  • Понимать разницу между контейнерами sidecar и init и их применение.
  • Автомасштабирование кластера. Использовать различные типы узлов и пулов для оптимизации затрат.
  • Применение передовых методов планирования стручков: nodeSelector, affinity, antiAffinity, topologySpread.
  • Управление ресурсами подсистемы/пространства имен.
  • Понимание и настройка RBAC и сетевых политик.
  • Знать различия между контроллерами Admission и Mutating. Уметь писать решения при необходимости.
  • Внедрять ServiceMesh там, где это необходимо.
  • Широкомасштабное применение/реализация практик безопасности. Использование OPA (Open Policy Agent) при необходимости.
  • Базовое понимание архитектуры: что такое компоненты, за что они отвечают и как они взаимосвязаны.

Helm

Поскольку helm – это инструмент для Kubernetes, все требования связаны со знаниями k8s, например:

  • “Чтение” публичных диаграмм helm. Какие переменные могут быть использованы, где они подставляются, и из каких k8s манифестов состоит диаграмма.
  • Создавайте свои собственные диаграммы. Там, где это необходимо, используйте циклы, условия и функции, чтобы сократить объем кода. Шаблоны должны быть читабельными.
  • При необходимости пишите зонтичные диаграммы.
  • Как настраивать/патчить публичные диаграммы (т.е. добавлять новые объекты).
  • Опыт работы с такими инструментами, как helm-diff и helmfile.

Наблюдаемость

Одним из наиболее важных компонентов современных систем является наблюдаемость. Невозможно эффективно донести изменения до пользователя и эффективно управлять ресурсами без хорошо настроенных инструментов наблюдаемости.

Мы часто слышим только о “мониторинге” и “протоколировании”. Наблюдаемость – это более широкое понятие, включающее в себя мониторинг, протоколирование и трассировку.

Ожидаемые навыки:

  • Умение работать с популярными системами мониторинга: Prometheus, VictoriaMetrics и т.д. и компонентами вокруг них (т.е. многочисленными экспортерами);
  • Умение работать с распространенными системами/стеками логирования: ELK, EFK, Loki, Datadog и т.д.;
  • Опыт работы с популярными системами трассировки: Jaeger, APM и т.д.;Отслеживание ошибок и мониторинг производительности: Sentry, NewRelic и т.д.;
  • Знание того, как создавать пользовательские дашборды для Grafana на основе требований;
  • Иметь навыки разбора и фильтрации логов в используемых системах логирования.

Безопасность

Сложно составить четкий список требований, поскольку мы не специалисты по безопасности, а скорее реализаторы. Поэтому вот общие положения:

  • Придерживаться принципа наименьших привилегий при работе с пользователями, учетными записями служб и предоставлении прав.
  • За последние несколько десятилетий процесс создания инфраструктуры кардинально изменился. Если раньше основной и ошибочной идеей была “безопасность по умолчанию” внутри своей частной сети”, то все новые подходы ближе к “Zero Trust” (мы не доверяем никому и ничему). Поэтому нужно стараться придерживаться этой концепции везде, где это возможно, как внутри, так и вне вашей инфраструктуры.
  • Знание стандартов ISO 27001, HIPAA, PCI DSS, GDPR, CIS Benchmark и OWASP.

Разработка решений

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

  • Умение декомпозировать задачи на атомарные подзадачи;
  • Умение оценивать свои усилия;
  • Умение конкретизировать требования;
  • Умение построить “дорожную карту” и двигаться по ней;
  • Умение находить и применять “эффективные решения” возникающих проблем и задач;
  • Управление документацией;
  • Самостоятельное исследование, разработка и презентация PoC;
  • Внедрение поддерживаемых и настраиваемых решений, готовых к производству.

DevOps/SRE

Всем известно, что DevOps и SRE – это в первую очередь культурные аспекты и практики. Где DevOps приходит из разработки и нацелен на доставку функций клиенту, а SRE приходит из эксплуатации и нацелен на стабильность. Наши требования довольно просты:

  • Иметь хорошее понимание SDLC, в первую очередь интересует модель Agile;
  • Знать, что такое Delivery Pipeline и Feedback Loop. Уметь строить/оптимизировать эти процессы вместе с командой, выбирать адекватный инструмент для каждого этапа;
  • Понимать и уметь построить процесс управления инцидентами:
    • Регистрация и категоризация,
    • Уведомление и эскалация,
    • Поиск и устранение первопричины,
    • Написание игровых книг;
  • Уметь писать вскрытия для систематического улучшения стабильности и качества;
  • Уметь разрабатывать и внедрять план аварийного восстановления, отвечающий требованиям бизнеса.

Мягкие навыки

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

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

Что выделяется среди навыков:

  • Самообразование. Сегодня, когда технологии меняются каждый день, невозможно полагаться на знания, полученные 10 лет назад (если речь идет о базовых вещах, таких как TPC / IP). Необходимо постоянно совершенствоваться и узнавать что-то новое. Без самообучения невозможно быстро улучшить свои сложные навыки.
  • Коммуникативные навыки. Рабочий процесс devops в основном основан на командной работе, коммуникациях, эскалации проблем и т.д. Также в рамках таких коммуникаций реально можно проверить и прокачать свои hard skills. Кроме того, не забывайте о том, как вы формулируете свои мысли при постановке целей и задач. Ваша команда должна получать четкие и понятные объяснения задач.
  • Самоорганизация. Способность работать самостоятельно без постоянного наставничества. Мы не говорим о том, когда вы только приступили к своим обязанностям и даже не знаете, в каком направлении вам нужно работать. Но чем быстрее вы сможете начать работать без постоянного наставника, тем быстрее пойдет процесс выравнивания.
  • Наставничество. Не обязательно быть старшим инженером, чтобы стать чьим-то наставником. Умение учить других – хороший способ закрепить и систематизировать свои собственные знания. Это также помогает развивать коммуникативные навыки.
  • Приверженность. Вы должны уметь добиваться своих целей в одиночку или работая в команде. Не всегда есть возможность попасть в проект с командой инженеров DevOps, поэтому вам нужно уметь ставить и достигать свои цели.
  • Свободное владение английским языком. Большинство источников знаний написаны на английском языке. Технологии также создаются на английском языке. Работа в разработке и эксплуатации ведется на английском языке. В нашей компании специально для оценки soft skills мы составили специальную матрицу, где выделены все необходимые навыки.

Резюме

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

Ранее опубликовано на maddevs.io/blog.

Оцените статью
Procodings.ru
Добавить комментарий