Aller au contenu
Conteneurs & Orchestration medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Commandes essentielles CKA — Cheatsheet enrichie

18 min de lecture

logo kubernetes

Cette page est une référence opérationnelle pour la CKA. Elle contient les commandes essentielles organisées par domaine d’examen, avec le contexte d’usage et les pièges à éviter.

Pour les explications détaillées, consultez les guides dédiés (kubeadm, etcd, RBAC, etc.). Ici, l’objectif est de mémoriser les commandes et les réflexes.

Ces alias sont indispensables. Configurez-les immédiatement au début de chaque session.

Fenêtre de terminal
# Alias fondamentaux
alias k=kubectl
alias kn='kubectl config set-context --current --namespace'
export do="--dry-run=client -o yaml"
# Autocomplétion (OBLIGATOIRE)
source <(kubectl completion bash)
complete -F __start_kubectl k
# Éditeur
export KUBE_EDITOR=vim

Premier réflexe de chaque question :

Fenêtre de terminal
# Vérifier et changer le contexte
kubectl config current-context
kubectl config use-context <cluster-name>
kubectl config get-contexts

Ce tableau est votre outil de diagnostic rapide. Face à un symptôme, appliquez le premier réflexe.

SituationPremier réflexeCommande
Pod en erreurDescribe + logs previouskubectl describe pod X puis kubectl logs X --previous
Node NotReadyDescribe + logs kubeletkubectl describe node X puis journalctl -u kubelet
Service ne répond pasVérifier endpointskubectl get endpoints X
PVC PendingVérifier PV et SCkubectl get pv,pvc,sc puis kubectl describe pvc X
Scheduling échoueEvents du Podkubectl describe pod X → section Events
Cluster casséÉtat globalkubectl get nodes + kubectl get pods -n kube-system
API server downStatic podscrictl ps ou vérifier /etc/kubernetes/manifests/
etcd casséLogs etcdkubectl logs -n kube-system etcd-master
DNS ne résout pasCoreDNS up?kubectl get pods -n kube-system -l k8s-app=kube-dns
Permissions refuséesTest RBACkubectl auth can-i <verb> <resource> --as=<user>

Ces éléments reviennent constamment. Ne les cherchez pas pendant l’examen.

Fenêtre de terminal
# Static pods (control plane)
/etc/kubernetes/manifests/
# Certificats PKI
/etc/kubernetes/pki/
# Certificats etcd
/etc/kubernetes/pki/etcd/
# Configuration kubelet
/var/lib/kubelet/config.yaml
/etc/kubernetes/kubelet.conf
# Kubeconfig admin
/etc/kubernetes/admin.conf
~/.kube/config
  1. kubeadm sur le control plane
  2. kube-apiserver, scheduler, controller-manager (automatique via kubeadm)
  3. kubelet + kubectl sur le control plane
  4. Drain le premier worker
  5. kubeadm + kubelet + kubectl sur ce worker
  6. Uncordon ce worker
  7. Répéter pour chaque worker
ActionSchedulingPods existants
cordon❌ Bloqué✅ Restent
drain❌ Bloqué❌ Évacués
uncordon✅ Autorisé
TypePortéeRessources
Role + RoleBinding1 namespacePods, Deployments, Secrets…
ClusterRole + ClusterRoleBindingTout le clusterNodes, PVs, Namespaces + tout
ClusterRole + RoleBinding1 namespaceRéutilisation d’un ClusterRole, limité
Fenêtre de terminal
# Appliquer la politique Restricted
kubectl label ns production pod-security.kubernetes.io/enforce=restricted

Ces éléments sont plus complexes. Copiez-les depuis kubernetes.io le jour J.

  • Syntaxe complète d’un Ingress avec TLS
  • Champs avancés d’une NetworkPolicy (namespaceSelector, ipBlock)
  • Options de kubeadm init avancées (HA, —upload-certs)
  • Configuration EncryptionConfiguration pour secrets etcd
  • Syntaxe PodDisruptionBudget

Bookmark recommandés :

  • kubernetes.io/docs/reference/kubectl/quick-reference/
  • kubernetes.io/docs/concepts/security/
  • kubernetes.io/docs/tasks/administer-cluster/
Fenêtre de terminal
# Initialiser le control plane
kubeadm init --pod-network-cidr=10.244.0.0/16
# Configurer kubectl après init
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# Générer la commande join
kubeadm token create --print-join-command
# Vérifier le plan d'upgrade
kubeadm upgrade plan
# Appliquer l'upgrade (adapter la version)
kubeadm upgrade apply v1.X.0
# Upgrade d'un worker
kubeadm upgrade node

Piège : Oublier de faire systemctl daemon-reload && systemctl restart kubelet après upgrade de kubelet.

