Всё началось с того, что команде, с которой я работаю, предложили заказ на миграцию приложений из Docker Compose “во что-нибудь более масштабируемое, отказоустойчивое и гибкое. Например, Ansible или Kubernetes.” Приложение, которое планировалось разворачивать, использовалось для управления, хранения, поиска данных постов из биржи телеграм-рекламы (статистика, текст, видео, изображения), структурирования по группам и визуализации статданных с использованием Datadog, который в последствии заменили на netdata.
Команда приняла решение использовать Kubernetes, во многом благодаря посту @ronrz, который подробно описывал преимущества решения в похожем кейсе. Также на выбор решения повлиял опыт коллег из ЕАЕ-Консалт, которые успешно использовали Kubernetes в своей практике. И всё это прекрасно, но у меня возникли проблемы. Как системному аналитику и по совместительству PM проекта, с минимальным опытом в DevOps, пришлось изрядно попотеть с пониманием многих вещей, касающихся Kubernetes. Под катом подробно о статьях и книгах, которые помогли мне разобраться с оркестратором, понять, чего хочет заказчик, сформировать требования к работе системы в целом, отказоустойчивости, масштабированию и безопасности.
Предупреждение: прочтение и осмысление описанных материалов не превратит аналитика в DevOps инженера, если он не был им до прочтения. При этом они здорово помогут формировать и формулировать системные требования, разобраться в том, что может платформа и как она устроена, а также предложить заказчику передовые решения и практики для решения проектных задач.
Предыстория
(спойлер, можно не читать и сразу перейти к обзору книг)
Если с тем, как описывать требования к контейнеризации в Docker у меня был успешный опыт, то о работе с оркестраторами я имел крайне туманное представление и в своей практике впервые столкнулся с подобной задачей.
До первого интервью с заказчиком оставалось немногим более месяца, а наш техлид не имел достаточно времени для разжевывания вещей, которые представлялись ему очень простыми. Понимая, что кивать и формулировать требования как бог на душу пошлёт, копируя в ТЗ дословные формулировки заказчика, не выйдет, решил больше почитать о Kubernetes. Смутно и абстрактно сформулированные заказчиком цели миграции дали понять, что упор нужно сделать на, как минимум, обзорном изучении 4-х направлений:
Базовые представления о запуске приложений, миграции и развертывании в kubernetes, настройке прав, ролей, ограничении ресурсов.
Разработка отказоустойчивой архитектуры в kubernetes.
Автомасштабирование, скейлинг контейнеров и инстансов.
kubernetes security — безопасность рабочих нод, подов, сетевых служб и системных компонентов.
Статьи
Сначала мне казалось, что усвоить необходимый объём информации можно за пару дней, почитав статьи на Хабре. Наиболее полезными постами оказались:
K8S для начинающих — обзорный цикл постов о kubernetes для нубов.
Как изучать Kubernetes джуну — и зачем — о личном опыте начинающего разработчика, многое оказалось полезным.
Контейнеризация понятным языком: хранение данных и безопасность в Kubernetes, зачем нужен Ansible — интервью, в котором затрагивались вопросы безопасности.
Посты помогли с базовыми представлениями, но всё оказалось сложнее, чем мне казалось. Как в старом анекдоте. Чем дальше я “заходил в лес”, тем толще оказывались “партизаны”. В итоге, решил читать книги. Ничего специфического для SA и PM, например, по формированию требований к миграции и размещению приложений, а также по управлению проектами применительно к Kubernetes я не нашёл, ни статей, ни книг. Решил использовать литературу для DevOps-инженеров.
Книги
Сайфан Джиджи. Осваиваем Kubernetes. Оркестрация контейнерных архитектур. 2019 год
Я рекомендовал бы тем, кто ничего не знает о Kubernetes, начинать с этой книги. Там в доступной форме и последовательно описана архитектура оркестратора, принципы и методы работы с ним. Книга раскрывает основные понятия, такие как ноды, поды, сервисы и компоненты, а также узлы, кластеры, метки и селекторы меток, контроллеры репликации, наборы реплик, тома, StarflSet и др. Архитектура и API описаны достаточно подробно, в частности, даны основы проектирования распределенных систем.
Книга с нуля обучает созданию микросервисов с сохранением состояния, описывает возможности Kubernets при создании ресурсных ограничений, горизонтальном автомасштабировании подов, работе с хранилищами данных. Особенности сетевой конфигурации, настройки и интеграции плагинов для наиболее распространённых задач даны на реальных примерах. Идеальна для нубов, вроде меня, связанных с разработкой опосредовано, и разработчиков, которые только знакомятся с платформой.
Главное в книге для системного аналитика: дает хорошее базовое представление об архитектуре и возможностях оркестратора, понимание которых позволит формировать требования к развертыванию достаточно детально. Позволяет понять возможности масштабирования будущей системы, а также узнать о функциях ограничения и разделения ресурсов по пространствам имен. Рассказывает об ограничении прав для различных ролей пользователей. Формирует целостное представление о функциях и понимание того, что из хотелок заказчика может быть реализовано.
Об авторе:
Джиджи Сайфан (Gigi Sayfan) — главный архитектор ПО в Helix. Разрабатывает приложение по обмену мгновенными сообщениями и морфингу на протяжении последних 22 лет. Пишет код на Go, Python, C/C++, C#, Java, Delphi, JavaScript, Cobol и PowerBuilder. Создает приложения для операционных систем Windows, Linux, macOS, Lynx.
Рецензенты:
Дес Друри (Des Drury) — директор компании Cito Pro, соорганизатор Мельбурнской группы пользователей Kubernetes. Автор дистрибутива Kubernetes Open Data center, страстный технолог с более чем 25-летним опытом работы в ИТ-индустрии.
Якуб Павлик (Jakub Pavlik) — сооснователь, главный архитектор компании Tcp Cloud.
Создал облачную платформу IaaS, для развертывания и администрирования OpenStack-Salt и OpenContrail.
Билджин Ибрам и Роланд Хасс, Паттерны Kubernetes. Шаблоны разработки собственных облачных приложений — 2020
Книга для меня стала источником информации о методологии и полезных типовых решениях при развертывании приложений на платформе. Материалы скорее для подготовленного читателя, в целом книга рассчитана на DevOps-инженеров, которые уже знакомы с Kubernetes. При этом крайне полезна при формировании требований к системе. Понимая паттерны и принципы, описанные в книге, можно сходу предложить заказчику готовый вариант, который решает его проблему, что серьёзно упрощает системный анализ и сокращает время на подготовку его артефактов. В нашем случае речь шла о решениях по отказоустойчивости и ограничении ресурсов.
Об авторах:
Билджин Ибрам — экс-менеджер по продукту и архитектор Red Hat. 10 лет проектирует масштабируемые, отказоустойчивые распределенные системы.
Роланд Хасс — главный инженер-программист и архитектор Red Hat OpenShift Serverless. В разработке 25 лет, до этого работал системным администратором. Участник Knative и член комитета по техническому надзору Knative. Разработал мост JMX-HTTP Jolokia и автор плагинов Maven для Docker, Kubernetes и OpenShift.
Ivan Piskunov. Kubernetes security. Guide for beginners from zero to hero
Книга полностью посвящена вопросам безопасности в Kubernetes и детально рассматривает все аспекты безопасности платформы, начиная от самых тривиальных задач, заканчивая не банальными и масштабными задачами. Текст насыщен подробными объяснениями и практическими лайфхаками, которые серьёзно упрощают жизнь разработчику, а аналитику позволяют ссылаться на опыт автора, предлагая то или иное готовое решение. Книга полюбилась не только мне, но и всей команде, наш техлид, например, отметил, что в книге рассмотрены задания, которые дают на сертификационном экзамене.
Кроме того, автор рассмотрел несколько кейсов со взломом инфраструктур, использующих Kubernetes, в 2017, 2018 и 2019 годах, в таких компаниях как Tesla и Microsoft. По каждому кейсу дается обзор причин факапа со взломом и экспертные выводы автора. Более того автор подготовил github, где выложил все отчеты, референсы и материалы, использованные при написании книги, что, по мнению нашей команды, сопоставимо по ценности самого текста.
Репозиторий дает много дополнительной информации, не могу сказать, что я смог почерпнуть там много для себя, но в процессе работы наши инженеры и техлид не раз обращались к нему, отмечая полезность во время ретроспектив. Книга доступна бесплатно в электронном варианте и только на английском языке, что немного удивило, учитывая, что автор русский. Между тем, читается хорошо, для понимания мне вполне хватило моего Upper Intermediate.
Об авторе:
Иван Пискунов — магистр компьютерных наук, независимый эксперт и практикующий DevSecOps. Спикер таких мероприятий как: PHDays, ZeroNights, CISO Forum, РусКрипто, BlockChain Week, Код Безопасности. Участник профессиональных комьюнити RISSPA, RISC. Сертифицирован CCNA, CEH и MCSA.
В сухом остатке
Это не всё, что я прочитал о Kubernetes, но, как мне представляется, именно эти статьи, интервью и книги помогли мне глубже понять задачи миграции, разобраться с платформой и точно сформулировать требования к системе.
Эти материалы, по моему мнению, оказались максимально полезными при изучении платформы почти с нуля и имели наибольшую практическую ценность для меня, как для SA и PM проекта, а в некоторых случаях и для команды, упростив развертывание и показав неочевидные решения по отказоустойчивости и безопасности.
Хочу подчеркнуть, что я не DevOps Engineer и DevSecOps. Возможно, специалисты, давно знакомые с платформой, сочтут эти материалы не слишком интересными, но я смело рекомендую их тем, кто столкнулся с похожими задачами и не является экспертом.