Contactez-nous

Installation et utilisation de kubectl : L'outil CLI K8s

Apprenez à installer kubectl, l'outil en ligne de commande essentiel de Kubernetes, sur Linux, macOS et Windows, et découvrez ses commandes de base.

kubectl : votre couteau suisse pour Kubernetes

Quel que soit l'environnement Kubernetes que vous avez choisi (local, cloud ou on-premise), vous aurez besoin d'un moyen d'interagir avec lui : pour déployer des applications, inspecter l'état du cluster, consulter les logs, ou effectuer des tâches de maintenance. L'outil principal et incontournable pour cela est `kubectl` (prononcé "kube control", "kube cuttle", ou parfois "kube C T L").

`kubectl` est l'interface en ligne de commande (CLI) officielle de Kubernetes. Elle vous permet de communiquer avec l'API Server de votre cluster pour lui envoyer des commandes et recevoir des informations. Maîtriser `kubectl` est donc une compétence fondamentale pour quiconque travaille avec Kubernetes, que vous soyez développeur, opérateur ou administrateur.

Ce chapitre vous guidera à travers l'installation de `kubectl` sur les principaux systèmes d'exploitation et vous introduira à sa syntaxe de base ainsi qu'à quelques commandes essentielles pour commencer.

Installation de kubectl sur votre système

L'installation de `kubectl` est généralement simple et peut se faire de plusieurs manières selon votre système d'exploitation.

Sur Linux :

  • Via un gestionnaire de paquets (recommandé si disponible) :
    - Sur Debian/Ubuntu :
    sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl
    sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt-get update
    sudo apt-get install -y kubectl

    - Sur CentOS/Fedora/RHEL :
    cat <
  • Via téléchargement direct du binaire :
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

Sur macOS :

  • Via Homebrew (recommandé) :
    brew install kubectl
  • Via téléchargement direct du binaire :
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
    chmod +x ./kubectl
    sudo mv ./kubectl /usr/local/bin/kubectl
    sudo chown root: /usr/local/bin/kubectl # Ou wheel selon le système

