Зачем разработчику сертификат по Kubernetes и как успешно сдать экзамен
Занимаетесь разработкой, но еще не знаете, что такое Kubernetes? Не переживайте, мы расскажем:
- Что такое Kubernetes.
- Что за сертификаты такие и зачем они нужны.
- Про выбор варианта сертификации.
- Про экзамен.
- Про подготовку к экзамену.
- Разные тонкости.
Добро пожаловать под кат.
Так зачем же разработчику сертификат по Kubernetes? Краткий ответ на этот вопрос — незачем, если вы явно не пересекаетесь и не заинтересованы в Kubernetes. Однако в рамках статьи я попробую заинтересовать вас, а там, глядишь, и сертификат захотите получить.
В Tinkoff по большей части я занимаюсь разработкой фронтенда и хочу поделиться чем-то, отличным от фронтенда. Во фронтенде мы любим всякие хайповые штуки, а еще больше любим, когда они приносят реальную пользу.
Про Kubernetes
Для начала — кратко от разработчика разработчикам про то, что такое Kubernetes. Вы же используете Docker или что-то похожее? Надеюсь, это так.
Так вот, допустим, вы используете Docker, упаковываете приложения в Docker-образы и деплоите в прод. Раскатали и идем пить кофе? Это работает, если у вас простое приложение и вас полностью устраивает то, как оно работает. Но этого недостаточно, если требования к вашим приложениям выше обычного. Под повышенными требованиями я имею в виду, например, такие:
- Отказоустойчивость. Если запущенное в единственном экземпляре приложение выйдет из строя — у вас возникнут проблемы. И было бы хорошо иметь несколько инстансов и балансировку между ними.
- Масштабируемость. Когда нагрузка на приложения станет высокой, балансировка не поможет. В этом случае нужна оптимизация приложения или даже инфраструктуры. А что, если на это сейчас нет времени? В этом случае неплохо бы уметь быстро увеличить количество инстансов приложения.
- Лимиты по ресурсам. Тут вроде и так понятно: хочется как-то ограничивать приложения, не давая им отжирать процессор и память.
- Окружения. Надеюсь, вы не катите приложение сразу в прод? Нам нужны различные окружения, помимо prod, еще хотя бы dev.
- Объединение приложений в группы. Что, если приложения должны быть не так сильно изолированы друг от друга? Например, им нужен общий диск, namespace и так далее.
- Безопасность и контроль доступа. Когда в компании множество команд и продуктов, потребуется организация доступа к кластеру, к примеру, в соответствии с ролями и группами.
- Сбор метрик и логов. А также какой-то общий подход по сбору этой информации.
- Сетевое взаимодействие. Как это реализовать, если имеется большое количество нод? Как обеспечить доступ одного приложения к другому по dns имени?
- А также относительно простая интеграция с известными решениями и запуск приложений по расписанию.
Docker с вышеперечисленным точно не справится, придется искать другое решение. Можно написать свой велосипед, но это может быть очень долго и дорого. Среди подходящих решений Kubernetes выделяется тем, что он предоставляет достаточно простую возможность реализации вышеперечисленных требований, и это далеко не все его возможности.
Прочитав такое описание, может показаться, что теперь админам вообще будет нечем заняться. Однако это не так. Kubernetes — штука сложная сама по себе, но она не решает всех проблем, и кроме нее есть множество других продуктов, без которых не обойтись. Kubernetes стоит рассматривать как решение, которое с определенной точки зрения является ядром той экосистемы, где осуществляется работа ваших приложений.
Если проводить аналогии с миром разработки, то, как мне кажется, неплохо сравнить Kubernetes с фреймворком: у нас есть исполняющая среда, где выполняются приложения, есть строгие границы в виде интерфейсов с возможностью кастомизации и расширения, а также полно абстракций, которые позволяют относительно просто и удобно управлять всем этим добром. Заинтересовались и появилось желание почитать документацию? Но вот беда: документация к Kubernetes — это не какой-то набор гайдов, рассчитанный на новичков, и просто так разобраться у вас не получится. Как же быть? Далее в статье вы найдете ответ на этот вопрос.
Личная мотивация в сертификации
Kubernetes я начал интересоваться около года назад, на своих личных проектах проходил всякое. Если по порядку выстроить все используемые решения в цепочку, это будет выглядеть как-то так: VMWare под Windows → Hyper-V → Хост машина под Linux → chroot jail → Xen → KVM → LXC → Proxmox → Docker → Kubernetes. Попробовав различные решения, с уверенностью могу сказать, что Kubernetes сильно отличается от того, что было ранее.
Порог входа здесь достаточно высокий: даже просто запустить кластер в прод является проблемой, не говоря уже о том, как там все работает и как это добро поддерживать. И я стал разбираться, пробовать различные решения и статьи, которые позволяли приготовить какой-никакой production ready кластер.
Желание получить сертификат Certified Kubernetes Administrator (CKA) возникло как раз во время использования личного кластера для своих проектов. То есть вроде все получается, кластер работает, но то, что происходит внутри него — для меня оставалось загадкой. Спросить было некого, а документация не сильно выручает, так как она описывает все и сразу, что отпугивает новичков. По этой причине решил идти другим путем: изучил необходимое в процессе подготовки к сертификации CKA.
Стоит отметить, что, хоть в компании и используется Kubernetes, я не занимаюсь развитием и поддержкой этой платформы. Поэтому об инфраструктуре в компании могу рассказать лишь то, что мне, как разработчику, для деплоя приложений достаточно знать yaml при редактировании helm-чартов, и дальше этого смотреть не обязательно, так как многое уже сделано со стороны администраторов.
О сертификации в целом
В IT немало людей с предвзятым отношением к сертификатам, и, с одной стороны, их можно понять: в сети достаточно историй про то, как на собеседование приходит человек с множеством сертификатов и выясняется, что знаний по факту нет. Так как я довольно часто провожу собеседования, предварительно просматривая резюме, замечу, что в моей практике подобных историй еще не было.
Как бы это ни казалось странным, но моя личная статистика говорит, что вероятность встретить хорошего разработчика повышается, если в резюме есть информация о сертификатах. Конечно же, в данном случае уровень разработчика определяется не по сертификатам, а в ходе собеседования, но вот такая вот интересная закономерность. Это не обязательно должны быть сертификаты по технологиям фронтенда. Кстати, если вы знаете какие-то интересные сертификации — буду рад узнать от вас об этом в комментариях.
Давайте, я попробую ответить, зачем же проходить все эти сертификации, основываясь на своем первом и давнишнем опыте при получении сертификата по C# от Microsoft? Думаю, правильный ответ такой: это помогает структурировать знания и устранить в них мелкие, но порой значимые пробелы.
Как упоминал выше, хорошей практикой является получение сертификата на начальном этапе. Такое обучение начинается с чистого листа и на выходе получаем сертифицированного специалиста, а не самоучку-стековерфловера. Это не всегда так, многое зависит от конкретного человека, тем не менее считаю, что честно полученный сертификат помогает избавляться от явных костылей в коде на начальных этапах развития разработчика.
Также можно получить сертификат, будучи уже достаточно зрелым разработчиком. Вы, наверное, спросите: «А зачем?» Еще один момент заключается в том, что экзамен — это составляющая привычного для всех нас процесса обучения, потому что не менее важно проверить, действительно ли вы изучили все правильно. Не раз замечал за собой, что вроде бы все выучил, а на деле выходит, что где-то что-то упустил. С этим определенно может помочь экзамен.
Кто-то наверняка отметит, что в IT сейчас все очень быстро развивается и знания, полученные в ходе подготовки к получению сертификата, так же быстро станут неактуальны. Не сталкивался с этим и предположу, что это может зависеть от технологии, но, на мой взгляд, вложение в Kubernetes оправданно и вряд ли в ближайшем будущем основные части Kubernetes кардинально изменятся.
Мне подготовка к экзамену помогла лучше усвоить базовые концепции вроде SSL-сертификатов, подходы по организации отказоустойчивой инфраструктуры, лучше стал понимать сети, linux, работу с дисками (не говоря уже о том, что теперь я знаю, как выходить из vim несколькими способами).
Выбор варианта сертификации
На текущий момент есть возможность получить сертификаты не только от The Linux Foundation, однако в рамках статьи рассмотрим возможные варианты сертификации именно от них как дефолтные. Подробнее про The Linux Foundation и CNCF уже писали здесь. На выбор есть три варианта сертификации:
Certified Kubernetes Application Developer (CKAD). Подходит небольшим компаниям, которые используют On-Premise Kubernetes и где разработчики имеют больше свободы в плане взаимодействия с кластером. По этой причине разработчикам приложений особенно важно понимать, как проектировать, собирать, настраивать и запускать приложения в Kubernetes. Во время подготовки к получению CKAD вы познакомитесь с базовыми концепциями и в дальнейшем сможете намного лучше понимать вышесказанное.
Certified Kubernetes Administrator (CKA). CKA более сложный и рассчитан на администраторов, которые хотят разобраться, как устроен кластер Kubernetes, как его развернуть, управлять и поддерживать. Если вы планируете получить CKA, то CKAD потом получать смысла нет.
Certified Kubernetes Security Specialist (CKS). CKS — совсем новый и доступен с ноября этого года. Рассчитан на тех, кто планирует сделать инфраструктуру более безопасной. Если первые два варианта частично пересекаются и отличаются глубиной погружения, то CKS существенно дополнит ваши знания, и, на мой взгляд, это крайне важно знать администратору кластера. Поэтому после CKA можно попробовать получить и CKS.
Про экзамен
Предупрежу, что в этом разделе, как и в других, отсутствует информация о вопросах на экзамене, ответах и иная другая, которую разглашать нельзя. Также прошу не оставлять подобную информацию в комментариях. Заранее благодарю и идем далее.
Для всех трех вариантов сертификации стоимость экзамена одинаковая — 300 долларов (CKAD, CKA, CKS). После покупки у вас будет один год на планирование даты экзамена, а также бесплатная попытка, если не получится сдать экзамен.
Запланируйте экзамен заранее, чтобы была возможность выбрать наиболее удобное для вас время или перенести его в случае чего (можно перенести не позднее, чем за 24 часа). Запланировать экзамен можно не раньше чем за сутки до начала.
Правил на экзамене несколько: правила по обстановке, общие правила поведения, правила непосредственно по вашему направлению. Обязательно прочитайте Candidate Handbook, а здесь рассмотрим только основные моменты.
Экзамен проходит в онлайн-формате, поэтому вам точно потребуются следующие вещи (обязательно ознакомьтесь с полным списком):
- Ноутбук или десктоп (камера и микрофон обязательны).
- Загранпаспорт и по возможности права или банковская карта.
- Комната без посторонних.
- Чистый стол. У меня еще был стакан с водой, мышка и коврик (если вы не гуру тачпада — советую).
Экзамен длится два часа. Вы можете явиться на него за 15 минут до начала, проверить, всё ли в порядке, и начать пораньше. Желательно взять ноутбук, так как придется показать на камеру комнату, где вы сидите, а также ваше рабочее место. Во время экзамена выполняйте то, что вам пишет в чате проктор (надо немного понимать английский) и не нарушайте вполне адекватные правила.
Также вы можете сделать перерыв на пять минут с разрешения проктора, но учитывайте, что часы тикают, и не сильно задерживайтесь. Кстати, заранее установите их расширение для браузера и настройте разрешения на доступ к экрану и камере.
Кроме вкладки с экзаменом вы можете открывать только одну дополнительную вкладку с одним из следующих адресов (и их поддоменов):
На странице документации можно и нужно пользоваться поиском, но именно вы должны контролировать, что открываете разрешенный адрес из списка выше. Лично я вижу смысл только в документации — гитхаб и блог мне понадобились только во время подготовки к экзамену.
За 2 часа у вас будет 15–20 задач (это именно задачи, а не тесты), 4 (CKAD) / 6 (CKA) кластеров Kubernetes, между которыми вы будете переключаться по ходу выполнения задач. Также крайне рекомендую прочитать все советы из официального источника. Чтобы сдать экзамен, необходимо будет набрать минимум 66%.
В течение 36 часов после экзамена вам на почту придет письмо с результатом. Мне пришло как раз через 30–36 часов, так что, скорее всего, придется потерпеть.
Если не получилось сдать с первой попытки, у вас будет бесплатная вторая, которой вы сможете воспользоваться в любой момент в течение одного года. Если же опять не получится — готовьте 300 долларов и пробуйте снова.
Для начала рекомендую развернуть свой кластер Kubernetes и запустить в нем какие-нибудь ваши проекты. Как минимум можете использовать minikube, а лучше развернуть через kubeadm. Для более серьезного погружения в процесс развертывания и конфигурации кластера рекомендую Kubernetes The Hard Way.
Конкретно к экзамену поможет подготовиться курс на udemy от Mumshad Mannambeth (CKAD/CKA). Также есть официальные курсы: базовые — бесплатные, но за остальные придется платить. Если вы хотите получить что-то большее, чем просто навыки для прохождения экзамена, то посмотрите вот этот курс.
Кроме курсов и рекомендации попрактиковаться на своем кластере у вас есть возможность получить практические навыки в эмуляторе. Конечно же, и обстановка, и вопросы на реальном экзамене будут другие. То есть это ни в коем случае не дампы вопросов с экзамена, а составленные разработчиками эмулятора задачи, которые помогут лучше понять Kubernetes. Так что на экзамене они вам тоже могут пригодиться. Стоимость — 30 евро, и, на мой взгляд, она вполне оправдана.
Также не стесняйтесь и заходите в этот телеграм-канал, где вы можете оперативно получить ответ на свой вопрос, а также обменяться опытом.
- Скорость. Учтите, что делать всё нужно очень быстро, времени впритык.
- Для начала не забудьте настроить автокомплит и алиас. Лично мне не понадобилось делать какие-то более сложные вещи, вполне достаточно и этого.
- Закладки в браузере. По ходу подготовки рекомендую добавлять в закладки важные моменты, чтобы иметь возможность быстро переходить на нужную страницу, если знаете, где искать ответ. Лично я не так часто пользовался всеми добавленными закладками, но пару раз это помогло решить задачи.
- Используйте поиск вместо навигации по разделам. В документации есть возможность выполнять поиск — рекомендую воспользоваться.
- Нас предупреждают, что могут быть лаги, поэтому постарайтесь сделать так, чтобы с вашей стороны с соединением не было проблем.
- Учитывая предыдущий пункт, для ускорения работы в терминале рекомендую выбрать в качестве редактора vim. Если вы с ним не знакомы, то для начала будет достаточно вот этого курса.
- Не нравится vim? Предложу следующий лайфхак: используйте встроенный редактор (будет доступен на странице экзамена) для быстрого редактирования манифестов.
- Tmux/screen. Лично я не использовал на экзамене, так как очень просто запутаться, когда у тебя 6 кластеров и мало времени.
- Суперважный совет: пропускайте задачи, которые не можете решить. Не зацикливайтесь на конкретной задаче, если у вас полно нерешенных. В любой момент вы сможете вернуться и продолжить.
- JSONPath. Много практики. Придумайте себе задачки на получение различной информации из кластера, активно используйте циклы и условия.
- В редакторе экзамена составляйте табличку вида Номер вопроса — Балл — Результат. Потом сможете подсчитать сумму, только не забудьте скопировать в буфер, перед тем как закончите экзамен. Вести подсчет во время экзамена стоит только в том случае, если вы уже выполнили все задачи.
- После экзамена доступа к вопросам у вас не будет, как не будет и ответов на них. Поэтому сразу после экзамена рекомендую запомнить те моменты, в которых вы сомневались, и почитать документацию или проверить на практике на своем кластере.
Что дальше
Безусловно, не стоит останавливаться на достигнутом, ведь получение сертификата дает только основы и это лишь небольшая часть того, что необходимо понимать. Сдав экзамен и получив сертификат, вы удивитесь, насколько много вещей, которых вы еще не знаете, и некоторые из них могут быть вам полезны. Ведь Kubernetes — это только часть инфраструктуры. Чтобы хотя бы примерно понимать масштаб, можно посмотреть на специально подготовленную CNCF страницу со множеством продуктов от множества различных вендоров. И если посмотреть на раздел Scheduling & Orchestration, можно заметить, что и Kubernetes там не единственный. Кстати, сама страница не просто перечисляет продукты, а является интерактивной картой и отражает путь развития Cloud Native.
Если же остановиться на Kubernetes, то и здесь есть пути развития, ведь на текущий момент решение не стоит на месте и быстро развивается, кроме того, экзамен не покрывает все существующие возможности. А может, вы захотите начать разрабатывать под Kubernetes и реализовывать свои custom schedulers, operators или что-то еще, не говоря уже о том, что теперь можно с пользой для кластера поиграть в DOOM или Minecraft.