Fenêtre de terminal
# Sur le control plane
kubectl drain worker1 --ignore-daemonsets --delete-emptydir-data
# Sur le worker
apt-get install -y kubeadm=1.X.0-1.1
kubeadm upgrade node
apt-get install -y kubelet=1.X.0-1.1 kubectl=1.X.0-1.1
systemctl daemon-reload
systemctl restart kubelet
# Sur le control plane
kubectl uncordon worker1
  1. Identifier le symptôme : Que se passe-t-il exactement ?
  2. Localiser le niveau : Pod, Node, ou Cluster ?
  3. Collecter : describe, logs, events
  4. Hypothèse : Quelle pourrait être la cause ?
  5. Corriger et vérifier
Fenêtre de terminal
# Vue d'ensemble
kubectl cluster-info
kubectl get nodes
kubectl get pods -n kube-system
# Health check
kubectl get --raw='/readyz?verbose'
Fenêtre de terminal
# État
kubectl get pod mypod -o wide
# Détails (ESSENTIEL)
kubectl describe pod mypod
# Logs
kubectl logs mypod
kubectl logs mypod --previous # Après crash
kubectl logs mypod -c container # Multi-container
# Shell
kubectl exec -it mypod -- /bin/sh
Fenêtre de terminal
# Depuis le control plane
kubectl describe node worker1
# Sur le node problématique
systemctl status kubelet
journalctl -u kubelet | tail -50
journalctl -u kubelet --since "10 minutes ago" | grep -i error
Fenêtre de terminal
# Logs des static pods
kubectl logs -n kube-system kube-apiserver-master
kubectl logs -n kube-system etcd-master
kubectl logs -n kube-system kube-scheduler-master
kubectl logs -n kube-system kube-controller-manager-master
# Ou directement sur le node
crictl ps
cat /var/log/pods/kube-system_kube-apiserver-*/kube-apiserver/*.log
SymptômeCause probableSolution
Pod PendingPas de node eligibleVérifier taints, resources, nodeSelector
Pod ImagePullBackOffImage inexistante ou credentialsVérifier nom image, registry secret
Pod CrashLoopBackOffApp crashkubectl logs --previous
Pod CreateContainerConfigErrorConfigMap/Secret manquantkubectl describe pod → Events
Node NotReadykubelet downsystemctl restart kubelet
Node MemoryPressureRAM saturéeÉvacuer des Pods
Service non accessibleEndpoints videVérifier selector vs labels Pods
DNS timeoutCoreDNS downVérifier Pods kube-dns
kubectl timeoutAPI server downVérifier /etc/kubernetes/manifests/
Fenêtre de terminal
# Pod
kubectl run nginx --image=nginx $do > pod.yaml
# Deployment
kubectl create deploy webapp --image=nginx --replicas=3 $do > deploy.yaml
# Service
kubectl expose deploy webapp --port=80 $do > svc.yaml
# Job
kubectl create job myjob --image=busybox -- /bin/sh -c "echo hello" $do
# CronJob
kubectl create cronjob mycron --image=busybox --schedule="*/5 * * * *" -- date $do
# ConfigMap
kubectl create cm myconfig --from-literal=key=value $do
# Secret
kubectl create secret generic mysecret --from-literal=password=secret $do
# Role
kubectl create role myrole --verb=get,list --resource=pods $do
# RoleBinding
kubectl create rolebinding mybinding --role=myrole --user=jane $do
# ServiceAccount
kubectl create sa mysa $do
Fenêtre de terminal
# === CONTEXTE ===
kubectl config use-context <cluster>
kubectl config set-context --current --namespace=<ns>
# === CLUSTER ===
kubeadm init --pod-network-cidr=10.244.0.0/16
kubeadm token create --print-join-command
kubeadm upgrade plan && kubeadm upgrade apply v1.X.0
# === ETCD ===
export ETCDCTL_API=3
etcdctl snapshot save /backup/snap.db --endpoints=... --cacert=... --cert=... --key=...
etcdctl snapshot restore /backup/snap.db --data-dir=/var/lib/etcd-new
# === NODES ===
kubectl cordon/drain/uncordon <node>
kubectl taint node <node> key=value:NoSchedule
kubectl label node <node> disktype=ssd
# === RBAC ===
kubectl create role <name> --verb=get,list --resource=pods
kubectl create rolebinding <name> --role=<role> --user=<user>
kubectl auth can-i create pods --as=jane
# === TROUBLESHOOT ===
kubectl describe pod/node/svc <name>
kubectl logs <pod> --previous
journalctl -u kubelet | grep error
systemctl restart kubelet
  1. Alias + autocomplétion : configurez-les immédiatement à chaque session
  2. Contexte : vérifiez-le avant chaque question
  3. etcd : mémorisez le chemin des certs (/etc/kubernetes/pki/etcd/)
  4. Upgrade : control plane d’abord, puis workers avec drain/uncordon
  5. RBAC : Role = namespace, ClusterRole = cluster
  6. Troubleshooting = 30% : maîtrisez describe, logs, events, journalctl
  7. Static pods : manifests dans /etc/kubernetes/manifests/
  8. Génération YAML : utilisez $do systématiquement

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn