Привет всем, на днях как раз получил соответствующий сертификат CKA - Certified Kubernetes Administrator (ID Number: LF-u35sabcfor) и хотел бы поделиться своим опытом подготовки к сдаче экзамена, а так же дать советы и рекомендации по его успешному прохождению. Не претендую на истину в последней инстанции, а лишь делюсь личным опытом и впечатлениями. Возможно кому то будет полезно.

Немного о себе, для понимания контекста - на данный момент я senior devops инженер с 7 годами опыта работы, последние 5 лет работаю с JFrog, а до этого 15 лет опыта в качестве system administrator. Так что т.н. background более чем богатый - 20+ лет. Не могу сказать что без опыта невозможно сдать экзамен, но он значительно облегчает понимание многих тем, и как следствие более успешное прохождение экзамена. Если кто-то сдавал CKA совсем без опыта - поделитесь в комментариях, будет интересно.

Думаю, что о Kubernetes (k8s далее) в IT среде в целом, и в частности в среде devops, не слышал лишь очень ленивый или как любят говорить - "домохозяйки". Он у всех на слуху и многие его используют, насколько правильно и эффективно - это уже отдельный вопрос. На момент написания статьи, есть лишь один официальный центр сертификации по k8s - Cloud Native Computing Foundation (CNCF) в сотрудничестве с The Linux Foundation.

Нужен ли вам этот сертификат и для чего его получать - тут каждый должен ответить для себя сам. Лично мое мнение - сертификат гарантирует, что человек, который его получил понимает предметную область и с ним будет намного легче работать. Естественно, сертификат никаким образом не заменит вам опыт работы с k8s, особенно в production среде.

Так как последние полгода на проекте мы активно используем k8s, то и мне пришлось с ним столкнуться так сказать в живую. Хоть мы и используем Managed решение от AWS - EKS (Elastic Kubernetes Service), что само по себе снимает часть проблем по управлению кластером с вас, но все таки оставляет много задач. Принимая решение о сертификации - я преследовал две цели, первая - получение структурированных знаний в предметной области и четкого понимания как устроен и работает k8s, вторая - получение сертификата как такового, что облегчит поиск работы в будущем.

Теория

Здесь не будет ничего эдакого, я купил курс на Udemy - "Certified Kubernetes Administrator (CKA) with Practice Tests" от Mumshad Mannambeth. Несмотря на фамилию, произношение очень хорошее и четкое. И да, естественно курс на английском языке. Честно говоря, я даже не пытался найти на русском языке. Возможно такие курсы и существуют, но так как использую английский по работе каждый день, ведь все общение только на нем, то для меня это не проблема. Если вы плохо воспринимаете на слух, то возможно стоит поискать курсы на соответствующем языке.

Сам курс, с учетом скидки, обошелся мне в 12$, что очень не дорого, даже если вы только начинаете в IT или даже пытаетесь войти в него. Курс состоит из 17 основных разделов:

программа курса
  1. Introduction

  2. Core Concepts

  3. Scheduling

  4. Logging & Monitoring

  5. Application Lifecycle Management

  6. Cluster Maintenance

  7. Security

  8. Storage

  9. Networking

  10. Design and Install Kubernetes Cluster

  11. Install "Kubernetes the kubeadm way"

  12. End to End Tests on Kubernetes Cluster

  13. Troubleshooting

  14. Other Topics

  15. Lightining Labs

  16. Mock Exams

  17. Course Conclusion

Каждый раздел разбит на лекции, которые представляют собой видео продолжительностью 5-20 минут. В начале каждого раздела есть ссылки на презентации, что в принципе удобно. Как правило каждый раздел включает в себе 3-4 тестовых задания. Что очень удобно, так как одна сухая теория надоедает и быстро утомляет. Так же для мобильности можно закачать весь курс себе на мобильное устройство и просматривать его в удобное для вас время, чем я и пользовался постоянно. Но единственный минус - для просмотра необходимо установить официальное приложение Udemy. Для меня это не было проблемой, так что я установил его из официального магазина google и смотрел курсы на мобильном телефоне.

Уже слышу крики из зала - зачем покупать какие то курсы, если в интернете полно статьей и к тому же есть официальная документация. И да и нет. Во-первых, из-за работы у меня нет столько свободного времени, чтобы по крупинкам выискивать нужную мне информацию, во-вторых ее еще надо структурировать. Так что мое мнение, что цена в 12$ более чем оправдана и однозначно стоит того. Если у вас полно свободного времени и есть много желания - можете попробовать подготовится полностью самостоятельно. Тут уже решать только вам.

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

Как уже выяснилось на самом экзамене, курс покрывает не 100%, например, мне попался вопрос по cronJob, который не рассматривался от слова совсем. И тут помогла документация и мой опыт в linux. Учтите этот момент и будьте готовы быстро реагировать по ситуации.

Практика

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

Я крайне советую во время прохождения практики - установить k8s на локальную машину, для быстрого доступа и проверки каких либо команд и задач. Что именно устанавливать - сильно зависит от ОС, которую вы используете. У себя, на корпоративном Macbook, я использовал k8s из состава Docker Desktop, единственный минус которого - невозможность добавить node. А для решения этой проблемы я использовал kind.

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

Сам курс включает в себя несколько т.н. Mock экзаменов, которые приближены к реальному экзамену и дают вам возможность понять, к чему готовится и чего ожидать на самом экзамене. Вам дается k8s кластер, 10-12 вопросов и час времени, чтобы их решить. В принципе для первого знакомства неплохо, но для сдачи экзамена недостаточно.

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

Оглядываясь назад могу точно сказать, что тестовых заданий из курсе будет недостаточно для успешной сдачи экзамена. При условии, что у вас за плечами нет опыта 1-2 года работы с k8s. Поэтому для получения практики я отдельно купил подписку на месяц на KodeKloud - "Ultimate Certified Kubernetes Administrator (CKA) Mock Exam Series". Нужно оно вам или нет, смотрите сами. После курса и прохождение нескольких Mock exam я понял, что мне нужна еще практика.

В принципе этот курс представляет из себя более продвинутый Mock exam из теоретического курса Udemy. Вам дается k8s кластер, 20 вопросов и 2 часа времени, собственно как и на экзамене. Но здесь естественно уже нет никаких видео с разбором задач. Но после проверки всех задач, вы можете посмотреть в текстовом виде, что именно надо было сделать. Правда и в этом курсе есть огрехи, например, в некоторых задачах нет необходимых объектов, но таких вопросов не много, и особо впечатление о курсе они не портят.

Сама практика у меня заняла неделю, на это время я брал отпуск на работе, да вот так весело пришлось проводить свой отпуск. Каждый день я практиковался и проходил Mock exam по 3-4 раза. Больше уже не мог физически. Каждый экзамен занимает 2 часа, а это довольно таки сильно выматывает, по крайней мере первые разы. Потом становится чуть легче. Ну и так практикуетесь до тех пор, пока процент правильных ответов не будет составлять хотя бы 80%, лучше конечно 90%+. Подобные тесты позволяют сразу выявить ваши слабые стороны и вы понимаете в каких темах вы плаваете и что надо подтянуть. В общем однозначно рекомендую. Стоимость подписки на месяц составила 35$.

Подготовка к экзамену

Ну вот собственно мы и подошли к основному - сдача экзамена. Сам экзамен проходит удаленно. Для возможности сдать экзамена, вам необходимо выполнить несколько условий, а именно - ваш компьютер должен соответствовать требованиям экзаменатора, благо проверку можно пройти онлайн, и тут меня ждала первая неприятность - плохая поддержка со стороны The Linux Foundation. Если у вас возникают какие либо проблемы с проверкой, то вы не можете назначить дату сдачи экзамена и должны открывать запрос на сайте, что я и сделал. И ждал ответа 5 дней. А судя по отзывам в телеграм канале по kubernetes - я не одинок. Так что учтите этот момент. В итоге все решилось тем, что проверку надо обязательно запускать в Google Chrome, а не Firefox, как это сделал я.

Далее, при успешном прохождении проверки вашей системы - у вас появляется возможность выбора даты и времени экзамена. Тут все просто и никаких проблем возникнуть не должно. Единственный момент - экзамен можно запланировать не менее чем за 1-2 дня, т.е. если сегодня понедельник, то в лучшем случае экзамен вы сможете сдать во среду или четверг. Я бронировал за неделю, так что для меня это не было проблемой, но учитывайте этот момент при планировании. И на этом собственно все.

Еще один момент. При сдаче экзамена у вас обязательно должна быть видео камера и микрофон. Так как весь процесс записывается. Для ноутбуков это не проблема, а вот если у вас стационарный ПК, то придется подключать камеру с микрофоном.

Так же крайне желательно, чтобы у вас были права администратора. Так как перед началом экзамена запускается проверка на вашем компьютере и вы можете получить сообщение, что на вашем компьютере найдено подозрительное и/или запрещенное ПО. Для начала сдачи экзамена вы будете обязаны либо остановить это ПО, либо возможно и удалить. Особенно это касается всяких корпоративных антивирусов и VPN. Так что учтите этот момент.

Экзамен

