
Au cœur de la boîte à outils de tout administrateur Kubernetes, on trouve kubectl : la puissante interface en ligne de commande conçue pour gérer efficacement les clusters Kubernetes.
Kubectl (qui se prononce kube-control ou kube-C-T-L) constitue votre canal de communication direct avec le serveur API Kubernetes. Il vous permet de déployer des applications, d'inspecter des ressources, de consulter des logs et d'exécuter pratiquement n'importe quelle opération au sein de votre cluster. Que vous soyez ingénieur DevOps, administrateur de plateforme ou développeur travaillant sur des applications conteneurisées, maîtriser kubectl est indispensable pour une gestion efficace de Kubernetes dans le cloud computing.
Ce cheat sheet pratique recense les commandes kubectl les plus utiles, avec des exemples concrets et des astuces pour vous faire gagner en efficacité au quotidien sur Kubernetes.
Quelles sont les principales catégories de commandes kubectl ?
Logo Kubectl
Les commandes kubectl se répartissent en trois grandes catégories, chacune couvrant un aspect différent de la gestion de cluster :
1. Commandes d'information sur le cluster
Ces commandes apportent un éclairage sur l'état et la configuration de votre cluster Kubernetes :
- Obtenir des informations sur les composants du cluster
- Consulter l'état et les ressources des nœuds
- Vérifier la santé de l'apiserver
- Inspecter les composants du control plane
2. Commandes de gestion des ressources
Les commandes de gestion des ressources servent à créer, modifier, supprimer et inspecter les ressources Kubernetes :
- Créer et mettre à jour des ressources
- Lister et décrire les ressources
- Supprimer des ressources
- Augmenter ou réduire la taille des ressources
- Modifier les ressources en temps réel
3. Commandes de déploiement d'applications
Enfin, les commandes de déploiement d'applications simplifient la mise en production et la gestion du cycle de vie applicatif :
- Déployer des applications depuis du YAML ou du JSON
- Gérer les déploiements et les rollouts
- Configurer l'autoscaling
- Mettre à jour les configurations applicatives
- Gérer la mise en réseau des applications
Ces trois catégories en tête, examinons de plus près quelques commandes kubectl que vous serez amené à utiliser souvent dans votre parcours Kubernetes.
Pour aller plus loin : le cheat sheet des commandes kubectl
personne codant sur un ordinateur portable
Voici un cheat sheet à garder sous la main, qui répertorie les commandes kubectl que vous utiliserez régulièrement, accompagnées d'exemples pour fluidifier vos workflows Kubernetes.
Pods
Les Pods sont les plus petites unités déployables de Kubernetes. Ils regroupent un ou plusieurs conteneurs qui partagent des ressources de stockage et de réseau.
Lister tous les pods :
kubectl get pods
Lister les pods avec plus de détails :
kubectl get pods -o wide
Obtenir des informations détaillées sur un pod précis :
kubectl describe pod
Créer un pod à partir d'un fichier YAML :
kubectl apply -f pod.yaml
Supprimer un pod :
kubectl delete pod
Exécuter une commande dans le conteneur d'un pod :
kubectl exec -it --
Récupérer les logs d'un pod :
kubectl logs
Suivre les logs d'un pod en temps réel :
kubectl logs -f
Récupérer les logs d'un conteneur précis dans un pod multi-conteneurs :
kubectl logs -c
Faire un port-forward vers un pod :
kubectl port-forward :
Copier des fichiers vers/depuis un pod :
kubectl cp :/path/to/file /local/path
kubectl cp /local/path :/path/in/pod
Services
Les Services apportent une mise en réseau stable aux pods et facilitent la communication entre composants en jouant le rôle de couche d'abstraction.
Lister tous les services :
kubectl get services
Obtenir des informations détaillées sur un service :
kubectl describe service
Créer un service à partir d'un fichier YAML :
kubectl apply -f service.yaml
Exposer un déploiement sous forme de service :
kubectl expose deployment --port= --target-port=
Supprimer un service :
kubectl delete service
Voir les endpoints associés à un service :
kubectl get endpoints
Créer un service ClusterIP :
kubectl create service clusterip --tcp=:
Créer un service NodePort :
kubectl create service nodeport --tcp=:
Créer un service LoadBalancer :
kubectl create service loadbalancer --tcp=:
Deployments
Les Deployments assurent des mises à jour déclaratives pour les Pods et les ReplicaSets, ce qui simplifie la mise à l'échelle et l'évolution des applications.
Lister tous les déploiements :
kubectl get deployments
Obtenir des informations détaillées sur un déploiement :
kubectl describe deployment
Créer un déploiement à partir d'un fichier YAML :
kubectl apply -f deployment.yaml
Créer un déploiement directement en ligne de commande :
kubectl create deployment --image=
Mettre à l'échelle un déploiement :
kubectl scale deployment --replicas=
Mettre à jour l'image du conteneur d'un déploiement :
kubectl set image deployment/ =
Revenir à une révision précédente d'un déploiement :
kubectl rollout undo deployment/
Voir le statut du rollout d'un déploiement :
kubectl rollout status deployment/
Voir l'historique des rollouts d'un déploiement :
kubectl rollout history deployment/
Mettre en pause le rollout d'un déploiement :
kubectl rollout pause deployment/
Reprendre le rollout d'un déploiement :
kubectl rollout resume deployment/
ConfigMaps et Secrets
Les ConfigMaps et les Secrets servent à stocker, respectivement, des données de configuration et des informations sensibles.
Note de sécurité importante : par défaut, les ConfigMaps et les Secrets sont stockés non chiffrés dans etcd. Si vous manipulez des données sensibles, activez le chiffrement au repos.
Lister les ConfigMaps :
kubectl get configmaps
Créer une ConfigMap à partir de valeurs littérales :
kubectl create configmap --from-literal=key1=value1 --from-literal=key2=value2
Créer une ConfigMap à partir d'un fichier :
kubectl create configmap --from-file=
Obtenir des informations détaillées sur une ConfigMap :
kubectl describe configmap
Supprimer une ConfigMap :
kubectl delete configmap
Lister les Secrets :
kubectl get Secrets
Créer un Secret à partir de valeurs littérales :
kubectl create secret generic --from-literal=key1=value1 --from-literal=key2=value2
Créer un Secret à partir d'un fichier :
kubectl create secret generic --from-file=
Obtenir des informations détaillées sur un Secret :
kubectl describe secret
Supprimer un Secret :
kubectl delete secret
Astuces de pro pour utiliser kubectl
personne consultant son téléphone tout en codant
Kubectl est l'outil en ligne de commande incontournable pour travailler avec les clusters Kubernetes et en gérer les ressources. Le maîtriser vous simplifiera considérablement la vie : déploiements, mise à l'échelle et dépannage gagnent tous en efficacité. Avec kubectl edit, vous modifiez rapidement des ressources comme les pods et les déploiements, directement en ligne de commande.
Tirez parti des namespaces
Les Namespaces sont une fonctionnalité centrale de Kubernetes : ils permettent de découper votre cluster en sous-clusters virtuels. Très utile dans les environnements multi-tenants ou pour des applications plus complexes.
Lister les ressources d'un namespace donné :
kubectl get -n
Créer une ressource dans un namespace donné :
kubectl apply -f <file.yaml> -n
Définir le namespace par défaut pour toutes les commandes kubectl :
kubectl config set-context --current --namespace=
Voir les ressources sur l'ensemble des namespaces :
kubectl get --all-namespaces
Créer un nouveau namespace :
kubectl create namespace
Mieux vaut regrouper les ressources liées dans leurs propres namespaces pour poser des frontières claires entre applications ou équipes. Choisissez des noms parlants, comme dev-frontend, prod-backend ou monitoring.
Sélecteurs de labels pour filtrer les ressources
Les Labels sont des paires clé-valeur attachées aux objets Kubernetes. Ils sont parfaits pour organiser, sélectionner et gérer plus aisément des groupes de ressources.
Lister les ressources portant un label précis :
kubectl get -l key=value
Lister les ressources avec plusieurs conditions de label :
kubectl get -l ‘key1=value1,key2=value2’
Lister les ressources qui possèdent une clé de label précise (quelle que soit la valeur) :
kubectl get -l ‘key’
Lister les ressources qui n'ont pas un label précis :
kubectl get -l ‘!key’
Ajouter un label à une ressource existante :
kubectl label key=value
Retirer un label d'une ressource :
kubectl label key-
Une stratégie de labellisation cohérente est la clé d'une gestion efficace des ressources. Misez sur des labels comme app, environment, tier, version et owner pour structurer clairement votre inventaire.
Mettez en place des rolling updates
Kubernetes facilite la mise à jour des applications sans interruption grâce aux rolling updates. Cette stratégie remplace progressivement les instances de l'ancienne version par la nouvelle.
Mettre à jour un déploiement avec une nouvelle image (déclenche un rolling update) :
kubectl set image deployment/ =:
Vérifier le statut du rollout :
kubectl rollout status deployment/
Configurer la stratégie de mise à jour dans un YAML de déploiement :
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
Revenir à la version précédente en cas de problème :
kubectl rollout undo deployment/
Mettre en pause le rollout d'un déploiement :
Copykubectl rollout pause deployment/
C'est particulièrement utile pour les déploiements progressifs : vous livrez sur un sous-ensemble de pods, vérifiez le bon fonctionnement, puis poursuivez le rollout après validation.
Reprendre le rollout d'un déploiement :
Copykubectl rollout resume deployment/
Pour les applications critiques, pensez au flag --record lors de modifications de déploiement. Il associe à la révision la commande utilisée, ce qui facilite le suivi de l'historique :
kubectl apply -f deployment.yaml --record
Pilotez quotas et limites de ressources avec rigueur
La gestion des ressources joue un rôle clé dans l'administration de Kubernetes. Définir les bonnes requests et limites est essentiel pour préserver la stabilité de votre cluster et garantir un partage équitable des ressources.
Voir les quotas de ressources d'un namespace :
kubectl get resourcequota -n
Créer un quota de ressources pour un namespace :
kubectl create quota --hard=cpu=1,memory=1G,pods=10 -n
Vérifier l'utilisation des ressources des pods :
kubectl top pods
Vérifier l'utilisation des ressources des nœuds :
kubectl top nodes
Lorsque vous définissez les spécifications d'un conteneur, indiquez systématiquement les requests et les limites :
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Souvenez-vous : les requests aident le scheduler à déterminer où placer votre pod, tandis que les limites fixent l'utilisation maximale au-delà de laquelle les conteneurs risquent d'être terminés. Bonne pratique : calez les requests sur l'utilisation attendue en régime stable, et les limites sur ce qui reste acceptable lors des pics.
Maîtrisez le débogage avec kubectl
Le débogage est essentiel pour faire tourner sereinement vos applications Kubernetes. Heureusement, kubectl ne manque pas de commandes pour vous aider à diagnostiquer rapidement.
Récupérer les logs d'un conteneur :
kubectl logs -c
Débogage interactif via un pod temporaire :
kubectl run debug --rm -it --image=busybox -- sh
Créer un conteneur de débogage attaché à un pod existant :
kubectl debug -it --image=busybox --share-processes --copy-to=
Voir les events d'un namespace :
kubectl get events -n
Vérifier les conditions et les détails de statut d'un pod :
Copykubectl describe pod
Vous obtenez ainsi une sortie plus structurée des conditions du pod, avec l'historique complet des transitions et l'état actuel dans un format facile à lire.
Vérifier la connectivité entre pods avec un conteneur de débogage réseau :
kubectl run test-connectivity --rm -it --image=nicolaka/netshoot -- bash
Pour les problèmes récurrents, pensez au flag -- previous pour consulter les logs des conteneurs précédemment plantés :
kubectl logs --previous
Bonnes pratiques de sécurité avec kubectl
deux personnes codant sur un ordinateur portable
Sécuriser votre cluster Kubernetes est primordial, et kubectl y joue un rôle de premier plan. Voici quelques bonnes pratiques pour garder la main sur la sécurité :
Gérez les contrôles d'accès avec RBAC
Le Role-Based Access Control (RBAC) est la référence en matière d'autorisation dans Kubernetes. Il vous permet de définir des permissions fines pour les utilisateurs et les comptes de service.
Voir les rôles d'un namespace :
kubectl get roles -n
Voir les cluster roles :
kubectl get clusterroles
Voir les role bindings :
kubectl get rolebindings -n
Voir les cluster role bindings :
kubectl get clusterrolebindings
Créer un rôle avec des permissions spécifiques :
kubectl create role developer --verb=get,list,watch --resource=pods,deployments -n
Associer un rôle à un utilisateur :
kubectl create rolebinding dev-user-binding --role=developer --user=dev-user -n
Privilégiez toujours les RoleBindings aux ClusterRoleBindings dès que possible afin de cantonner les permissions à un namespace donné. C'est l'application directe du principe du moindre privilège : on n'ouvre l'accès qu'aux namespaces qui en ont besoin, ce qui réduit l'impact potentiel d'une compromission d'identifiants.
Tenez-vous-en au principe du moindre privilège en n'accordant aux utilisateurs et aux comptes de service que les permissions strictement nécessaires à leurs missions. Prenez l'habitude de revoir régulièrement les role bindings pour qu'ils restent en phase avec l'évolution des rôles et des responsabilités.
Manipulez les Secrets en toute sécurité
Les Kubernetes Secrets doivent être manipulés avec précaution, car ils contiennent des informations sensibles : clés d'API, mots de passe, certificats, etc.
Créer un secret en toute sécurité depuis un fichier :
kubectl create secret generic db-credentials --from-file=./username.txt --from-file=./password.txt
Créer un secret TLS :
kubectl create secret tls tls-secret --cert=path/to/cert --key=path/to/key
Monter des Secrets en variables d'environnement :
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: password
Monter des Secrets en tant que fichiers :
volumes:
- name: secret-volume
secret:
secretName: ssl-certificates
Pensez à des outils externes de gestion des secrets comme HashiCorp Vault, AWS Secrets Manager ou Sealed Secrets pour renforcer la sécurité. Ils apportent des fonctionnalités précieuses : rotation des secrets, pistes d'audit et chiffrement.
Utilisez kubectl avec un contexte sûr
Vérifiez systématiquement que vous opérez dans le bon contexte, pour éviter de modifier le mauvais cluster par inadvertance.
Voir tous les contextes disponibles :
kubectl config get-contexts
Basculer vers un contexte précis :
kubectl config use-context
Voir le contexte courant :
kubectl config current-context
Définir le namespace du contexte courant :
kubectl config set-context --current --namespace=
Sur les environnements de production sensibles, mieux vaut s'appuyer sur des repères visuels — par exemple un prompt shell — affichant le cluster et le namespace courants. C'est un excellent moyen d'éviter les actions accidentelles sur les mauvaises ressources.
Mettez en place des network policies
Les Network Policies font office de pare-feu au sein de votre cluster Kubernetes : elles régissent la communication entre pods.
Lister les network policies :
kubectl get networkpolicies
Créer une network policy qui refuse par défaut tout le trafic entrant :
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
EOF
Créer une network policy qui autorise un trafic spécifique :
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- port: 8080
EOF
Démarrez avec une network policy de type deny-all comme socle, puis n'autorisez que le trafic réellement nécessaire. Vous appliquez ainsi le principe du moindre privilège tout en réduisant au maximum votre surface d'attaque.
Maîtrisez la gestion de Kubernetes avec ces commandes kubectl et bonnes pratiques
Kubectl est un outil incontournable de l'écosystème Kubernetes : c'est votre interface privilégiée pour gérer et opérer vos clusters. En vous appropriant ces commandes et les bonnes pratiques de ce cheat sheet, vous serez prêt à relever en toute confiance les défis des applications conteneurisées.
Gardez en tête que Kubernetes évolue en permanence, et kubectl avec lui. Restez à l'affût des nouveautés et des mises à jour pour continuer à perfectionner vos compétences en gestion de cluster.
Si vous souhaitez explorer des sujets plus avancés, comme l'extension des plages d'adresses IP des services Kubernetes, consultez notre guide détaillé sur la manière d'étendre ces plages en toute fluidité.
À mesure que votre installation Kubernetes monte en charge et gagne en complexité, disposer des bons outils et du bon savoir-faire devient encore plus déterminant. C'est précisément là qu'intervient DoiT. Notre équipe mondiale d'architectes cloud accompagne les entreprises dans la construction d'infrastructures cloud rentables, scalables et résilientes. Nous sommes là pour vous épauler sur les défis pointus de configuration et d'intégration Kubernetes, tout en assurant le dépannage et l'amélioration de l'efficacité opérationnelle.
Échangeons pour découvrir comment nous pouvons vous aider à optimiser votre stratégie d'orchestration de conteneurs, pour de meilleures performances et davantage d'économies.