Sur Windows :

  • Via Chocolatey ou Scoop (gestionnaires de paquets) :
    - Chocolatey :
    choco install kubernetes-cli

    - Scoop :
    scoop install kubectl
  • Via téléchargement direct du binaire :
    Téléchargez le binaire `kubectl.exe` depuis le lien correspondant à la version stable (par exemple, depuis https://dl.k8s.io/release/stable.txt, construisez l'URL comme `https://dl.k8s.io/release/VERSION/bin/windows/amd64/kubectl.exe`). Ajoutez ensuite le répertoire contenant `kubectl.exe` à votre variable d'environnement `PATH`.

Vérification de l'installation :
Une fois installé, ouvrez un nouveau terminal et tapez :

kubectl version --client

Cela devrait afficher la version du client `kubectl` que vous venez d'installer, confirmant que l'installation a réussi et que l'exécutable est dans votre PATH.

Syntaxe de base de kubectl

La structure générale d'une commande `kubectl` est la suivante :

kubectl [commande] [TYPE] [NOM] [flags]
  • `kubectl` : L'exécutable lui-même.
  • `[commande]` : Spécifie l'opération que vous souhaitez effectuer sur une ou plusieurs ressources (ex : `get`, `describe`, `create`, `apply`, `delete`, `exec`).
  • `[TYPE]` : Spécifie le type de ressource sur lequel vous voulez agir. Le type est sensible à la casse et vous pouvez utiliser la forme singulière, plurielle ou une abréviation (ex : `pod`, `pods`, `po` ; `service`, `services`, `svc` ; `deployment`, `deployments`, `deploy`). Vous pouvez lister tous les types supportés avec `kubectl api-resources`.
  • `[NOM]` : Spécifie le nom de la ressource spécifique sur laquelle vous voulez agir. Ce nom est sensible à la casse. Si vous omettez le nom, la commande s'applique généralement à toutes les ressources du type spécifié dans le contexte actuel (namespace).
  • `[flags]` : Spécifie des options supplémentaires pour la commande. Les flags commencent par `--` (ex : `--namespace=mon-ns`, `-o yaml`, `--all-namespaces` ou `-A`). Vous pouvez obtenir de l'aide sur les flags disponibles pour une commande spécifique avec `kubectl [commande] --help`.

Exemples simples :

  • Lister tous les Pods dans le namespace par défaut :
    kubectl get pods
  • Obtenir des informations détaillées sur un Deployment nommé `mon-app` :
    kubectl describe deployment mon-app
  • Lister les Services dans le namespace `production` :
    kubectl get services --namespace=production
    ou
    kubectl get svc -n production

Quelques commandes essentielles pour démarrer

Voici une sélection de commandes `kubectl` que vous utiliserez très fréquemment :

  • `kubectl get [TYPE] [NOM]` : Affiche des informations de base sur une ou plusieurs ressources. Très utile pour avoir une vue d'ensemble rapide. (Ex: `kubectl get nodes`, `kubectl get pods -o wide`, `kubectl get deploy -A`).
  • `kubectl describe [TYPE] [NOM]` : Fournit des informations beaucoup plus détaillées sur une ressource spécifique, y compris les événements associés. Indispensable pour le diagnostic. (Ex: `kubectl describe pod mon-pod-xyz`, `kubectl describe node worker-1`).
  • `kubectl apply -f [FICHIER_YAML_OU_URL]` : Crée ou met à jour des ressources à partir d'un fichier de manifeste YAML (ou JSON). C'est la méthode préférée pour gérer les ressources de manière déclarative. (Ex: `kubectl apply -f mon-app.yaml`).
  • `kubectl delete [TYPE] [NOM]` ou `kubectl delete -f [FICHIER_YAML]` : Supprime des ressources, soit par nom, soit à partir d'un fichier manifeste. (Ex: `kubectl delete pod mon-pod-ancien`, `kubectl delete -f mon-app.yaml`).
  • `kubectl logs [NOM_POD]` : Affiche les logs d'un conteneur dans un Pod. Ajoutez `-f` pour suivre les logs en temps réel. Si le pod a plusieurs conteneurs, utilisez `-c [NOM_CONTENEUR]`. (Ex: `kubectl logs mon-app-pod-123`, `kubectl logs -f mon-app-pod-123 -c sidecar`).
  • `kubectl exec -it [NOM_POD] -- [COMMANDE]` : Exécute une commande à l'intérieur d'un conteneur d'un Pod. Très utile pour le débogage. `-it` permet d'ouvrir un shell interactif. (Ex: `kubectl exec -it mon-app-pod-123 -- /bin/bash`).
  • `kubectl cluster-info` : Affiche des informations de base sur les adresses du Control Plane et des services du cluster (comme CoreDNS).
  • `kubectl config view` : Affiche la configuration `kubeconfig` actuelle.
  • `kubectl config use-context [NOM_CONTEXTE]` : Permet de basculer entre différents clusters/contextes configurés.

N'oubliez pas la commande magique : `kubectl help` ou `kubectl [commande] --help` pour obtenir de l'aide sur n'importe quelle commande.

Astuces pour une utilisation efficace

Pour améliorer votre productivité avec `kubectl` :

  • Autocomplétion : Configurez l'autocomplétion pour votre shell (Bash ou Zsh). Cela vous fera gagner un temps fou en complétant les commandes, les types de ressources, les noms et les flags. Les instructions se trouvent généralement dans l'aide de `kubectl` (`kubectl completion bash --help`).
  • Alias : Beaucoup d'utilisateurs définissent un alias court pour `kubectl`, comme `k`. Exemple pour Bash/Zsh : `alias k=kubectl`. Vous taperez alors `k get pods` au lieu de `kubectl get pods`.
  • Formats de sortie : Utilisez le flag `-o` pour contrôler le format de sortie : `-o yaml`, `-o json` pour voir la définition complète de la ressource, `-o wide` pour obtenir plus de colonnes dans les listes (comme l'IP du Pod et le Noeud).
  • Namespaces : Utilisez le flag `-n [NAMESPACE]` pour cibler un namespace spécifique, ou `-A` (`--all-namespaces`) pour agir sur toutes les namespaces. Vous pouvez aussi définir un namespace par défaut pour votre contexte actuel avec `kubectl config set-context --current --namespace=mon-ns`.

Maintenant que `kubectl` est installé et que vous connaissez les bases de son utilisation, l'étape suivante consiste à le configurer pour qu'il puisse effectivement communiquer avec votre cluster Kubernetes via le fichier `kubeconfig`.