Ну вот и настал этот долгожданный момент. Вы сможете начать экзамен за 30 минут до назначенного вами времени. На сайте linuxfoundation.org будет доступна кнопка Start Exam. Т.е. если вы назначили экзамен на 10:30, то кнопка станет активной начиная с 10:00. Сделано это с целью дать вам время на подготовку. Так как сама сдача происходит через специальный проводник PSI, который необходимо скачать и установить на свой компьютер. А ссылка на скачивание становится доступна как раз в эти 30 минут. Кроме того, необходимо подтвердить свою личность, в моем случае было необходимо сфотографировать паспорт, причем имя и фамилия обязаны совпадать с теми, которые вы указали при регистрации. Обязательно учтите этот момент. Вроде еще можно использовать водительские права и международный паспорт.

После прохождения базовых проверок к вам подключается экзаменатор, все общение происходит по чату, который встроен в PSI. Меня попросили показать комнату и рабочее место. Сдавать экзамен в публичных местах запрещено, так же не подойдут open space'ы. Должна быть тихая и спокойная комната, с хорошим освещением. В идеале с минимум вещей в ней. Например, у меня висели семейные фотографии на стене, пришлось их снять. Естественно нельзя использовать никакие гаджеты, мобильный телефон нужно убрать, кроме того нельзя использовать даже чистый лист бумаги, для заметок. Полный список того, что можно, а что нет - будет доступен по ссылкам:

https://docs.linuxfoundation.org/tc-docs/certification/lf-handbook2

https://docs.linuxfoundation.org/tc-docs/certification/tips-cka-and-ckad

Советую внимательно почитать и ознакомиться с требованиями к сдаче экзамена. Так же меня попросили показать уши, я так понимаю на предмет отсутствия жучка - "Билет номер 9, приём" ( c ). Во время экзамена запрещается шевелить губами, нашептывать и т.п. Мне пару раз останавливали экзамен и просили так не делать.

После того, как все проверки пройдены - экзаменатор дает вам добро на начало экзамена.

Сам экзамен по сути копия того, что было в Mock exam, за исключением самих вопросов и того, что вы сдаете это все через некое подобие тонкого клиента. И вот тут начинается самое веселое. Так как это тонкий клиент, то ваши любимые сочетания клавиш не будут работать. В самом клиенте есть вкладка с Readme, в которой описываются эти моменты, так что стоит прочитать, так как копировать и вставлять во время экзамена придется много.

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

Третья проблема - на экзамене можно пользоваться официальной документацией. Т.е. производить поиск только на сайте - https://kubernetes.io/docs/home/ там есть поле для поиска, никаких google/duckduckgo/bing и т.п. Так вот проблема заключается в том, что поиск по самой странице не работает, по крайней мере я не смог его настроить. И каждый раз приходилось проматывать страницу в поисках нужного ключевого слово. Это очень неудобно и занимает много времени, которого и так немного. А пользоваться поиском придется часто, ну только если вы не помните наизусть манифесты основных объектов.

Если убрать эти моменты, то в принципе тот же экзамен что и Mock.

Tips & tricks

Поделюсь советами, которые помогут более эффективно сдать экзамен.

  1. Если в задаче, требуется сохранить данные в файл, то всегда проверяйте содержимое этого файла. Например, вы могли пропустить символ перенаправления >, в итого файл будет пустым. Так же обязательно обращайте внимание, где именно необходимо сохранить данные, обычно в вопросе указывается имя ноды.

$ echo 'kodekloud/webapp-color' /root/rolling-back-record.txt
kodekloud/webapp-color /root/rolling-back-record.txt

$ cat /root/rolling-back-record.txt
cat: /root/rolling-back-record.txt: No such file or directory
  1. Быстро проверить синтаксис yaml файла. Бывает необходимо при поиске проблем с kubelet/apiserver и не только.

$ yq -P eval /root/app-cka07-trb.yaml
Error: yaml: line 3: mapping values are not allowed in this context

$ cat -n /root/app-cka07-trb.yaml | head -5
     1
     2  kind ConfigMap
     3  apiVersion: v1
     4  metadata:
     5    name: index
  1. Удаляйте объект только после того, как поправили его копию. Например, у вас по условию стоит требование поправить pod или cronjob. Как видно из примера ниже - мы забыли добавить -o yaml. Если вы сначала удалите объект, а потом начнете редактировать pod.yaml, то к своему большому удивлению обнаружите, что в файле нет описания объекта. В результате чего, это задание вы уже не сможете решить и соответственно не получите никаких баллов.

$ k get pod orange-pod-cka10-trb > pod.yaml
$ k delete pod orange-pod-cka10-trb

$ cat pod.yaml 
NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
orange-pod-cka10-trb   1/1     1            0           95s
  1. Иногда быстрее взять готовый объект, если он есть, и подправить его, чем пытаться найти соответствующий манифест

$ k get sc -A
NAME                   PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
papaya-stc-cka09-str   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   true                   10m

