CKS является довольно специфическим экзаменом по Kubernetes и если вами активно не используются инструменты, которые рассматриваются на экзамене, то подготовка будет сложнее. У меня ушло на подготовку 8 месяцев и две попытки, где большую часть времени не было четкого плана как подготовится к экзамену, так как информации в интернете не так много, как при подготовке к CKA. И вам нужно сдать Certified Kubernetes Administrator (CKA), чтобы вас допустили до CKS.
Подготовку к экзамену я бы разделил на несколько этапов.
Этап первый — разведывательный
Можно бесплатно порешать задачи на https://killercoda.com/ Есть два неплохих курса, где можно попрактиковаться в решении задач.
https://killercoda.com/ronnyardi
https://killercoda.com/killer-shell-cks
Рекомендую перенести в отдельный документ каждую задачу с вопросом и решением с ссылками на документацию на https://kubernetes.io/docs/home/ и вашим кратким комментарием как вы понимаете, о чем вообще идет речь и сложная ли для вас задача. На первом этапе вам нужно научится быстро ориентироваться в документации. Например, очень много вопросов по Security Context и Network Policy. Нужно понимать какой Security Context можно задавать на уровне пода, а какой на уровне контейнера. Это можно посмотреть через встроенную документацию.
k explain pod.spec.securityContext ‑recursive — на уровне пода
k explain pod.spec.containers.securityContext ‑recursive — на уровне контейнера
Комбинация использования готовых примеров по SecurityContext и встроенной документации позволит вам быстро решать подобные задачи.
Для решения задач по Network Policy я всегда брал готовый пример из документации и правил его под себя, но он покрывает на все варианты. Часть нюансов описаны ниже примера в самой документации.
Также могут быть задачи по Cilium Network Policy и нужно понимать разницу между Network Policy и Cilium Network Policy.
Глобально я бы разделил темы, рассматриваемые на экзамене на несколько категорий:
1. Безопасность в подах· Security Context · AppArmor· Seccomp2. Сетевые политики· Network Policy· Cilium Network Policy· Разница между Cilium Network Policy и Network Policy· Разница в уровнях Cilium NP 3. Дополнительные внешние инструменты· Trivy · Kube‑bench· gVisor · BOM· OPA Gatekeeper· Kubescape· Kubesec4. Внутренняя безопасность кубера · Pod Security Admission (PSA)· Admission Controller· Audit· ETCD Encryption5. Стандартные компоненты куба· ServiceAccount· RBAC ServiceAccount Permissions· Secret in Pods· Docker· Istio mTLS· Falco
На реальном экзамене мне попались вопросы по каждой теме, кроме ETCD Encryption и OPA Gatekeeper.
Этап второй — практический
Когда вы прорешали бесплатные задачи и разобрались в нюансах по каждой теме, то в дальнейшем можно пойти на Reddit, где пользователи рассказывают о сложных задачах, что попались уже на самом экзамене и делятся ссылками на репозитории GitHub, где рассматриваются практически такие же задачи, как и на самом экзамене, но с другими значениями. Я тогда не знал об этом и купил подписку на Kodekloud на месяц, чтобы набраться практики. Цель этого этапа научиться решать задачи быстро будучи подгоняемым таймером. В среднем на экзамене есть 7 минут на вопрос, но есть вопросы, которые требуют больше времени, а есть вопросы, которые можно решить быстрее. Нужно как можно быстрее решить все простые, чтобы на сложные осталось больше времени. Довольно очевидно, но при первой попытке в начале были сложные вопросы, где я потратил много времени, а надо было просмотреть все и прорешать самые простые вначале.
https://learn.kodekloud.com/user/courses/cks-challenges
На мой взгляд решить 200-300 практических задач на время достаточно, чтобы обрести какую-то уверенность на экзамене. Рекомендую прорешать или задачи по подписке или на GitHub или и то и то по несколько раз, разбирая сложные задачи.
Этап третий — предфинальный
Вы прорешали множество задач на время, разобрали все темы и нюансы, умеете быстро искать в разрешенной документации готовые манифесты и править их под условия задачи и у вас появилась уверенность, что вы начинаете что-то понимать. Поздравляю, вы готовы к killer.sh задачам. Вам доступны бесплатно две попытки — тип А и тип Б и там разные задачи, причем тип Б значительно сложнее. Рекомендую в выходной день запускать попытку, чтобы ничего не отвлекало. У вас есть два часа как на экзамене и задачи сложнее, чем реальный экзамен. За два часа постарайтесь решить как можно больше задач без ИИ, а когда время истечет и появится результат, то можно будет уже прорешать то, что не успели, разбирая каждую задачу. Если вы писали конспект, как и я, то у вас уже разобраны задачи с killercoda, kodekloud, github, killer.sh. Вы скорее всего уже понимаете какие темы вызывают у вас сложности (скорее всего это falco).
Этап четвертый — финальный
Вы уже хотите уже наконец-то сдать экзамен и наконец-то перестать готовится в свободное от работы время. На экзамене вам нужна хорошая веб камера, которая умеет фокусироваться на документах вблизи. Если такой нет, то перед экзаменом можно сфотографивать документы через телефон и потом обратно переключиться на веб камеру, но лишние действия — это стресс.
За полчаса до экзамена у вас будет доступна кнопка сдать экзамен. Когда вы её запускаете, то вам потребуется скачать ПО, которое проверит чтобы у вас на компьютере не было запущенных процессов, которые не разрешены. Вам необходимо еще раз сфотографировать свои документы и себя, и проктор будет сверять их с документами, которые вы ранее загрузили на сайт. Вам потребуется показать свою комнату. В помещении не должно быть никого. На стенах не желательно чтобы что-то висело. Возможно, вас попросят закрыть дверь в комнату и если сдаете в жаркий период, то заранее откройте для себя форточку, чтобы был приток воздуха. Вам также потребуется выучить как на английском будет потолок, так как необходимо будет показать свое место, пол, стены, потолок, место под столом, место за монитором, что под клавиатурой, мышкой и ковриком для мышки. Я также приобрел удлинитель USB, чтобы можно было показать всю комнату через веб камеру, так как у самой камеры кабель короткий. Могут попросить отключить колонки и попросят показать, где телефон. Я освободил ящик стола под телефон и показал через веб камеру куда я его положил. Также необходимо будет показать свои очки (если носите), уши, запястья. Если есть часы, то лучше их убрать. На экзамене разрешается делать перерывы и пить воду, но вода должна быть в прозрачном стакане без надписей и на второй попытке я убрал даже воду, чтобы быстрее пройти проверку перед экзаменом, так как на первой попытке проктор придрался в стакану прозрачному без надписей.
Когда вы прошли проверку, то проктор открывает для вас экзамен и начинается обучение что где находится в интерфейсе. Во время обучения время на экзамене уже идет и поэтому постарайтесь быстро его пройти. У вас может быть от 15 до 20 вопросов. Вопросы слева, справа GUI Ubuntu и при запуске терминала вы будете находится условно на student node и для каждого вопроса вам потребуется заходить на отдельный kubernetes кластер по ssh. Кластеров меньше, чем вопросов и некоторые вопросы будут на одном кластере и если сломаете кластер, то не сможете другие вопросы решить, которые есть в этом кластере. Внимательно читайте вопрос до конца и внимательно смотрите сами манифесты. Я добавил дополнительные volumeMounts, а они уже были и api сервер упал, а в логах не было ничего. Учитывайте фактор стресса, что здесь вы решаете задачи под наблюдением проктора, не можете пользоваться своими заметками и ИИ, не можете даже шевелить губами, закрывать рот рукой, задумавшись, и не можете смотреть по сторонам иначе вам сделают замечание. Несколько замечаний, вам завершат экзамен, и вы потеряете попытку.
Все кластера на экзамене используют Docker вместо Containerd и это тоже надо учитывать. Постарайтесь сначала решить простые вопросы, сложные сразу пропускайте. Их можно пометить и вернуться к ним позже. Если в задаче сказано, что можно решить, как и использованием Gateway API, а документации по Gateway API не разрешена на CKS, то не тратьте время, чтобы открыть эту документацию, так как она не откроется даже. Решайте с помощью Ingress.
На первой попытке я думал наберу 10%, но каким-то чудом набрал 55%. Были вопросы, где у меня было мало практики, и я не успел ответить на все, а также потерял время пробуя решать первые сложные вопросы и пробуя открыть документацию по Gateway API, которая не разрешена.
На второй попытке я смог за 1.5 часа ответить на все вопросы и еще полчаса разбирал последний вопрос. Очень многие вопросы были с первой попытки, и я разобрал их на домашнем кластере и также начал понимать, о чем пишут на Reddit, так как увидел эти вопросы вживую на первой попытке. Кажется банк вопросов не очень большой.
Для себя после экзамена набросал манифест, который позволит сделать хоть какую-то безопасность в кластере Kubernetes если Docker контейнер не использует root. Тут нет readOnlyRootFilesystem, так как при использовании этого параметра потребуется прописывать emptyDir: {} на пути, где требуется что-то сохранить временно. А также seccompProfile используется стандартный.
apiVersion: apps/v1kind: Deploymentmetadata: name: SERVICE_LABEL namespace: NAMESPACEspec: replicas: 1 selector: matchLabels: app: SERVICE_LABEL template: metadata: labels: app: SERVICE_LABEL spec: imagePullSecrets: - name: dcrall containers: - name: SERVICE_LABEL image: IMAGE_NAME imagePullPolicy: Always ports: - containerPort: 80 resources: requests: cpu: 500m memory: 500Mi limits: cpu: 500m memory: 500Mi securityContext: allowPrivilegeEscalation: false privileged: false runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 seccompProfile: type: RuntimeDefault capabilities: drop: - ALL
Для меня подготовка к экзамену дала возможность изучить темы, которые я бы не стал целенаправленно изучать, и я надеюсь, что мой опыт позволит вам потратить меньше времени на подготовку, чем мне.
ссылка на оригинал статьи https://habr.com/ru/articles/1040004/