Passer au contenu
Thibault Le Reste
Retour

Comment j'ai obtenu la certification Kubernetes CKAD

Pourquoi j’ai passé cette certif ?

Après 2 ans de pratique de Kubernetes dans le cadre de mon travail et avoir contribué à ce projet, j’ai décidé de passer les certifications CKAD et CKA de la CNCF afin de valider mes compétences.

Cet article concerne uniquement la certification CKAD.

Il existe beaucoup d’autres articles de blog traitant de ce sujet, mais ils sont principalement en anglais. J’ai donc choisi de rédiger cet article pour vous partager mon expérience, en français et sur la dernière version de la certification (avec Kubernetes 1.18).

Certificat CKAD Thibault Le Reste

Description de l’examen

Détails pratiques

Depuis le 9 janvier 2020, cette certification est valable 3 ans au lieu de 2 ans auparavant. Après s’y être inscrit, vous avez 1 an pour choisir une date de passage. Si vous échouez, vous aurez le droit à un nouvel essai sans repayer l’inscription. Le tarif à l’inscription est de 300$. Cependant, il y a souvent des réductions disponibles, pour ma part j’ai eu 30% de réduction.

Il faut au maximum 36 heures pour obtenir les résultats de l’examen. De mon côté, je les ai obtenus un peu avant, mais tout de même au bout de 33 heures.

Aspect technique

Depuis le 23 avril 2020, l’examen se déroule avec la version 1.18 de Kubernetes. Cela a quelques impacts au niveau des commandes à utiliser que je décrirai plus tard.

Côté système d’exploitation, c’est Ubuntu 16 (Xenial) qui est utilisé.

Contenu

L’examen dure 2 heures et comporte 19 questions qui sont pondérées par un pourcentage. Il faut obtenir au minimum le score de 66% pour obtenir la certification.

Voici les domaines traités durant l’examen :

Par exemple :

Core Concepts (13%)

Le temps étant compté, il faudra donc bien choisir par quelles questions commencer, en fonction de leur pourcentage et complexité. Vous pouvez, par exemple, répondre aux questions dans le désordre ou revenir sur une question que vous avez laissée de côté.

Lors de l’examen, vous aurez le droit à deux onglets sur votre navigateur :

Il est donc nécessaire de bien connaitre cette documentation et d’utiliser au maximum les commandes impératives avec le client kubectl. Un bloc-note est aussi disponible, utilisez-le à bon escient pour noter les questions que vous avez réussies, esquivées, celles pour lesquelles vous êtes bloquées ainsi que le pourcentage des questions associé.

La durée limitée de l’examen vous obligera à maitriser toutes vos actions sur le bout des doigts, c’est pourquoi vous trouverez plus tard une partie “Conseils et astuces” pour vous faire gagner le maximum de temps.

Inscription

Il faut se rendre sur le site de la Linux foundation.

Après l’inscription, vous aurez une check-list à parcourir avec notamment :

Info : J’ai par contre eu un léger problème pour choisir l’horaire de passage, au moment de sélectionner une timezone UTC. En choisissant Paris, le site m’indiquait une timezone UTC+1. Cette timezone aurait du être UTC+2, car nous étions en heure d’été. En réalité, l’heure UTC+2 été bien prise en compte, mais l’affichage était incorrect.

Info : Ma carte identité datait de plus de 10 ans, mais la dérogation de validité de 15 ans a bien été prise en compte.

Configuration de l’environnement

Au début de l’examen, vous devrez prendre quelques petites minutes pour configurer votre environnement.

Éditeur de texte et configuration

J’ai utilisé l’éditeur Vim étant plus à l’aide avec celui-ci. Il est bien sûr possible d’utiliser d’autres éditeurs comme Nano.

Avant d’utiliser Vim, il faut le paramétrer afin d’éditer au mieux les fichiers YAML.

On édite le fichier vimrc :

vi ~/.vimrc

Et on y ajoute la ligne suivante :

set ts=2 sts=2 sw=2 et

On applique ensuite la configuration :

. ~/.vimrc

Explication des paramètres :

Il existe différents modes d’édition dans Vim, voici les 3 principaux :