$ k get sc papaya-stc-cka09-str -o yaml > sc.yaml
$ vi sc.yaml
  1. Внимательно читайте весь вопрос целиком, часто уточняющие детали идут в конце. Например, вам говорится, что pod не доступен через заданный сервис и просят вас исправить проблему. Вы находите причину, например разные label и исправляете ее, обновив соответствующий сервис. А в конце вопроса дается уточнее, что вы не должны изменять сервис.

$ k get pod curlme-cka01-svcn --show-labels 
NAME                READY   STATUS    RESTARTS   AGE     LABELS
curlme-cka01-svcn   1/1     Running   0          8m47s   run=curlme-cka01-svcn

$ k describe svc curlme-cka01-svcn | grep ^Selector
Selector:          run=curlme-ckaO1-svcn
  1. Часто суть проблемы кроется в мелочах, например 1-2 буквы - web-cka06-trb vs web-app-cka06-trb. Или в описании говорится, что сервис запущен на 5000/TCP, а по факту там UDP. А глаз цепляется за 5000, а на протокол уже не обращаешь внимание.

$ k get pod web-dp-cka06-trb-86f8f958c8-dqtzs --show-labels 
NAME                                READY   STATUS    RESTARTS   AGE    LABELS
web-dp-cka06-trb-86f8f958c8-dqtzs   1/1     Running   0          4m4s   app=web-app-cka06-trb,pod-template-hash=86f8f958c8

$ k describe svc web-service-cka06-trb | grep -E '(Selector|Endpoints)'
Selector:                 app=web-cka06-trb
Endpoints:                <none>
$ k describe svc pink-svc-cka16-trb 
Name:              pink-svc-cka16-trb
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=pink-app-cka16-trb
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.106.172.198
IPs:               10.106.172.198
Port:              <unset>  5000/UDP
TargetPort:        5000/UDP
Endpoints:         10.50.192.1:5000
Session Affinity:  None
  1. Если задача на создание сервиса, то всегда проверяйте Endpoints. В большинстве случаев они не должны быть пустыми. Для быстрого создания есть команда kubectl expose

$ k describe svc web-service-cka06-trb | grep -E '(Selector|Endpoints)'
Selector:                 app=web-cka06-trb
Endpoints:                <none>
  1. Если вы исправляете что либо в манифесте посмотрите на несколько ближайших строк кода, там так же могут быть ошибки. Например, вы нашли опечатку в 14й строке, но при этом есть опечатка и в 20й

spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app-cka06-trb
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: web-app-cka06-trb
    spec:
      containers:
      - image: httpd:letest
        imagePullPolicy: IfNotPresent
        lifecycle:
          postStart:
            exec:
              command:
              - /bin
              - -c
  1. Вначале каждого вопроса дается контекст в котором вы должны выполнять задание. Обязательно меняйте контекст вначале каждого задания.

$ k config use-context CLUSTER_NAME

Так же обращайте внимание на какой именно ноде вы находитесь и куда именно вас просят сохранить результат. Это будет видно по bash prompt.

student-node$

cluster1-controlplane$

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

  1. Обязательно изучите команду kubectl create/expose/get/run и используйте ее в сочетании с --dry-run=client и -o yaml. Это позволит сэкономить много времени. Далеко не все объекты можно создать через create, но те которые можно, лучше создавать через нее. Так же очень много времени экономит kubectl run, даже если она не позволяет задать все необходимые условия, например создать pod c 2мя и более контейнерами.

$ k create clusterrole deploy-role-cka20-arch --verb=get --resource=deploy
$ k run resolver --image=busybox --command -- /bin/sh -c "sleep 3600"
$ k expose deploy web-app-cka06-trb --name-my-svc --port=5000
  1. Если у вас задача на создание user или serviceaccount c требуемыми правами, всегда проверяйте корректность прав через auth can-i

$ k auth can-i get deploy --as=system:serviceaccount:default:deploy-cka20-arch
yes

$ k auth can-i create pod --as=alex
yes
  1. Обращайте внимание на namespace в самом вопросе. Часто вас будут просить создать/удалить/поправить объект в определенном namespace

$ k -n ns-1234 create secret my-secret

Заключение

Если подвести итог, то суммарно на подготовку у меня ушел ~месяц времени и ~325$ (275$ экзамен, 12$ курс на Udemy и 35$ практический курс на KodeKloud).

Стоило ли оно того ? Мое мнение - стоило, а там уже каждый решает для себя сам.

сертификат

Комментарии (2)


  1. Rayter
    00.00.0000 00:00
    +1

    Спасибо за статью, полезная инфо!


  1. CapeCod
    00.00.0000 00:00

    Этот экзамен еще интересен тем, что дают две попытки. Впервые вижу чтобы в стоимость входила пересдача. Мне даже пришлось ей воспользоваться – в первый подход не дотянул 4 балла. И в целом сертификат довольно ценный. Любая сертификация ценна, скажу как человек который частенько собеседует инженеров. Переоценивать не надо, но весомые плюсики добавляет.