Bases kubectl
Infos cluster
kubectl cluster-info kubectl get nodes kubectl config current-context kubectl config use-context my-cluster
Commandes essentielles
kubectl get <resource>Lister les ressources
kubectl describe <resource> <name>Informations détaillées sur la ressource
kubectl create -f file.yamlCréer une ressource depuis un fichier
kubectl apply -f file.yamlCréer ou mettre à jour une ressource
kubectl delete -f file.yamlSupprimer une ressource depuis un fichier
kubectl edit <resource> <name>Modifier une ressource en place
kubectl api-resourcesLister tous les types de ressources
Formats de sortie
-o wideColonnes supplémentaires (IP, nœud)
-o yamlSortie YAML complète
-o jsonSortie JSON complète
-o jsonpath='{.spec}'Extraire des champs spécifiques
--sort-by=.metadata.nameTrier la sortie par champ
Pods
Opérations sur les pods
kubectl get pods kubectl get pods -A # all namespaces kubectl run nginx --image=nginx # quick pod kubectl delete pod nginx
YAML de pod
apiVersion: v1 kind: Pod metadata: name: myapp labels: { app: myapp } spec: containers: - name: app image: nginx:1.27 ports: - containerPort: 80
Valeurs d'état des pods
RunningTous les conteneurs démarrés
PendingEn attente de planification ou de téléchargement d'image
CrashLoopBackOffLe conteneur plante et redémarre en boucle
ImagePullBackOffImpossible de télécharger l'image du conteneur
CompletedExécution terminée (Jobs)
Déploiements
YAML de déploiement
apiVersion: apps/v1 kind: Deployment metadata: name: web spec: replicas: 3 selector: matchLabels: { app: web } template: metadata: labels: { app: web } spec: containers: - name: web image: nginx:1.27 ports: - containerPort: 80
Commandes de déploiement
kubectl get deployLister les déploiements
kubectl scale deploy web --replicas=5Mettre à l'échelle les répliques
kubectl set image deploy/web web=nginx:1.28Mettre à jour l'image (déploiement progressif)
kubectl rollout status deploy/webSurveiller la progression du déploiement
kubectl rollout undo deploy/webRevenir à la révision précédente
kubectl rollout history deploy/webVoir l'historique des révisions
Services
Types de service
ClusterIPInterne uniquement (défaut)
NodePortExposer sur l'IP de chaque nœud à un port statique
LoadBalancerÉquilibreur de charge externe (cloud)
ExternalNameAlias DNS vers un service externe
YAML de service
apiVersion: v1 kind: Service metadata: name: web-svc spec: type: ClusterIP selector: { app: web } ports: - port: 80 targetPort: 80
Exposition rapide
kubectl expose deploy web --port=80 --type=ClusterIP kubectl expose deploy web --port=80 --type=NodePort kubectl get svc
ConfigMaps & Secrets
ConfigMap
kubectl create configmap app-cfg \ --from-literal=DB_HOST=db.example.com \ --from-file=config.ini
Secret
kubectl create secret generic db-creds \ --from-literal=username=admin \ --from-literal=password=s3cret
Utiliser dans les pods
# As environment variables envFrom: - configMapRef: { name: app-cfg } - secretRef: { name: db-creds } # As volume mount volumes: - name: cfg configMap: { name: app-cfg }
Commandes
kubectl get cmLister les ConfigMaps
kubectl get secretLister les Secrets
kubectl describe cm app-cfgAfficher les données du ConfigMap
kubectl get secret db-creds -o yamlAfficher le Secret (encodé en base64)
Namespaces
Commandes de namespace
kubectl get nsLister les namespaces
kubectl create ns stagingCréer un namespace
kubectl delete ns stagingSupprimer le namespace et toutes ses ressources
kubectl get pods -n stagingLister les pods dans un namespace
kubectl get pods -ALister les pods dans tous les namespaces
Définir le namespace par défaut
kubectl config set-context --current \ --namespace=staging
Volumes
PersistentVolumeClaim
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: data-pvc spec: accessModes: [ReadWriteOnce] resources: requests: { storage: 10Gi }
Monter dans un pod
volumes: - name: data persistentVolumeClaim: claimName: data-pvc containers: - volumeMounts: - name: data mountPath: /app/data
Types de volume
emptyDirRépertoire temporaire, supprimé avec le pod
hostPathMonter un chemin du système hôte
persistentVolumeClaimStockage persistant (PVC)
configMapMonter un ConfigMap en tant que fichiers
secretMonter un Secret en tant que fichiers
Ingress
YAML Ingress
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress spec: rules: - host: app.example.com http: paths: - path: / pathType: Prefix backend: service: name: web-svc port: { number: 80 }
Notes Ingress
Ingress ControllerObligatoire (nginx-ingress, traefik, etc.)
pathType: PrefixCorrespondance par préfixe d'URL
pathType: ExactCorrespondance exacte du chemin URL
TLSAjouter une section tls: avec le nom du secret
Débogage
Commandes de diagnostic
kubectl logs <pod>stdout/stderr du conteneur
kubectl logs <pod> -c <ctr>Logs d'un conteneur spécifique
kubectl logs <pod> --previousLogs du conteneur planté
kubectl describe pod <pod>Événements, conditions, statut
kubectl exec -it <pod> -- shShell dans le conteneur
kubectl port-forward <pod> 8080:80Rediriger un port local vers le pod
kubectl top podsUtilisation CPU/mémoire (metrics-server)
kubectl get events --sort-by=.lastTimestampChronologie des événements du cluster
Pod de débogage
kubectl run debug --rm -it --image=busybox -- sh # or attach ephemeral container kubectl debug -it --image=busybox
Patterns courants
Labels & Sélecteurs
kubectl get pods -l app=web kubectl get pods -l 'env in (prod,staging)' kubectl label pod myapp env=prod
Limites de ressources
resources: requests: { cpu: 100m, memory: 128Mi } limits: { cpu: 500m, memory: 256Mi }
Liveness & Readiness
livenessProbe: httpGet: { path: /healthz, port: 8080 } initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: httpGet: { path: /ready, port: 8080 }
Recettes rapides
Simulation à seckubectl apply -f file.yaml --dry-run=client
Générer du YAMLkubectl create deploy web --image=nginx --dry-run=client -o yaml
Surveillerkubectl get pods -w
Copier des fichierskubectl cp file.txt pod:/tmp/
Redémarrer un déploiementkubectl rollout restart deploy/web