
Produire des manifests Kubernetes rapidement, c'est savoir générer un
squelette avec kubectl, le compléter avec les bons champs, et valider avant
d'appliquer. Ce guide vous donne les réflexes CKAD : kubectl explain,
--dry-run=client -o yaml, correction rapide, et validation côté serveur.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Workflow examen : générer → compléter → valider → appliquer
- Deux approches : génération assistée vs écriture manuelle
- Namespace et contexte : éviter les erreurs de cible
- Snippets fréquents :
resources, probes,command,envFrom - Correction rapide :
kubectl edit,kubectl patch - Validation complète :
--dry-run=client,--dry-run=server,kubectl diff
Prérequis
Section intitulée « Prérequis »- Un cluster Kubernetes fonctionnel : K3s, Kind, ou Minikube
- kubectl installé et configuré
- Connaissance de base de la syntaxe YAML
Workflow CKAD : produire vite
Section intitulée « Workflow CKAD : produire vite »En examen, chaque seconde compte. Voici le workflow le plus efficace :
-
Configurer le namespace de travail
Fenêtre de terminal kubectl create namespace ckadkubectl config set-context --current --namespace=ckadEn changeant le namespace courant, vous évitez de répéter
-nà chaque commande. -
Générer un squelette
Fenêtre de terminal kubectl create deployment web --image=nginx:stable --dry-run=client -o yaml > web.yaml -
Compléter le manifest
Fenêtre de terminal vim web.yamlAjoutez les champs manquants :
resources, probes, labels... -
Valider avant application
Fenêtre de terminal kubectl apply --dry-run=client -f web.yamlkubectl diff -f web.yaml # si la ressource existe déjà -
Appliquer et vérifier
Fenêtre de terminal kubectl apply -f web.yamlkubectl get allkubectl describe deploy web
Deux approches pour produire un manifest
Section intitulée « Deux approches pour produire un manifest »Il existe deux façons d'obtenir un fichier YAML valide : le faire générer
par kubectl ou l'écrire à la main. Les deux mènent au même résultat, mais
elles n'ont pas le même coût en temps ni la même valeur pédagogique. La
génération évite les fautes d'indentation et les mauvaises apiVersion ;
l'écriture manuelle vous apprend où se placent réellement les champs.
Génération assistée par kubectl
Section intitulée « Génération assistée par kubectl »Utile pour : gagner du temps, éviter les erreurs de base, partir d'un squelette valide.
kubectl create deployment web --image=nginx:stable --dry-run=client -o yaml > web.yamlLe YAML généré est un squelette. Vous devez presque toujours l'ajuster : labels, ports, resources, probes...
Écriture manuelle
Section intitulée « Écriture manuelle »Utile pour : comprendre la structure, corriger un YAML existant, maîtriser les champs importants.
Quand vous connaissez bien la structure, vous pouvez écrire directement. Mais en examen, la génération assistée reste plus rapide.
Structure d'un Manifest Kubernetes
Section intitulée « Structure d'un Manifest Kubernetes »Kubernetes utilise un langage déclaratif : vous décrivez l'état souhaité, et Kubernetes se charge de l'atteindre. Chaque manifest YAML suit une structure commune avec quatre champs obligatoires.
Les quatre champs essentiels
Section intitulée « Les quatre champs essentiels »Ces quatre clés sont présentes dans tous les manifests, quel que soit le
type de ressource ; seul le contenu de spec change d'un kind à l'autre.
apiVersion: v1kind: Podmetadata: name: web namespace: ckad labels: app: nginxspec: containers: - name: nginx image: nginx:1.30 ports: - containerPort: 80| Champ | Description | Exemples |
|---|---|---|
apiVersion | Version de l'API Kubernetes | v1, apps/v1, networking.k8s.io/v1 |
kind | Type de ressource | Pod, Deployment, Service, ConfigMap |
metadata | Identité de l'objet | name, namespace, labels, annotations |
spec | Spécification détaillée | Varie selon le kind |
Namespace et contexte courant
Section intitulée « Namespace et contexte courant »Un namespace est un cloisonnement logique du cluster : deux ressources
peuvent porter le même nom dans deux namespaces différents sans entrer en
conflit. kubectl travaille toujours dans un namespace, celui du
contexte courant si vous ne passez pas -n. Fixer ce namespace une fois
pour toutes est le geste qui évite le plus d'erreurs, en examen comme en
production.
Créer et utiliser un namespace
Section intitulée « Créer et utiliser un namespace »Trois commandes suffisent : créer le namespace, l'attacher au contexte courant, puis vérifier que le changement a bien été pris en compte.
# Créer le namespacekubectl create namespace monprojet
# Définir comme namespace courantkubectl config set-context --current --namespace=monprojet
# Vérifier le contexte actuelkubectl config get-contextsPourquoi c'est important
Section intitulée « Pourquoi c'est important »Une ressource créée dans le mauvais namespace n'échoue pas : elle est acceptée, elle démarre, et elle reste invisible depuis l'endroit où vous la cherchez. Pire, une ConfigMap ou un Secret ne sont jamais lisibles depuis un autre namespace, donc le Pod qui les référence reste bloqué au démarrage.
| Problème | Conséquence | Solution |
|---|---|---|
Oublier -n | Ressource créée dans default | Changer le namespace courant |
| Mauvais namespace | Ressource introuvable | kubectl get pods -A pour chercher |
| ConfigMap/Secret ailleurs | not found au démarrage du Pod | Créer dans le même namespace |
Explorer l'API avec kubectl
Section intitulée « Explorer l'API avec kubectl »Vous n'avez pas besoin de mémoriser la structure de chaque ressource : le
cluster la décrit lui-même. Deux commandes suffisent pour retrouver
n'importe quel champ, kubectl api-resources pour l'inventaire des types et
kubectl explain pour le détail des champs. Cette documentation embarquée
est autorisée en examen, contrairement à vos notes personnelles.
Découvrir les ressources disponibles
Section intitulée « Découvrir les ressources disponibles »Cette liste donne aussi les abréviations (deploy, svc, cm) qui
raccourcissent toutes les commandes suivantes.
kubectl api-resources | head -15NAME SHORTNAMES APIVERSION NAMESPACED KINDconfigmaps cm v1 true ConfigMapnamespaces ns v1 false Namespacepods po v1 true Podsecrets v1 true Secretservices svc v1 true Servicedeployments deploy apps/v1 true DeploymentCette commande liste tous les types de ressources avec leur abréviation,
leur apiVersion et si elles sont namespacées.
Explorer la structure avec kubectl explain
Section intitulée « Explorer la structure avec kubectl explain »kubectl explain documente chaque champ directement depuis le cluster :
kubectl explain pod.spec.containersKIND: PodVERSION: v1
FIELD: containers <[]Container>
DESCRIPTION: List of containers belonging to the pod.
FIELDS: args <[]string> command <[]string> env <[]EnvVar> image <string> name <string> -required- ports <[]ContainerPort> resources <ResourceRequirements> ...Générer des manifests avec --dry-run
Section intitulée « Générer des manifests avec --dry-run »Au lieu d'écrire un YAML de zéro, générez-le avec --dry-run=client -o yaml :
kubectl run web --image=nginx:stable --dry-run=client -o yamlapiVersion: v1kind: Podmetadata: labels: run: web name: webspec: containers: - image: nginx:stable name: web restartPolicy: Alwayskubectl create deployment web --image=nginx:stable --replicas=3 \ --dry-run=client -o yamlapiVersion: apps/v1kind: Deploymentmetadata: labels: app: web name: webspec: replicas: 3 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - image: nginx:stable name: nginxkubectl expose deployment web --port=80 --target-port=80 \ --dry-run=client -o yamlapiVersion: v1kind: Servicemetadata: labels: app: web name: webspec: ports: - port: 80 targetPort: 80 selector: app: webNote : kubectl expose récupère automatiquement les labels du Deployment.
C'est plus fiable que kubectl create service qui utilise son propre label.
kubectl create configmap app-config --from-literal=APP_ENV=production \ --dry-run=client -o yamlapiVersion: v1data: APP_ENV: productionkind: ConfigMapmetadata: name: app-configkubectl create secret generic db-creds --from-literal=password=secret \ --dry-run=client -o yamlapiVersion: v1data: password: c2VjcmV0kind: Secretmetadata: name: db-credsSnippets fréquents (à connaître par cœur)
Section intitulée « Snippets fréquents (à connaître par cœur) »Ces champs reviennent constamment en CKAD. Gardez-les en mémoire.
command et args
Section intitulée « command et args »command remplace l'ENTRYPOINT de l'image et args remplace sa
CMD : déclarer l'un sans l'autre suffit rarement, car l'image perd alors
la moitié de sa ligne de démarrage.
containers:- name: app image: busybox:1.36 command: ["sh", "-c"] args: ["echo hello && sleep 3600"]Variables d'environnement simples
Section intitulée « Variables d'environnement simples »Une valeur d'environnement est toujours une chaîne de caractères : les booléens et les nombres doivent être entre guillemets, sinon l'API server rejette le manifest.
env:- name: APP_ENV value: production- name: APP_DEBUG value: "false"envFrom (injecter toute une ConfigMap)
Section intitulée « envFrom (injecter toute une ConfigMap) »Chaque clé de la ConfigMap devient une variable portant le même nom, ce qui évite d'énumérer les entrées une par une. Les clés dont le nom n'est pas un identifiant d'environnement valide sont ignorées au démarrage.
envFrom:- configMapRef: name: app-configresources (requests et limits)
Section intitulée « resources (requests et limits) »Les requests servent au scheduler pour choisir un nœud capable d'accueillir le Pod ; les limits sont appliquées par le kubelet pendant l'exécution. Dépasser la limite CPU provoque un throttling, dépasser la limite mémoire provoque la mort du conteneur (OOMKilled).
resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "500m" memory: "256Mi"readinessProbe et livenessProbe
Section intitulée « readinessProbe et livenessProbe »Les deux sondes n'ont pas du tout les mêmes conséquences. Un échec de la readinessProbe retire le Pod des endpoints du Service, sans le redémarrer ; un échec de la livenessProbe fait redémarrer le conteneur. Une liveness trop agressive sur une application lente à démarrer déclenche des redémarrages en boucle.
readinessProbe: httpGet: path: /healthz port: 80 initialDelaySeconds: 5 periodSeconds: 10
livenessProbe: httpGet: path: /healthz port: 80 initialDelaySeconds: 15 periodSeconds: 20Déclarer un containerPort est purement informatif : cela n'ouvre ni ne
ferme rien. L'intérêt est ailleurs, le name donné ici peut être réutilisé
comme targetPort dans un Service ou comme port dans une sonde.
ports:- containerPort: 80 name: http- containerPort: 443 name: httpsvolumeMounts et volumes (ConfigMap)
Section intitulée « volumeMounts et volumes (ConfigMap) »Le montage se fait en deux temps et le lien entre les deux est le nom :
volumes déclare la source au niveau du Pod, volumeMounts indique où la
monter dans le conteneur. Une faute de frappe entre les deux bloque le Pod
au démarrage.
containers:- name: app image: nginx:1.30 volumeMounts: - name: config-volume mountPath: /etc/configvolumes:- name: config-volume configMap: name: app-configCréer un Pod
Section intitulée « Créer un Pod »Un Pod est l'unité de base dans Kubernetes. Il exécute un ou plusieurs conteneurs.
Manifest complet
Section intitulée « Manifest complet »Ce manifest reprend les snippets précédents : identité, image, port, quotas
de ressources et sonde de disponibilité. C'est le niveau de complétude
attendu sur une question d'examen, pas seulement image et name.
apiVersion: v1kind: Podmetadata: name: web namespace: ckad labels: app: nginxspec: containers: - name: nginx image: nginx:1.30 ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "500m" memory: "256Mi" readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 5 periodSeconds: 10kubectl apply -f pod.yamlkubectl get pods -l app=nginx --show-labelsNAME READY STATUS RESTARTS AGE LABELSweb 1/1 Running 0 19s app=nginxCréer un Deployment
Section intitulée « Créer un Deployment »Un Deployment gère un ensemble de Pods identiques et permet les mises à jour progressives.
Manifest avec 3 réplicas
Section intitulée « Manifest avec 3 réplicas »Par rapport au Pod précédent, la définition du conteneur descend d'un cran :
elle vit désormais dans spec.template, le modèle que le Deployment
reproduit autant de fois que replicas l'indique.
apiVersion: apps/v1kind: Deploymentmetadata: name: web namespace: ckad labels: app: nginxspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.30 ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "128Mi"kubectl apply -f deployment.yamlkubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGEweb 3/3 3 3 10sCréer un Service
Section intitulée « Créer un Service »Un Service expose un ensemble de Pods sur le réseau.
Types de Services
Section intitulée « Types de Services »Le champ type détermine jusqu'où le Service est joignable. En son absence,
Kubernetes applique ClusterIP, donc une exposition strictement interne
au cluster. Les deux autres types élargissent progressivement la portée,
NodePort en ouvrant un port sur chaque nœud, LoadBalancer en réclamant
une IP publique au fournisseur cloud.
| Type | Usage | Accessibilité |
|---|---|---|
| ClusterIP | Trafic interne | Dans le cluster uniquement |
| NodePort | Tests, accès externe simple | <NodeIP>:<nodePort> |
| LoadBalancer | Production cloud | IP externe via load balancer |
Service ClusterIP
Section intitulée « Service ClusterIP »Deux champs décident de tout : le selector, qui doit correspondre aux
labels des Pods, et le couple port (celui du Service) et targetPort
(celui du conteneur). Un selector qui ne matche rien produit un Service sans
endpoints, joignable mais muet.
apiVersion: v1kind: Servicemetadata: name: web namespace: ckadspec: type: ClusterIP selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80Créer une ConfigMap
Section intitulée « Créer une ConfigMap »Une ConfigMap stocke des configurations non sensibles.
ConfigMap avec clés/valeurs et fichier
Section intitulée « ConfigMap avec clés/valeurs et fichier »Une ConfigMap accepte deux usages dans le même objet : des paires
clé-valeur courtes, destinées aux variables d'environnement, et des
fichiers de configuration entiers introduits par le bloc | de YAML,
destinés à être montés en volume.
apiVersion: v1kind: ConfigMapmetadata: name: app-config namespace: ckaddata: APP_ENV: production APP_DEBUG: "false" config.json: | { "database": "postgres", "port": 5432 }Utilisation avec envFrom
Section intitulée « Utilisation avec envFrom »Le Pod ne cite plus les clés une par une, il référence la ConfigMap entière. Attention, l'injection a lieu au démarrage du conteneur : modifier la ConfigMap ensuite n'a aucun effet tant que le Pod n'est pas recréé.
apiVersion: v1kind: Podmetadata: name: app namespace: ckadspec: containers: - name: app image: busybox:1.36 command: ["sleep", "3600"] envFrom: - configMapRef: name: app-configToutes les clés de la ConfigMap deviennent des variables d'environnement.
Créer un Secret
Section intitulée « Créer un Secret »Un Secret stocke des
données sensibles. Utilisez stringData pour écrire en clair dans le manifest.
Secret avec stringData
Section intitulée « Secret avec stringData »Le champ stringData accepte des valeurs en clair et l'API server les
encode lui-même en base64 dans le champ data. C'est un champ d'écriture
seule : une relecture avec kubectl get -o yaml ne renverra que data.
apiVersion: v1kind: Secretmetadata: name: db-credentials namespace: ckadtype: OpaquestringData: username: admin password: S3cr3tP@ssw0rd!Utilisation dans un Pod
Section intitulée « Utilisation dans un Pod »secretKeyRef désigne une clé précise d'un Secret et suppose que celui-ci
existe déjà dans le même namespace. Sinon le Pod reste en
CreateContainerConfigError jusqu'à ce que le Secret apparaisse.
apiVersion: v1kind: Podmetadata: name: app namespace: ckadspec: containers: - name: app image: busybox:1.36 command: ["sleep", "3600"] env: - name: DB_USER valueFrom: secretKeyRef: name: db-credentials key: username - name: DB_PASS valueFrom: secretKeyRef: name: db-credentials key: passwordMulti-document YAML
Section intitulée « Multi-document YAML »Regroupez plusieurs ressources liées dans un seul fichier avec --- :
apiVersion: v1kind: ConfigMapmetadata: name: app-config namespace: ckaddata: APP_ENV: production---apiVersion: apps/v1kind: Deploymentmetadata: name: app namespace: ckadspec: replicas: 2 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: app image: nginx:1.30 envFrom: - configMapRef: name: app-config---apiVersion: v1kind: Servicemetadata: name: app namespace: ckadspec: selector: app: myapp ports: - port: 80kubectl apply -f app-stack.yamlToutes les ressources sont créées en une seule commande.
Corriger rapidement une ressource existante
Section intitulée « Corriger rapidement une ressource existante »Réécrire un fichier puis le réappliquer coûte du temps quand il n'y a qu'un
champ à changer. Trois commandes modifient la ressource directement dans le
cluster, de la plus souple à la plus expéditive. Le revers est connu : ces
modifications ne se retrouvent pas dans vos fichiers YAML, donc le prochain
kubectl apply les écrasera.
kubectl edit (modification interactive)
Section intitulée « kubectl edit (modification interactive) »C'est l'option la plus permissive : tout le manifest est éditable, y compris les champs que vous n'aviez pas prévu de toucher.
kubectl edit deployment webOuvre le manifest dans votre éditeur. Les changements sont appliqués à la sauvegarde.
kubectl patch (modification ciblée)
Section intitulée « kubectl patch (modification ciblée) »Le patch vise un chemin précis dans l'objet, sans ouvrir d'éditeur, ce qui le
rend scriptable. Avec --type merge, la portion JSON fournie est fusionnée
dans la ressource existante ; le reste est laissé intact.
# Changer le nombre de réplicaskubectl patch deployment web --type merge -p '{"spec":{"replicas":5}}'
# Changer l'imagekubectl patch deployment web --type merge \ -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.25"}]}}}}'kubectl set (raccourcis courants)
Section intitulée « kubectl set (raccourcis courants) »Pour les modifications les plus fréquentes, kubectl set évite d'écrire le
JSON à la main. Sur un Deployment, changer l'image déclenche immédiatement un
rolling update.
# Changer l'imagekubectl set image deployment/web nginx=nginx:1.25
# Changer les resourceskubectl set resources deployment/web -c=nginx --limits=cpu=500m,memory=256MiValider avant d'appliquer
Section intitulée « Valider avant d'appliquer »Trois niveaux de vérification existent, du moins coûteux au plus complet, et
ils ne détectent pas les mêmes erreurs. La validation côté client attrape
les fautes de syntaxe, la validation côté serveur attrape les champs
inconnus et les refus d'admission, kubectl diff montre ce qui va changer
sur une ressource déjà déployée.
Validation côté client
Section intitulée « Validation côté client »Rien n'est créé et le manifest n'atteint jamais l'étape d'admission du cluster.
kubectl apply --dry-run=client -f mon-manifest.yamlVérifie la syntaxe YAML et la structure de base. Rapide mais limité.
Validation côté serveur
Section intitulée « Validation côté serveur »Le manifest fait cette fois l'aller-retour complet, mais rien n'est persisté dans etcd.
kubectl apply --dry-run=server -f mon-manifest.yamlEnvoie le manifest à l'API server pour validation complète :
- Vérifie les admission controllers
- Détecte les champs inconnus
- Valide les contraintes (quotas, policies...)
Voir les changements avec kubectl diff
Section intitulée « Voir les changements avec kubectl diff »Cette commande n'a de sens que si la ressource existe déjà dans le cluster ; sur une ressource inconnue, elle affiche simplement une création complète.
kubectl diff -f mon-manifest.yamlCompare le manifest local avec la ressource existante :
replicas: 3replicas: 5Erreurs qui font perdre du temps en CKAD
Section intitulée « Erreurs qui font perdre du temps en CKAD »Ces erreurs ont un point commun : elles ne produisent pas de message clair. La ressource est acceptée, le Pod démarre parfois, et c'est le comportement observé qui ne correspond pas à l'attendu. Les reconnaître d'un coup d'œil vaut plusieurs minutes gagnées par question.
| Erreur | Conséquence | Solution |
|---|---|---|
| Oublier le namespace | Ressource dans default | Changer le namespace courant |
| Mauvais label Service/Pod | Service sans Endpoints | Aligner les selectors |
port vs targetPort inversés | Connexion impossible | port = Service, targetPort = conteneur |
| Indentation YAML incorrecte | Erreur de parsing | Utiliser 2 espaces, pas de tabs |
Modifier selector d'un Deployment | Erreur "immutable" | Supprimer et recréer |
| Champ au mauvais niveau | Champ ignoré | kubectl explain pour vérifier |
| ConfigMap dans un autre namespace | not found | Même namespace que le Pod |
Exemple de piège : selector immutable
Section intitulée « Exemple de piège : selector immutable »Le selector d'un Deployment est immuable après création : aucun patch,
aucun apply ne le fera changer. Le seul chemin est la suppression suivie
d'une recréation, ce qui interrompt le service le temps du remplacement.
# Impossible de modifier le selector d'un Deployment existantkubectl patch deployment web --type merge -p '{"spec":{"selector":{"matchLabels":{"app":"newapp"}}}}'# Erreur: spec.selector is immutableSolution : supprimer et recréer le Deployment.
kubectl delete deployment webkubectl apply -f web.yaml # avec le nouveau selectorChecklist de validation
Section intitulée « Checklist de validation »Avant chaque kubectl apply :
- Namespace : suis-je dans le bon namespace ?
- Labels : sont-ils cohérents entre Deployment, Pod et Service ?
- Image : nom et tag corrects ?
- Ports :
portettargetPortalignés ? - Resources : requests ≤ limits ?
- Probes : path et port corrects ?
- Volumes : même nom entre
volumesetvolumeMounts?
Tableau récapitulatif
Section intitulée « Tableau récapitulatif »Voici les cinq ressources manipulées dans ce guide, avec les champs sur lesquels se concentrer quand il faut écrire vite. La colonne « Champs clés » correspond à ce qu'un correcteur d'examen vérifie en premier.
| Ressource | Rôle | Champs clés |
|---|---|---|
| Pod | Exécuter des conteneurs | containers[].image, ports, resources |
| Deployment | Gérer des réplicas | replicas, selector, template |
| Service | Exposer des Pods | selector, ports, type |
| ConfigMap | Configuration non sensible | data (clé/valeur ou fichier) |
| Secret | Données sensibles | stringData (écriture) ou data (base64) |
Commandes de référence rapide
Section intitulée « Commandes de référence rapide »Ce bloc rassemble les commandes du guide dans l'ordre du workflow : explorer, générer, valider, corriger, déboguer. Entraînez-vous à les taper sans les relire, la vitesse de frappe fait partie de l'épreuve.
# Explorer l'APIkubectl api-resourceskubectl explain deployment.spec.template.spec.containers
# Générer des manifestskubectl create deployment web --image=nginx --dry-run=client -o yaml > web.yamlkubectl expose deployment web --port=80 --dry-run=client -o yaml > svc.yaml
# Validerkubectl apply --dry-run=client -f manifest.yamlkubectl apply --dry-run=server -f manifest.yamlkubectl diff -f manifest.yaml
# Corriger rapidementkubectl edit deployment webkubectl patch deployment web --type merge -p '{"spec":{"replicas":5}}'kubectl set image deployment/web nginx=nginx:1.25
# Débuggerkubectl get pods -A # tous les namespaceskubectl describe pod webkubectl logs webkubectl exec -it web -- shContrôle de connaissances
Section intitulée « Contrôle de connaissances »Sept questions pour vérifier que les réflexes sont acquis : structure d'un manifest, cohérence des labels et choix de la bonne commande de validation.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- Workflow examen : namespace → générer → compléter → valider → appliquer
kubectl explaindocumente chaque champ depuis le cluster--dry-run=client -o yamlgénère un squelette à compléterkubectl exposecrée un Service avec les bons labels automatiquement- Labels cohérents entre Deployment, Pod template et Service selector
--dry-run=servervalide contre l'API et les admission controllerskubectl editetkubectl patchpour corriger rapidement- Multi-document YAML (
---) pour regrouper les ressources liées - Namespace courant : le changer évite les erreurs de cible
- stringData dans les Secrets évite l'encodage base64 manuel