Pull to refresh
320.42
KTS
Создаем цифровые продукты для бизнеса

Как изучать Kubernetes джуну — и зачем

Reading time7 min
Views25K

Всем привет! Меня зовут Лина, я backend-разработчик в KTS.

В нашей компании развита система наставничества. Каждому сотруднику строится индивидуальный план развития, включающий в себя как soft skills, так и необходимые для работы технологии. Раз в полгода мы проводим ревью, и к следующему необходимо прокачать какие-то навыки из списка. Одной из моих задач для повышения было «Изучить Kubernetes». 

В статье я:

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

  • Расскажу о препятствиях, с которыми столкнулась

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

Для лучшего понимания привожу свой опыт разработки до изучения Kubernetes: полгода production-разработки, учебные проекты МГТУ им. Н.Э. Баумана и курсы в Технопарке. 

Что будет в статье:

Kubernetes, что это? ?

Давайте представим, что есть приложение, которое нужно отправить в продакшен и обеспечить к нему подключение, регулярно обновлять и поддерживать его работоспособность. Конечно, всё это легко, если просто поднять приложение на каком-то сервере. Можно настроить мониторинги, и они будут следить, что приложение поднято, обновлять, когда нужно.

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

Kubernetes следит за рабочим состоянием приложений и автоматизирует раскладку, поддержку и обновление. Его особенностью является декларативный подход: пользователь не говорит системе, что надо делать, а описывает, как она должна выглядеть. После этого Kubernetes приводит систему в нужный вид.

Зачем джуну-бэкендеру Kubernetes? ?

Нужно ли джуну этим заморачиваться — вопрос спорный. 

С одной стороны, начинающему разработчику Куб может вообще не понадобиться. Особенно если инфраструктура уже настроена: разработчик запушил коммит, замёрджил, всё само разложилось. Логи посмотрел в отдельной вкладке, а ошибки раскладки починит админ, который и настроил всю систему. 

Но вот вам несколько пунктов «зачем». 

  • Для понимания работы инфраструктуры компании и проектов. Это одна из основных причин. Я считаю, что для видения общей картины бэкенд-разработчик должен знать, как работает среда, в которой запустят проект. В перспективе такое понимание поможет не только проектировать, но и в целом лучше писать код. 

  • Для большей независимости от старших коллег. Конечно, джун вряд ли получит доступ к проду… Но разобравшись, вполне сможет взаимодействовать с dev-кластером. Можно самому заглянуть внутрь подов, запустить какую-то команду из консоли контейнера или перезапустить джобу.

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

Под изучением Kubernetes я не имею ввиду изучить досконально и научиться поднимать кластер. Даже знание базовых вещей может помочь в понимании его работы.  

Подготовка ?

Первое, что я сделала — подтянула знания в смежных областях. Как оказалось, на тот момент я еще не до конца понимала некоторые вопросы, и их незнание определённо мешало мне продвинуться.

1. Контейнеризация и Docker ?

Пожалуй, это основная тема, которую нужно знать перед обучением. И Kubernetes, и Docker используют технологию контейнеризации. На тот момент я уже активно использовала Docker для запуска каких-то сервисов, но не понимала, как строится эта технология: как собрать свой Docker-образ, как его доставить на сервер, слои и многое другое. Поэтому пришлось уделить некоторое время, чтобы разобраться. 

Для этого я в основном читала статьи, например:
Изучаем Docker, часть 1 — серия статей про работу с Докером, которая когда-то помогла мне погрузиться в контейнеризацию.

2. Сети ?

Если проблему непонимания работы Docker можно обнаружить сразу, то недостаток в понимании сетей я осознала несколько позже. Возможно, сюда бы я отнесла не только сами сети, но и сети в linux, DNS, iptables. Когда я поймала себя на том, что не очень хорошо понимаю, как это работает, то поняла, как сильно это тормозит обучение. 

Изучение Kubernetes ?

Бесплатные курсы ?

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

На тот момент было несколько бесплатных курсов на Coursera и на Stepik.

Честно, я потратила много времени на просмотр этих курсов, и это не дало мне ничего. Там долгие введения, много организационных роликов, и только через некоторое время начинается неспешное объяснение. 

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

Документация ?

Поняв, что бесплатные курсы никак не помогают, я решила обратиться к первоисточнику: официальной документации

В целом, документация — ключ к изучению любой технологии. Так ты точно узнаешь про основные компоненты. Здесь даже есть свой минитренажёр. 

