{"id":37738,"date":"2019-09-18T15:00:26","date_gmt":"2019-09-18T22:00:26","guid":{"rendered":"http:\/\/devblogs.microsoft.com\/premier-developer\/?p=37738"},"modified":"2019-11-19T16:21:47","modified_gmt":"2019-11-19T23:21:47","slug":"astuces-pour-reussir-votre-certification-ckad-certified-kubernetes-application-developer","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/premier-developer\/astuces-pour-reussir-votre-certification-ckad-certified-kubernetes-application-developer\/","title":{"rendered":"Astuces pour r\u00e9ussir votre certification CKAD (Certified Kubernetes Application Developer)"},"content":{"rendered":"<p>Premier Developer Consultant <a href=\"https:\/\/www.linkedin.com\/in\/julienoudot\/\">Julien Oudot<\/a> partage ses recommandations pour se pr\u00e9parer et r\u00e9ussir l\u2019examen de certification CKAD (Certified Kubernetes Application Developer).<\/p>\n<hr \/>\n<p>En tant que consultant chez Microsoft, me concentrant sur les logiciels libres, j\u2019ai r\u00e9cemment pass\u00e9 l\u2019examen CKAD (Certified Kubernetes Application Developer) qui est tr\u00e8s diff\u00e8rent par rapport aux certifications Azure auxquelles je suis plus habitu\u00e9.<\/p>\n<p>Tout d\u2019abord, travailler dans une environnement Linux peut \u00eatre intimidant lorsque l\u2019on est plus confortable avec les interfaces graphiques ainsi que le syst\u00e8me d\u2019exploitation Windows. Heureusement, quelques commandes et astuces sont utiles afin d\u2019\u00eatre plus efficace lors de ce test.<\/p>\n<p>Ensuite, il est important de souligner que cette certification n\u2019est pas un simple questionnaire \u00e0 choix multiples. En effet, elle est compos\u00e9e des sections suivantes :<\/p>\n<ul>\n<li>Une section d\u2019instructions, sur la gauche de l\u2019\u00e9cran<\/li>\n<li>Une fen\u00eatre Notepad qui peut \u00eatre r\u00e9duite ou affich\u00e9 en haut \u00e0 droite de l\u2019\u00e9cran<\/li>\n<li>Un terminal Linux au centre<\/li>\n<li>Un seul onglet de navigateur Internet, \u00e0 partir duquel il est possible de naviguer vers la documentation (<a href=\"https:\/\/kubernetes.io\/docs\/\">https:\/\/kubernetes.io\/docs\/<\/a>). Il est aussi possible d\u2019ouvrir les pages dont les adresses commencent par <a href=\"https:\/\/kubernetes.io\/blog\/\">https:\/\/kubernetes.io\/blog\/<\/a>\u00a0ou bien\u00a0<a href=\"https:\/\/github.com\/kubernetes\">https:\/\/github.com\/kubernetes<\/a>, mais les pages les plus utiles sont celles pr\u00e9fix\u00e9es par <a href=\"https:\/\/kubernetes.io\/docs\/\">https:\/\/kubernetes.io\/docs\/<\/a>).<\/li>\n<\/ul>\n<p>Toutes les r\u00e9ponses doivent \u00eatre fournies dans le terminal, en cr\u00e9ant des <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/overview\/working-with-objects\/kubernetes-objects\/\">objets Kubernetes<\/a> ou bien en \u00e9crivant les bonnes informations dans un fichier texte (par exemple, une erreur retourn\u00e9e par un pod).<\/p>\n<p>Le test dure 2 heures et il y a 19 questions qui sont, en r\u00e9alit\u00e9, des probl\u00e8mes \u00e0 r\u00e9soudre.<\/p>\n<h3>Outils pour r\u00e9pondre aux probl\u00e8mes<\/h3>\n<p>Pour r\u00e9soudre les probl\u00e8mes pos\u00e9s, voici une liste des outils les plus importants que j\u2019ai \u00e9t\u00e9 amen\u00e9 \u00e0 utiliser durant le test\u00a0:<\/p>\n<ul>\n<li><strong><em>kubectl explain &lt;object_name&gt;.spec<\/em>\u00a0\u2013<\/strong>\u00a0qui montre quels champs peuvent \u00eatre utilis\u00e9s dans la d\u00e9finition des objets Kubernetes au format YAML. Il est par exemple utile de savoir si un \u00ab\u00a0readiness probe\u00a0\u00bb doit \u00eatre d\u00e9clar\u00e9 au m\u00eame niveau que le pod ou au niveau du container. Il est aussi possible d\u2019ajouter le param\u00e8tre <strong>&#8211;recursive<\/strong> \u00e0 la commande pour afficher tous les niveaux de la hi\u00e9rarchie YAML. Cette option peut cependant \u00eatre \u00e0 \u00e9viter car est relativement verbeuse.<\/li>\n<li>La page de documentation de la commande<strong> <em>kubectl<\/em>. <\/strong>Pendant le test, il ne sera pas seulement n\u00e9cessaire de travailler de mani\u00e8re d\u00e9clarative avec les fichiers YAML, mais il faut \u00e9galement utiliser la syntaxe imp\u00e9rative avec la commande <strong><em>kubectl<\/em><\/strong>. Afin de v\u00e9rifier la syntaxe, il est important de pouvoir naviguer rapidement jusqu\u2019\u00e0 la documentation puisqu\u2019une seule page web peut \u00eatre ouverte durant le test. Depuis <a href=\"https:\/\/kubernetes.io\/docs\/\">https:\/\/kubernetes.io\/docs\/<\/a>,\u00a0cliquer sur <strong><em>Home \u2013 Reference \u2013 kubectl CLI \u2013 kubectl Commands \u2013 kubectl Commands Reference.<\/em><\/strong><\/li>\n<li>La fonctionnalit\u00e9 de recherche de la page <a href=\"https:\/\/kubernetes.io\/docs\/\">https:\/\/kubernetes.io\/docs\/<\/a>. J\u2019ai utilis\u00e9 cette fonctionnalit\u00e9 afin de trouver des exemples de d\u00e9finitions au format YAML. Lorsque seulement quelques champs sont n\u00e9cessaires, la commande <strong><em>kubectl explain<\/em><\/strong> peut \u00eatre suffisante, mais dans le cas plus complexes comme les volumes ou les configs map, il est souvent plus rapide de voir un exemple complet. Dans ce cas, la recherche de l\u2019objet sp\u00e9cifique \u00e0 d\u00e9clarer peut s\u2019av\u00e9rer \u00eatre un gain de temps important.<\/li>\n<\/ul>\n<h3>Commandes Linux importantes<\/h3>\n<p>Il n\u2019est pas n\u00e9cessaire de connaitre des commandes Linux avanc\u00e9es pour r\u00e9ussir cet examen. Ci-dessous se retrouvent quelques exemples utilis\u00e9s lors de mon test :<\/p>\n<ul>\n<li>\u00c9crire\u00a0le r\u00e9sultat d\u2019une commande dans un fichier<\/li>\n<\/ul>\n<p>Exemple\u00a0: <strong><em>kubectl get pods &gt; result.txt<\/em><\/strong><\/p>\n<p>Lorsqu\u2019il est demand\u00e9 de s\u00e9lectionner une partie sp\u00e9cifique du r\u00e9sultat de la premi\u00e8re commande, la m\u00e9thode que j\u2019ai choisie \u00e9tait de copier la partie sp\u00e9cifique manuellement et de la rediriger vers le fichier de r\u00e9sultat :<\/p>\n<p>Exemple\u00a0:<strong><em> echo \u2018\u2019chaine de caract\u00e8res \u00e0 \u00e9crire\u2018\u2019 &gt; result.txt<\/em><\/strong><\/p>\n<p>Une mani\u00e8re plus \u00e9l\u00e9gante aurait \u00e9t\u00e9 d\u2019utiliser <strong><em>grep<\/em><\/strong>, mais je n\u2019\u00e9tais pas assez \u00e0 l\u2019aise avec cette commande, et il n\u2019y avait pas assez de temps pour regarder sa documentation en d\u00e9tail. Quelqu\u2019un d\u2019habitue \u00e0 utiliser cette commande gagnera un temps non n\u00e9gligeable pour s\u00e9lectionner et \u00e9crire une information sp\u00e9cifique dans un fichier de sortie.<\/p>\n<p>Exemple\u00a0: <strong><em>kubectl describe pods &lt;mypod&gt; | grep &#8211;context=10 Events &gt; result.txt<\/em><\/strong><\/p>\n<ul>\n<li>Savoir utiliser l\u2019image busybox pour investiguer les erreurs. L\u2019image busybox ainsi que sa documentation se trouvent au lien suivant : <a href=\"https:\/\/hub.docker.com\/_\/busybox\">https:\/\/hub.docker.com\/_\/busybox<\/a>.\u00a0Particuli\u00e8rement, apr\u00e8s avoir d\u00e9marr\u00e9 une session dans le terminal d\u2019un pod busybox, il est important de savoir comment tester la communication avec d\u2019autres pods.<\/li>\n<\/ul>\n<p>Exemple\u00a0: <strong><em>wget -O- POD_IP:8080 #<\/em><\/strong><\/p>\n<h3>Minimiser son utilisation du clavier<\/h3>\n<p>Voici les premi\u00e8res commandes que j\u2019ai saisies d\u00e8s le d\u00e9but de l\u2019examen\u00a0:<\/p>\n<ul>\n<li><strong><em>Export KUBE_EDITOR=nano<\/em><\/strong> \u2013 C\u2019est juste une pr\u00e9f\u00e9rence personnelle, mais je n\u2019avais pas utilis\u00e9 VI[M] depuis longtemps, j\u2019ai donc pr\u00e9f\u00e9r\u00e9 utiliser Nano. Cette variable d\u2019environnement KUBE_EDITOR est utilis\u00e9e lors de l\u2019ex\u00e9cution de la commande <strong>kubectl edit<\/strong>. Gr\u00e2ce \u00e0 cette commande, le YAML correspondant \u00e0 l\u2019objet Kubernetes \u00e9dit\u00e9 sera ouvert dans Nano par d\u00e9faut.<\/li>\n<li><strong><em>alias k=kubectl<\/em><\/strong> \u2013 Bien entendu, il est n\u00e9cessaire de saisir la commande kubctl de nombreuses fois durant le test. Puisque cette derni\u00e8re est relativement longue, un alias \u00e9tait tr\u00e8s utile.<\/li>\n<li><strong><em>alias kx=\u201dkubectl explain\u201d<\/em> \u2013\u00a0<\/strong>comme expliqu\u00e9 pr\u00e9c\u00e9demment, kubectl explain est une commande qu\u2019il sera utile de saisir un certain nombre de fois, la raccourcir est donc recommand\u00e9.<\/li>\n<\/ul>\n<p>De plus, pour d\u2019\u00e9viter la cr\u00e9ation de fichiers YAML \u00e0 partir de z\u00e9ro, l\u2019utilisation des param\u00e8tres <strong><em>&#8211;dry-run -o yaml &gt; myfile.yaml<\/em> <\/strong>permet de gagner beaucoup de temps. Ces param\u00e8tres peuvent \u00eatre ajoutes apr\u00e8s une commande kubectl create\/run pour \u00e9crire la d\u00e9finition YAML de l\u2019objet. Il faudra ensuite la modifier en utilisant Nano ou VI. Cette astuce est tr\u00e8s utile lorsqu\u2019on ne connait pas toutes les options \u00e0 utiliser imp\u00e9rativement avec la commande kubectl pour cr\u00e9er un objet Kubernetes avec tous les attributs demand\u00e9s par le scenario.<\/p>\n<p>Il est aussi possible d\u2019utiliser <strong><em>kubectl get &lt;any_resource&gt; -o yaml &gt; myfile.yaml<\/em><\/strong><em>,<\/em>\u00a0puis modifier le fichier YAML, puis finalement le d\u00e9ployer \u00a0<strong><em>kubectl apply -f myfile.yaml<\/em><\/strong><em>. <\/em>Cette approche permet de ne changer que quelques param\u00e8tres d\u2019un objet Kubernetes d\u00e9j\u00e0 existant. Notez qu\u2019une commande encore plus rapide serait <strong><em>kubectl edit<\/em><\/strong>, mais en fonction du probl\u00e8me pos\u00e9, il peut \u00eatre n\u00e9cessaire de cr\u00e9er une autre instance d\u2019un objet avec seulement quelques diff\u00e9rences.<\/p>\n<p>Pour finir, il est recommand\u00e9 d\u2019utiliser les <a href=\"https:\/\/kubernetes.io\/docs\/reference\/kubectl\/overview\/#resource-types\">types d\u2019objets Kubernetes raccourcis<\/a> autant que possible\u00a0: svc au lieu de services, po au lieu de pods, rs au lieu de replicasets, \u2026<\/p>\n<h3>Utilisation du copier\/coller<\/h3>\n<p>Copier et coller du texte n\u2019est pas aussi facile qu\u2019attendu. Tout d\u2019abord, les raccourcis clavier sont diff\u00e9rents pour les candidates acc\u00e9dant au test depuis un syst\u00e8me d\u2019exploitation Windows. (<strong><em>Control-c<\/em><\/strong> and <strong><em>control-v<\/em><\/strong> ne fonctionneront pas dans le terminal ou dans le Notepad). Les nouveaux raccourcis seront <strong><em>control-insert<\/em><\/strong> pour copier et <strong><em>shift-insert<\/em><\/strong> pour coller.<\/p>\n<p>De plus, lors de la copie d\u2019exemples depuis la documentation dans la fen\u00eatre Notepad, il est probable que l\u2019indentation ne soit pas juste. Comme tout d\u00e9veloppeur habitu\u00e9 \u00e0 travailler avec YAML sait, il est primordial d\u2019avoir le bon nombre d\u2019espaces au bon endroit. Pour ce faire, une bonne approche consiste \u00e0\u00a0:<\/p>\n<ul>\n<li>Copier les lignes cibl\u00e9es depuis la documentation dans la fen\u00eatre Notepad. Notez que le nombre de lignes qu\u2019il est possible de copier est assez petit, vous ne copierez donc pas le YAML en entier, mais plut\u00f4t une section particuli\u00e8re.<\/li>\n<li>V\u00e9rifier l\u2019indentation dans la fen\u00eatre Notepad<\/li>\n<li>Copier depuis Notepad et coller dans le terminal (Nano\/VI)<\/li>\n<li>V\u00e9rifier l\u2019indentation une derni\u00e8re fois<\/li>\n<\/ul>\n<h3>Pr\u00e9paration technique<\/h3>\n<p>Au-del\u00e0 des astuces d\u00e9crites ci-dessus, il est important d\u2019\u00eatre bien pr\u00e9par\u00e9 pour passer cet examen avec succ\u00e8s. La bonne nouvelle est que toutes les comp\u00e9tences n\u00e9cessaires pour r\u00e9ussir font partie du d\u00e9p\u00f4t de code GitHub suivant\u00a0: \u00a0<a href=\"https:\/\/github.com\/dgkanatsios\/CKAD-exercises\">https:\/\/github.com\/dgkanatsios\/CKAD-exercises<\/a>. Dans le cadre de ma pr\u00e9paration, le contenu de ce d\u00e9p\u00f4t a vraiment eu une valeur inestimable et \u00eatre \u00e0 l\u2019aise avec tous les concepts qu\u2019il couvre m\u2019a permis de r\u00e9ussir ce test de certification.<\/p>\n<h3>\u00catre pr\u00e9cis est aussi important qu\u2019\u00eatre rapide<\/h3>\n<p>Ce test est long, et il est fort probable que vous n\u2019ayez pas assez de temps pour r\u00e9soudre l\u2019int\u00e9gralit\u00e9 des probl\u00e8mes pos\u00e9s. Vous devez donc vous assurer qu\u2019un maximum de r\u00e9ponses apport\u00e9es aux probl\u00e8mes poses sont justes. Cependant, il ne faut pas passer trop de temps pour valider ses r\u00e9ponses pour \u00eatre capable d\u2019en traiter le plus possible. D\u00e9terminer combien de temps passer sur l\u2019\u00e9tape de validation sera donc le r\u00e9sultat de votre jugement.<\/p>\n<p>Par exemple, lors d\u2019un scenario ou il faut r\u00e9soudre un probl\u00e8me de communication entre deux pods, si le sympt\u00f4me initial est une erreur venant d\u2019un pod A indiquant qu\u2019il ne peut communiquer avec le pod B, il sera n\u00e9cessaire de v\u00e9rifier que cette erreur disparait apr\u00e8s les mesures correctives. Mais il n\u2019est pas forcement n\u00e9cessaire de d\u00e9ployer un pod busybox pour v\u00e9rifier la communication entre pod A et pod B.<\/p>\n<h3>Conclusion<\/h3>\n<p>Passer ce test apporte de la satisfaction et sa r\u00e9ussite signifie que vous avez r\u00e9ussi \u00e0 maitriser votre temps. \u00catre un expert Linux n\u2019est pas requis, mais savoir r\u00e9agir rapidement et habilement avec la commande <strong><em>kubectl<\/em><\/strong> et le format YAML est n\u00e9cessaire.<\/p>\n<p>Dans mon cas, je n\u2019ai pas eu le temps de r\u00e9pondre \u00e0 5 questions et je pensais que ce nombre \u00e9tait trop important pour avoir le score suffisant. Heureusement, la plupart des r\u00e9ponses fournies \u00e9taient justes, ce qui m\u2019a permis de r\u00e9ussir \u00e0 d\u00e9crocher cette certification d\u00e8s le premier essai avec un score de 72% (pour un score minimum requis de 66%).<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article, Nous vous proposons des astuces pour r\u00e9ussir votre certification de d\u00e9veloppeur Kubernetes (CKAD \u2013 Certified Kubernetes Application Developer).<\/p>\n","protected":false},"author":582,"featured_media":37937,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[25,126],"tags":[24,2,1057,3],"class_list":["post-37738","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure","category-kubernetes","tag-azure","tag-containers","tag-region_fr","tag-team"],"acf":[],"blog_post_summary":"<p>Dans cet article, Nous vous proposons des astuces pour r\u00e9ussir votre certification de d\u00e9veloppeur Kubernetes (CKAD \u2013 Certified Kubernetes Application Developer).<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/37738","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/users\/582"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/comments?post=37738"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/37738\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media\/37937"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media?parent=37738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/categories?post=37738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/tags?post=37738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}