Voici les principales commandes que j’utilise qui vous seront utiles. Ces commandes se font en mode normal :

ActionCommande
Rechercher un mot/mot puis n
Aller au début d’une ligne0
Aller à la fin d’une ligne$
Insérer du texte après le curseura
Remplacer un motcw
Supprimer une lignedd ou d (nombre de lignes) d
Copier une ligneyy ou y (nombre de lignes) y
Coller du textep
Remplacer un caractèrer
Supprimer un caractèrex
Indenter du texte> à droite ou < à gauche
Sélectionner du textev (sélection) v
Annuler la dernière commandeu
Enregistrer et quitter:wq!

Pour un aperçu global des commandes, vous pouvez prendre connaissance du vim cheatsheet.

Pour la mise en pratique, il existe ce tutoriel interactif !

Alias et autocomplétion pour Kubectl

Je vous conseille de créer un alias pour le client Kubectl et activer l’autocomplétion comme décrit dans la documentation officielle.

Création d’un alias pour Kubectl :

echo 'alias k=kubectl' >>~/.bashrc

Activation de l’autocomplétion sur cet alias :

echo 'complete -F __start_kubectl k' >>~/.bashrc

Vous pouvez aussi créer d’autres alias, comme : kgp pour kubectl get pods kgd pour kubectl get deployment

Conseils et astuces

Changement de contexte et namespace

Il vous sera demandé à chaque question de changer de contexte, pour changer de noeud. Pas de panique, la commande permettant de faire cela est affichée au début de chaque question :

kubectl config use-context <context>

Chaque question se déroule dans un namespace particulier. Afin d’éviter d’utiliser le paramètre -n <namespace> lors de chaque commande, je vous conseille de changer le namespace courant avec la commande :

kubectl config set-context --current --namespace=<namespace>

Création des ressources

Afin de gagner du temps, utilisez les alias abrégés des ressources, par exemple :

kubectl get ns

plutôt que :

kubectl get namespaces

La liste des alias abrégés est disponible avec :

kubectl api-resources

Dans le cadre de cette certification, voici les principaux noms abrégés que j’utilise :

nomnom abrégé
configmapscm
cronjobscj
deploymentdeploy
namespacesns
persistentvolumeclaimspvc
persistentvolumespv
podspo
servicessvc

Depuis le 23 avril 2020, l’examen se déroule sur la version de Kubernetes 1.18. Voici une liste des principales commandes qui ont évolué :

ActionCommande k8s 1.18Commande k8s 1.17
Créer un podkubectl run sample-podkubectl run sample-pod --restart=Never
Créer un deploymentkubectl create deploy sample-deploykubectl run sample-deploy
Créer un jobkubectl create job sample-jobkubectl run sample-job --restart=OnFailure
Créer un cronjobkubectl create cronjob sample-cronjob --schedule="* * * * *"kubectl run sample-cronjob --schedule="* * * * *"

Plutôt que de créer les ressources directement, il est préférable de générer le template et de l’exporter dans un fichier YAML. Cela a plusieurs avantages :

Pour exporter le template au format YAML sans créer la ressource, il faut utiliser les paramètres suivants :

--dry-run -o yaml > fichier.yaml

Attention, la commande précédente est dépréciée, mais elle fonctionne toujours avec la version Kubernetes 1.18 (celle de l’examen). Cependant, un message de warning apparaîtra lors de son exécution. Vous pouvez l’ignorer ou utiliser la “nouvelle commande” :

--dry-run=client -o yaml > fichier.yaml

Exemple :

kubectl create deploy --image=nginx --dry-run -o yaml > deploy-template.yaml
kubectl create -f deploy-template.yaml

Suppression rapide d’une ressource

Lors de la suppression d’un pod ou deployment, vous pouvez utiliser les paramètres suivants afin d’avoir une suppression instantanée :

--force --grace-period=0

Exemple :

kubectl delete pod sample-pod --force --grace-period=0

Utilisation des templates de la documentation