Однако, читая документацию, я не могла сложить картину воедино. Читала статью за статьей, понимала, что такое поды, деплойменты, сервисы, но не могла сопоставить их вместе. А иногда натыкалась на какой-нибудь термин — и тратила 2 часа ушло на чтение того, что такое планировщик и как он устроен. При этом я ещё в сущности не понимала, что такое кластер, и как взаимодействуют компоненты.

Статьи в Интернете ?

Возможно, это первое, к чему следует обратиться. Наверное, наиболее дружелюбный для новичков подход — прочитать статью. 

Изучать Куб по статьям оказалось намного приятнее. В отличие от документации, в них обычно выстроена структура «от простого к сложному» и «от общего к частному», что значительно облегчает понимание. Конечно, все зависит от статей. Примеры были довольно реалистичные, и статьи построены в виде руководства по раскладке какого-то приложения, что можно воспроизвести.
Минус — часто эти руководства заточены под частный случай и не разбирают общие вещи.

Вот несколько статей, к которым я обращалась

Книга ?

Последнее, что я сделала — обратилась к книгам. Сначала большинство мне показались либо сложными, либо совсем не подходящими для новичков. Но потом я случайно наткнулась на «Kubernetes в действии» Марко Лукши. 

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

Главная проблема ?

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

Тогда руководитель предложил идею: «Вот ты сейчас пишешь проект, разложи его в Kubernetes сама с нуля». 

Я начала пробовать. Локально подняла minikube и пыталась в нём разложить проект. Minikube — это кластер-Kubernetes из одной ноды, который можно поднять на своем компьютере и попытаться что-то разложить. 

Схема кластера MiniKube
Схема кластера MiniKube

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

Самая большая сложность для меня была с настройкой ingress. Как раз тут я поняла, что плохо знаю работу сетей, и вернулась подтягивать это.  Ещё была проблема с шаблонизатором Kustomize. Все примеры, которые я до этого пробовала, совсем не использовали шаблонизацию.

Я провела несколько часов в попытках разложить бота. Очень много экспериментировала, меняла манифесты, пробовала прокидывать некоторые параметры, изучала как сделать, чтобы конфиги пробрасывались как переменные окружения. И вот, наконец, бот разложился и правильно работал.

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

Советы от других DevOps-инженеров?

В статье мне хотелось рассказать свой путь изучения. Я пробовала совсем разные методы и ресурсы. Некоторые из них мне подошли, некоторые нет. До сих пор изучаю некоторые фичи, которые не освоила в начале. Знания применяю в работе и личных проектах.

В изучении мне помогали несколько наших девопсов. Вот пара наблюдений и советов от них: 

Для меня самым трудным в понимании почему-то было осознание того, как работает expose приложений в Kubernetes вовне. Может быть, это было из-за недостатка обучающих ресурсов в то время,  а может, из-за того, что не удавалось схватить какие-то ключевые моменты. Большинство туториалов были завязаны на облачные managed-решения, а мне хотелось в то время понять, как то же самое сделать самостоятельно. И только путем постоянных экспериментов с различными конфигурациями, технологиями, сопровождающиеся постоянным дебагом и бессонными ночами, удалось погрузиться в то, как всё работает внутри, и что на самом деле в себе скрывают те или иные абстракции в Kubernetes.

Игорь Латкин, cистемный архитектор KTS

Поможет практика, практика и еще раз практика. Познакомиться с документацией и уметь с ней работать, понять архитектуру Куба и его компоненты, а не просто как делать "kubectl apply". Углубиться в понимание tls/ssl — корневые/промежуточные/клиентские сертификаты, рантайм контейнеров. И всё-таки, конечно, просто больше практиковаться — со временем понимание всего вокруг придет.

Леонид Гвоздков, devops-инженер

Советы из комментариев к этой статье


Если вы всё ещё не решили, как начать изучение, рекомендую пройти курс в нашей школе:
«Деплой приложений в Kubernetes». На курсе мы рассмотрим самые важные концепции, необходимые для управления кластерами любой сложности и научим применять эти знания на практике.

Почитать про курс подробнее можно здесь: https://vk.cc/cn0ty6

С Наступающим! ?


Другие статьи про DevOps для начинающих:

Другие статьи про DevOps для продолжающих:

Tags:
Hubs:
Total votes 21: ↑19 and ↓2+20
Comments10

Articles

Information

Website
kts.tech
Registered
Founded
Employees
101–200 employees
Location
Россия