Cet article a fait l’objet d’une mise à jour le 28 mai 2024 à la suite du renouvellement de ma CKAD.
Introduction#
J’ai obtenu la CKAD (Certified Kubernetes Application Developer) au mois de juin 2021 et dernièrement, j’ai eu l’occasion de la renouveler en avril 2024. C’est pourquoi je voulais vous faire un retour sur cette certification que j’ai trouvée très intéressante car elle se concentre sur l’aspect pratique qui se déroule sous forme de “labs” plutôt qu’à travers des questions à choix multiples.
Dans la suite de cet article, mes différents conseils et astuces portent sur la version 1.29 de Kubernetes. Je me suis d’ailleurs entrainé avec cette version pour préparer l’examen.
L’objectif n’est pas d’énumérer ce que vous pouvez retrouver dans la documentation officielle en ce qui concerne l’examen, mais de donner mon point de vue quant à la manière dont j’ai appréhendé le passage de la certification.
Les différents domaines abordés#
Contrairement à la première version de l’article, différents thèmes ont été ajoutés. C’est notamment le cas de Helm et de la création d’images conteneurisées.
Vous trouverez ci-dessous la liste de domaines présents dans la certification avec le poids associé aux différents chapitres :
Application Design (20%) : Création d’images conteurisées, de
Jobs
etCronJobs
, utilisation des init-containers et sidecars ainsi que la gestion du stockage persistent au sein d’unPod
;Application Deployment (20%) : Être en capacité d’utiliser différentes stratégies de déploiement comme le blue/green ou le canary, création de
Deployments
et utilisation de Helm pour déployer sous forme de paquet des objets au sein de Kubernetes ;Application Observability and maintenance (15%) : Gestion des dépréciations d’API, mises en place de sondes pour vérifier l’état des conteneurs, gestion des logs des
Pods
et être en capacité de debugger des conteneurs ;*Application Environment, Configuration and Security (25%) : Intégration et création des
CustomResourceDefinition
(CRD), gestion des permissions et accès au niveau RBAC, configuration des ressources (CPU et RAM) et des quotas, gestion desSecrets
pour les informations sensibles et lesConfigMaps
pour la gestion de la configuration des applications, utilisation d’un compte de service (ServiceAccount
) au sein d’unPod
et mise en place de contextes de sécurité (SecurityContext
) pour limiter la surface d’attaque ;*Services & Networking (20%) : Utilisation des
NetworkPolicy
pour restreindre le trafic réseau, exposition des applications au sein du cluster avec lesServices
et à l’extérieur de celui-ci avec lesIngress
;
Cela fait beaucoup de thèmes et composants à comprendre et maîtriser, c’est pourquoi, je vous propose de vous donner quelques liens pour parcourir efficacement l’ensemble de ces thèmes.
Liens et ressources utilisées#
Dans un premier temps et surtout pour ceux qui n’ont pas l’habitude de manipuler Kubernetes au quotidien, je vous recommande de commencer par apprendre les commandes impératives kubectl
avec ce dépôt de code CKAD-exercises.
Il permet de regrouper une multitude d’exercices avec les solutions pour vous entraîner et découvrir les arugments associés à cette commande.
Vous le remarquerez assez vite mais il n’est pas possible de tout créer avec kubectl
, vous aurez parfois à reprendre des bouts de code de la documentation. C’est le cas pour le PersistentVolume ou le PersistentVolumeClaim par exemple, on y reviendra dans la section “Apprendre à utiliser la documentation”.
Autre point important concernant la réalisation des exercices, je vous recommande l’utilisation de kind pour avoir un cluster Kubernetes très rapidement au sein de Docker quel que soit votre système d’exploitation. Cela évite la complexité d’installation et de mise en place d’une telle infrastructure.
Pour compléter le lien GitHub sur les exercices de CKAD, voici d’autres ressources intéressantes :
killercoda.com : Simulateur gratuit qui permet d’obtenir un avant-goût de l’examen, les exercices sont assez proches de ce que vous allez pouvoir retrouver dans la CKAD ;
killer.sh : Un simulateur payant, mais qui permet de se faire une idée sur le niveau attendu lors du passage de la CKAD. Ce simulateur est relativement plus dur que l’examen final, et, est certainement la meilleure façon de s’entraîner. Enfin, si vous achetez la certification CKAD, vous avez le droit à deux sessions au sein de ce simulateur.
Je vous recommande fortement d’utiliser les deux plateformes ci-dessus, notamment pour travailler vos automatismes et votre rapidité d’exécution.
N’hésitez pas à retravailler les domaines dans lesquels vous n’avez pas eu tous les points afin de retenter lors d’un deuxième essai. Sachant qu’il est tout à fait possible de récupérer l’énoncé et la correction de vos sessions sur killer.sh pour les retravailler sur votre environnement !
Environnement de l’examen#
L’environnement de l’examen a beaucoup changé entre temps, j’avais déjà eu l’occasion de vous le présenter lors de la mise à jour de l’article sur la CKS sous la section “Interface de l’examen”.
Maintenant, il est temps d’aborder la section sur mes différents conseils…
Mes conseils#
En général#
La CKAD est une épreuve qui peut se révéler assez difficile si vous n’êtes pas correctement préparé. En effet, la vraie difficulté de l’examen est la gestion du temps. Vous disposerez de deux heures pour réaliser entre 15 et 20 exercices qui peuvent avoir des poids différents.
De manière générale, au plus le poids d’un exercice est important, au plus l’exercice prendra du temps à être réalisé.
Avec le stress lors du passage de la certification, deux heures vous sembleront peut-être peu ou juste assez pour compléter l’examen et revenir sur deux ou trois questions que vous n’avez pas réussies.
Avant de m’inscrire pour l’examen, j’ai lu un certain nombre d’articles qui conseillent de privilégier les questions ayant des poids élevés et de mettre de côté celles ayant des poids plus faibles.
Personnellement, je n’ai pas utilisé cette technique et j’ai plutôt complété l’ensemble des questions que j’étais en mesure de terminer rapidement pour revenir sur les domaines que je jugeais plus difficiles.
Enfin, si vous voyez que vous n’arrivez pas à résoudre un exercice, passez-le et revenez dessus plus tard au risque de ne pas pouvoir finaliser l’examen dans son intégralité.
Apprendre à utiliser la documentation#
Lors de l’examen, vous avez le droit à la documentation, c’est-à-dire au fait d’ouvrir un navigateur web et de parcourir les liens autorisés comme https://github.com/kubernetes ou https://kubernetes.io/fr/docs par exemple.
Il est important de connaître des mots-clés pour tomber sur les “bonnes pages” qui vous permettront de résoudre très rapidement les exercices.
Par exemple, dans le cas où l’on vous demande de créer un PersistentVolume
et un PersistentVolumeClaim
et que vous utilisez comme mots-clés : “persistent volume” vous ne tomberez pas, dès le premier lien sur des extraits de code faciles à réutiliser pour réaliser votre exercice.
En revanche, les mots “persistent volume pod” redirigent vers un premier résultat qui montrent l’ensemble des étapes pour créer un PersistentVolume
, un PersistentVolumeClaim
ainsi que pour lier ce dernier à un Pod
. C’est quand même beaucoup plus facile non ?
C’est pourquoi lors de vos entraînements, je vous recommande de sélectionner les pages de la documentation que vous avez utilisées et essayez de retenir les mots-clés pour y parvenir rapidement.
Voici d’autres parties de la documentation que j’utilise personnellement :
Distribute Credentials Securely Using Secrets : Cette page vous donnera toutes les façons d’utiliser les
Secrets
que ce soit en tant que variable d’environnement ou volume ;Configure a Pod to Use a ConfigMap : Pareil que pour les secrets, mais pour les
ConfigMaps
;Configure a Security Context for a Pod or Container : Que ce soit côté
Pod
ou conteneur, ce n’est jamais simple de retenir par cœur la syntaxe. Dans cette page, vous retrouverez quelques exemples de code à copier et coller ;Network Policies : Vous trouverez toutes les policies par défaut à déployer et une
NetworkPolicy
assez complète à adapter en fonction de vos besoins.
La ligne de commande#
Lors de la réalisation des exercices, vous aurez besoin de manipuler encore et encore l’outil kubectl
, l’alias k
ainsi que l’auto-complétion étant déjà configurés, cela nous fait gagner du temps !
Néanmoins, deux autres raccourcis additionnels peuvent être configurés dans votre fichier ~/.bashrc
:
export do="--dry-run=client -o yaml
: Cela vous évitera de répéter inlassablement ces deux arguments pour générer vos objets Kubernetes ;export fg="–force --grace-period=0"
: Pour tuer unPod
le plus rapidement possible avec la commandekubectl delete pod
.
Pour les utiliser, rien de plus simple, voici quelques exemples :
# Création d'un Deployment
kubectl create deploy nginx --image nginx:latest --replicas 3 $do > nginx.yaml
# Suppression d'un Pod
kubectl delete pod httpd $fg
À la fin de vos exercices, il est possible que vous ayez à utiliser un Pod
de debug pour vérifier la configuration de vos NetworkPolicy
par exemple.
Pour cela, je vous conseille de mémoriser cette commande :
kubectl run debug --image=nginx:alpine --restart=Never --rm -i -- curl -m 1 [IP ou URL]:[PORT]
En effet, l’image nginx:alpine
contient cURL, l’outil qui permet de vérifier si vous arrivez ou non à attendre une page web.
Le paramètre -m 1
permet de définir le temps d’attente maximum de une seconde, ce qui évite le timeout de 30 secondes par défaut.
De plus, le paramètre --rm
permet de supprimer le conteneur à la fin de l’exécution de la commande
Et enfin, --restart=Never
n’est pas à oublier au risque d’avoir votre Pod
qui redémarre en boucle si la commande renvoie une erreur.
Édition de fichiers#
Pour éditer vos fichiers, vous disposerez de vim
, il est donc préférable de connaître les commandes de bases de cet éditeur pour être efficient.
Je vous conseille de regarder cette documentation, elle a le mérite d’être en français.
Utilisation du bloc-note#
Au cours de l’examen vous pouvez utiliser le bloc-note pour y ajouter l’ensemble des commandes que vous souhaitez conserver ou pour adapter des bouts de code bien pratique à utiliser.
Par exemple, vous pouvez y stocker la commande qui vous permet de changer de namespace pour ne pas avoir à utiliser -n namespace
si l’objectif de l’exercice est de créer des objets dans un namespace
particulier :
kubectl config set-context --current --namespace=[votre namespace]
Attention à bien prendre l’habitude et réutiliser cette commande à chaque début d’exercice pour être au bon endroit !
Le mot de la fin#
Comme dit plus haut, le CKAD est une épreuve de temps, si vous êtes préparés et que vous maîtrisez les commandes à base de kubectl
ainsi que les différents domaines de l’examen, vous ne devriez pas avoir de problème à obtenir la certification.
N’oubliez pas de connaître les pages de la documentation avec lesquelles vous êtes le plus à l’aise.
J’espère que ces différentes informations vous aideront lors de votre passage de l’examen !
Bon courage à celles et ceux qui veulent passer cette certification. :)