Il est parfois nécessaire d’utiliser les templates d’exemples de la documentation Kubernetes. Par exemple, les persistents volumes ne peuvent pas être créés directement avec le client Kubectl. Pour simplifier cette création, vous pouvez copier l’url du template dans la documentation et lancer la commande suivante :

wget -O- <url> > fichier.yaml

Exemple :

wget -O- https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/pods/storage/pv-volume.yaml > pv-volume-template.yaml

Utilisation d’explain pour afficher les champs disponibles

Afin de connaitre les champs à utiliser dans le template d’une ressource, je vous conseille d’utiliser la commande kubectl explain par itérations.

Exemple pour un job, on commence par :

kubectl explain job

Qui affiche :

apiVersion   <string>
kind <string>
metadata     <Object>
spec <Object>
status       <Object>

On continue, en sélectionnant le champ spec avec :

kubectl explain job.spec

Qui affiche :

activeDeadlineSeconds        <integer>
backoffLimit <integer>
completions  <integer>
manualSelector       <boolean>
parallelism  <integer>
selector     <Object>
template     <Object> -required-
ttlSecondsAfterFinished      <integer>

Finalement, cela permet de savoir, par exemple, qu’on peut utiliser le champ parallelism pour lancer des jobs en parallèle.

Exemple :

apiVersion: batch/v1
    kind: Job
    metadata:
      name: sample-job
    spec:
      parallelism: 2

Pour afficher tous les champs directement, on peut y ajouter le paramètre :

--recursive

Exemple :

kubectl explain job --recursive

Recherche dans les logs et évènements

Pour rechercher rapidement dans les logs ou évènements, vous pouvez utiliser la commande grep avec les paramètres suivants :

Par exemple, pour rechercher les 3 annotations d’un pod :

kubectl describe pod sample-pod | grep -iA 3 'annotations'

Fréquence des cronjobs

La fréquence des cronjobs est définie au format cron.

Par exemple : * * * * * correspond à toutes les minutes 0 */2 * * * correspond à toutes les 2 heures

Conseil : Si vous ne connaissez pas ou ne maitrisez pas le format cron, le site crontab.guru vous sera utile.

Format des requests et limits

Concernant les requests et limits d’un container :

Attention : Pour la mémoire, il ne faut pas confondre MiB avec Mb ou Mo

Se préparer et s’entrainer

Cluster Kubernetes

Pour vous exercer, il faut faudra un cluster Kubernetes. Différentes solutions s’offrent à vous :

Les géants du cloud

Les cloud providers “made in France”

Le cluster local

Pour monter facilement un cluster en local, il existe le combo K3S / K3D.

Vous pouvez aussi utiliser Minikube pour déployer un cluster à un noeud unique.

Livres

Pour avoir une vision d’ensemble du système Kubernetes, je vous conseille la lecture de deux livres très complets :

Kubernetes in action

Kubernetes up and running

Exercices gratuits

Pour se faire la main, voici une liste de quelques exercices gratuits que j’ai utilisés.

Formation et exercices payants

Je me suis exercé sur des examens blancs payants et c’est vraiment quelque chose que je conseille. Pour 20 à 30 euros, on peut avoir accès à des exercices de qualité, soit à peine 10% du coût de la certification.

En voici quelques-uns :

Communauté CKAD

De nombreux articles de blog sont disponibles principalement en anglais avec des retours d’expérience et conseils pour passer la certification.

Pour poser des questions, ou être tenu informé des derniers articles de la communauté, il existe un Slack officiel channel #ckad-exam-prep .

Le jour de l’examen

Voici les choses à savoir :

Conclusion

Vous l’aurez compris, le meilleur moyen de se préparer est de refaire encore et encore les exercices afin de pouvoir les réussir les yeux fermés ! Ne pas céder au stress et bien choisir les questions en fonction du pourcentage / complexité.

Bon courage si vous souhaitez le passer, je me prépare déjà pour l’étape suivante, la certification CKA !

N’hésitez pas à partager vos trucs et astuces, ou à échanger avec moi sur Twitter @thibaultlereste.


Partager cet article sur :

Article précédent
DVF Explorer, ou comment j'ai découvert l'open data immobilier
Article suivant
Mes conseils pour une 1ère contribution au projet Kubernetes