> ## Content Index
> Fetch the complete content index at: https://www.sfeir.dev/llms.txt
> Use this file to discover other available public pages before exploring further.

# Les 10 commandes kubectl essentielles pour maîtriser Kubernetes
- URL: https://www.sfeir.dev/les-10-commandes-essentielles-de-kubernetes/
- Published: 2024-10-10T15:47:13.000Z
- Updated: 2024-10-10T15:47:13.000Z
- Description: Si vous êtes développeur ou développeuse et que l'idée de taper les longues lignes de commandes de kubectl vous semble fastidieuse, cet article est fait pour vous ! Découvrez comment simplifier votre quotidien avec des astuces pratiques et efficaces.
- Author: Ranushan Rachu
- Tags: Kubernetes, kubectl, API, open source, developpeur

Avant d’aborder le sujet qui nous intéresse, je voulais me présenter. Je m'appelle [Ranushan RACHU](https://github.com/ranushan?ref=sfeir.dev) et je suis développeur full-stack Angular/Java, avec une préférence back-end avec Java ☕ & Spring 🍃. 

Cet article se concentrera principalement sur l'exécutable Kubernetes (kubectl) et avec les dix commandes que je trouve particulièrement utiles en tant que développeur.

[![Shared Knowledge](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfho_qgb0xe3CKjziLmMWCqVexPEF0l6gTfaSP3HMy7euCB95h1mj6F6LYHL_REzKB3AaA1l4uqMsVebvAAV0xiPuMMycQEx4ah9r3tLMrWz9FmR5Jc04ihIDnc4vtE9NPwvvSd0-rvN4AQ0Iw_bFRpSwJb?key=wldLGp5j4Frn9bHJNdRn_g)](https://www.freepik.com/free-photo/cheerful-friends-posing-with-books%5F1249417.htm?ref=sfeir.dev#query=knowledge%20sharing&position=7&from%5Fview=keyword&track=ais%5Fhybrid&uuid=07b80c27-7552-4d35-a1e7-a34f8c86edbd)

Partage de connaissances (sharing knowledge to someone else)

## **☸️ Kubernetes**

En préambule, qu'est-ce que Kubernetes ?

[![Cluster Kubernetes](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfVyGpBztXic5bIZBSfC1t462dlbyUIzRHMfKyR-tTfWQlYT-CDJsZfxKvItGUpzmUGRB7vn6xByfL6jpS9mfifqw6GDrfNDl9zfPHLr84TZApKbdtdt6fFQji4iY3SzenZ0L7F-WIs-I9F5nxS_RZiW6A7?key=wldLGp5j4Frn9bHJNdRn_g)](https://img.freepik.com/premium-vector/wheel-helm-container-computer-developer-app-concept-business-digital-open-source-program-data-cod%5F115739-1572.jpg?ref=sfeir.dev)

Kubernetes, l’orchestrateur

[Kubernetes](https://www.sfeir.dev/kubernetes-definition/) est un orchestrateur de conteneurs qui gère, déploie et met à l'échelle plusieurs applications conteneurisées (en isolant les applications dans des conteneurs). De plus, il nous fournit de nombreuses informations telles que la communication entre différentes applications, l’état de santé, la répartition de la charge, etc...

De plus, Kubernetes met à notre disposition un exécutable kubectl qui va communiquer avec le cluster Kubernetes en utilisant les API.

![kubectl communication](https://lh7-rt.googleusercontent.com/docsz/AD_4nXegvKI7NbRM9HM0p6np38Ppsb7TGP3s1W0xKWH0XCLrPCjATjPBgifXFoRg7YkGIpzzqP1mBdCmCqy6LZn0QWOG6tgrYzkdISrkOSnikZiWCtNoJaM9UWJrrY1a9gg3EykPSvPNx9pd3zOcoPoL4GPPnTZf?key=wldLGp5j4Frn9bHJNdRn_g)

Communication entre Kubectl et le cluster Kubernetes

## **🔎 Un aperçu des éléments mis en route au sein du cluster Kubernetes**

  - **`kubectl get pods`**
    - À quoi sert-elle ? Permet de voir les pods actifs.
    - *Schéma :*

![Kubernetes Pod](https://lh7-rt.googleusercontent.com/docsz/AD_4nXenjHOoBklTFz52DzeE6jR6o5iJJa2Bm2GaOKn1J7IP2hih6JGktF-cxrJMwJSLIGIGvtjd3W8OemfyLE5cUbmPLudnpgCwTBV360iLG_yLNUttcmfNvztDctlSCQerGGbzSjYb4Er75UDGgR458qjVDVZE?key=wldLGp5j4Frn9bHJNdRn_g)

Liste des pods actives

    - *Explication :*

🎯 L’objectif de cette commande est de voir la liste des applications qui sont mises en route et opérationnelles au niveau du cluster.

| NAME  | READY | STATUS  | RESTART | AGE  |
| ----- | ----- | ------- | ------- | ---- |
| pod-1 | 1/1   | Running | 0       | 2m45 |
| pod-2 | 1/1   | Running | 0       | 2m45 |
| pod-3 | 1/1   | Running | 0       | 2m45 |

  - **`kubectl get service`**
    - *Elle sert à quoi ?* Permet de voir les services qui sont greffés au pod.
    - *Schéma :*

![Kubernetes Service](https://lh7-rt.googleusercontent.com/docsz/AD_4nXeumEBz0cdjlQYCITZ7UXM6pFTkAinMLlcPBspRAhGHWN4ibuaeVUDh9RCsP8-hinTRp9q0QEu6aD91S6q2KhgzctiutXN9UtWfqf55T84G6R7fwC4EPHXjor_jgHXXEF6bY2zC-5B5EM3Ieao58PlDqeSl?key=wldLGp5j4Frn9bHJNdRn_g)

Ajout d’un service pour application Java

    - *Explication :*

🎯 L’objectif de cette commande est de voir quelles sont les applications qui sont exposées à l’extérieur du conteneur. Par exemple, si on veut accéder aux API de l’application Java, nous avons juste à utiliser l’IP que Kubernetes nous a mis à disposition (ex : https://32.150.190.10/swagger-ui/index.html).

| NAME      | TYPE         | CLUSTER-IP  | EXTERNAL\_IP  | PORT(S)     | AGE |
| --------- | ------------ | ----------- | ------------- | ----------- | --- |
| service-1 | LoadBalancer | 10.75.20.10 | 32.150.190.10 | 80:8080/TCP | 31s |

  - **`kubectl get namespace`**
    - *Elle sert à quoi ?* Permet de voir les différents espace de travail disponible dans le cluster.
    - *Schéma :*

![Kubernetes Namespace](https://lh7-rt.googleusercontent.com/docsz/AD_4nXeQtgrM-nEqyRNDqLAMVWxH8O9bRpGds9B-sR0I03Z3Vr2OzFWOSXeqBnKqpTxpBRdtF-KzIdJBH7LcXVvwQj_A46X2oQb8eKOscrkr26O4UZUJ2mK9NdRWgKQR10S6SDmtlPAPTYceAYWERVqk9JVWRGY?key=wldLGp5j4Frn9bHJNdRn_g)

Travailler dans des environnements différents

    - *Explication :*

🎯 L’objectif de cette commande est de voir quels sont les environnements de travail disponibles dans le cluster.

| NAME         | STATUS | AGE |
| ------------ | ------ | --- |
| default      | Active | 10d |
| kube-system  | Active | 10d |
| sfeir-app    | Active | 9d  |
| sfeir-app-v2 | Active | 3d  |

  - **`kubectl get deployment`**
    - *Elle sert à quoi ?* Permet de voir les différents déploiements disponibles dans le cluster.
    - *Schéma :*

![Kubernetes Deployment](https://lh7-rt.googleusercontent.com/docsz/AD_4nXd74sU_FhDZQWWcKZJ61NJjRYBZ6XGa4dxOcKh1eDYWuDteeX-MS_qn7I3FrST1XmxlioTEyvAbgos7TsCCkV78iQ_hzwMRIL_MzVP79i5aFYj49SRI3meVaomgz-sc5YapUzWPDq7RMk4mzvdKxFFQda7x?key=wldLGp5j4Frn9bHJNdRn_g)

Réplication de la base de donnée

    - *Explication :*

🎯 L’objectif de cette commande est de voir quels sont les déploiements qui sont mis en route sur le cluster. Notamment, elle nous indiquera si la ressource utilisée est répliquée en plusieurs fois. Par exemple, dans l’illustration ci-dessus, nous pouvons voir qu’il y a deux pods avec la base de données MongoDB, au lieu d’envoyer toutes les requêtes à un seul pod (ex : pod-3), Kubernetes va faire en sorte de répartir les requêtes en les envoyant au pod-3 et au pod-4.

| NAME          | READY | UP-TO-DATE | AVAILABLE | AGE |
| ------------- | ----- | ---------- | --------- | --- |
| deployment-db | 2/2   | 1          | 1         | 2s  |

## **🪜 Mise à l'échelle, ❌ Extinction ou Suppression d'une application (un pod)** 

  - **`kubectl scale deployment <deployment_name> –- replicas=<nb_replicas>`**
    - *Elle sert à quoi ?* Permet de gérer la façon dont le déploiement doit être mis en route.
    - *Schéma :*

![Kubernetes Scale Down](https://lh7-rt.googleusercontent.com/docsz/AD_4nXcdin_oD5WkBQQG4WijcA95jYnMs5dmKbsRznY-F3ZFpVh6n_Xot4Bo6TyIrkPP-LwjFFPHo62Ra7ouV37Mj5iYz16vFc8puE30_Nu4HQl4kJvtPqgiv2ZFJrwJcWxqYSWuwxacRu86nCZia6LxAWQXegY?key=wldLGp5j4Frn9bHJNdRn_g)

Scale la base de donnée (Down Pod)

![Kubernetes Scale Up](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfZ-0j4Rd52pTSYmEUk-jzxWZh9GBarGv0S-HnDKZd4Vqp7WmjNBzTLMfTMR4ADCrIO-e5kHShZ9BsywZ6I7uT1Y_-v2FeZeh3bAY3geNbIIyeS8nT2gN4UBbZu45VoQ4G2hwpR0rBh1VuEGL7bv_3yTL_b?key=wldLGp5j4Frn9bHJNdRn_g)

Scaler la base de donnée (Up Pod)

    - *Explication :*

🎯 L’objectif de cette commande est de gérer le nombre de réplications (le même pod multiplié, dans le jargon de Kubernetes : replicat) nécessaire pour le bon fonctionnement de l’application. De plus, elle offre la possibilité d’augmenter ou de diminuer le nombre de ressources (pod) qui, par suite, permettra de répartir les charges entre les différents réplications. Par ailleurs, elle est utile lors de la mise en production de l'application (une nouvelle version de l'application), par exemple, le développeur va fermer le flux de la base de donnée durant la maintenance, pour éviter des données parasites, puis la rétablir une fois la maintenance terminée.

| NAME          | READY | UP-TO-DATE | AVAILABLE | AGE |
| ------------- | ----- | ---------- | --------- | --- |
| deployment-db | 1/1   | 1          | 1         | 2s  |

  - **`kubectl delete pod <pod_name>`**
    - *Elle sert à quoi ?* Elle offre la possibilité de supprimer le pod renseigné.
    - *Schéma :*

![Kubernetes Delete Pod](https://storage.ghost.io/c/0b/31/0b31478e-a66a-46f1-8c34-d44388e21192/content/images/2024/10/image-10.png)

Suppression d'un pod

    - *Explication :*

🎯 L’objectif de cette commande est de supprimer le pod qui a été mis en paramètre de la commande. Utile lorsqu'on a certains pods qui sont tombés en échec lors de la mise en route, dû à une mauvaise configuration ou le pod n'a pas les ressources nécessaires pour bien fonctionner (manque de RAM, CPU ou l'image docker n'a pas été trouvé).

| NAME  | READY | STATUS           | RESTART | AGE  |
| ----- | ----- | ---------------- | ------- | ---- |
| pod-1 | 1/1   | Running          | 0       | 2m45 |
| pod-2 | 1/1   | Running          | 0       | 2m45 |
| pod-3 | 1/1   | Running          | 0       | 2m45 |
| pod-4 | 0/1   | ImagePullBackOff | 0       | 5m45 |
| pod-5 | 1/1   | Running          | 0       | 2m45 |

## **👀 Inspection de l’activité des applications (en cours d'exécution)**

  - **`kubectl logs –tail=<nb_logs_lines> <pod_name>`**
    - *Elle sert à quoi ?* Elle nous donne le journal de log de l'application.
    - *Schéma :*

![Kubernetes Logs](https://storage.ghost.io/c/0b/31/0b31478e-a66a-46f1-8c34-d44388e21192/content/images/2024/10/image-11.png)

Visualiser le journal de log

    - *Explication :*

🎯 L’objectif de cette commande est d'observer le journal de log. Cette commande permet aux développeurs ou autres de voir le comportement de l'application directement dans le conteneur. D'autre part, elle est utile lors des phases de débogage (un comportement inhabituel de l'application) pour remonter la source du problème. Pour info, l'option `tail` est une option modifiable, elle représente le nombre de ligne de log courante qu'on veut afficher (ex : `-tail=20`, retourne les 20 dernières lignes de log de l'application).

## **🔐 Encryption & decryption des informations sensibles**

  - **`kubectl create secret generic <name_secret> --from-literal=<key>=<value>`**
    - *Elle sert à quoi ?* Elle nous crée des informations cryptées.
    - *Schéma :*

![Kubernetes Secret](https://storage.ghost.io/c/0b/31/0b31478e-a66a-46f1-8c34-d44388e21192/content/images/2024/10/image-12.png)

Crypter le mot de passe de la base de donnée

    - *Explication :*

🎯 L'objectif de cette commande est de crypter les informations sensibles. Notamment, les mots de passe pour se connecter à la base de donnée. Attention, il ne faut jamais exposer les données sensibles aux publics comme mettre les informations sur un dépôt public type GitHub ou GitLab. Il faut utiliser le concept de secret que Kubernetes nous propose et l'appliquer ce mécanisme au niveau de notre environnement. Pour information, les secrets sont encodés par défaut en base64 (système encodage/décodage).

| NAME     | TYPE   | DATA | AGE |
| -------- | ------ | ---- | --- |
| secret-1 | Opaque | 2    | 51s |

## **ℹ️ Extra informations sur l'application**

  - **`kubectl describe pod <pod_name>`**
    - *Elle sert à quoi ?* Elle nous donnes des informations détaillées sur un pod ou autre.
    - *Schéma :*

![Kubernetes Describe Pod](https://storage.ghost.io/c/0b/31/0b31478e-a66a-46f1-8c34-d44388e21192/content/images/2024/10/image-10.png)

Récolter des informations sur pod en échec

    - *Explication :*

🎯 Sur le schéma ci-dessus, nous observons un dysfonctionnement d'un pod (pod-4). Pour connaitre les raisons de la mise en échec du pod, il faut inspecter le pod en réalisant la commande `describe`. Celle-ci va nous décrire toutes les événements qui ont été produits sur le pod concerné et les raisons de la mise en échec.

## **🕵️ Spy un conteneur**

  - **`kubectl exec -it <pod_name> –- /bin/bash`**
    - *Elle sert à quoi ?* Elle offre la possibilité d'accéder au conteneur où l'application tourne.
    - *Schéma :*

![](https://storage.ghost.io/c/0b/31/0b31478e-a66a-46f1-8c34-d44388e21192/content/images/2024/10/image-13.png)

    - *Explication :*

🎯 Cette commande est utile lorsque nous voulons inspecter les différents fichiers dans l'enceinte du conteneur. Par exemple, voir où sont stocker les journaux de log ou faire des traitements spécifiques dans le conteneur.

## **🔄 (Bonus) Transfère de fichier depuis une source vers une destination (vise-versa)**

  - **`kubectl cp <pod_name>:<source_path_pod> <destination_local_system>`**
    - *Elle sert à quoi ?* Elle permet de copier un fichier (pod ou local) et de coller à chemin défini (pod ou local)
    - *Schéma :*

![](https://storage.ghost.io/c/0b/31/0b31478e-a66a-46f1-8c34-d44388e21192/content/images/2024/10/image-14.png)

    - *Explication :*

🎯 Cette commande m'a beaucoup servi pour inspecter les anciens logs. Je me suis retrouvé à copier des logs de la veille pour résoudre des problèmes inhabituels de l'application. Le fait de transférer des fichiers du conteneur jusqu'au système faciliter le travail, pas besoin d'aller dans le conteneur à moins de compresser tous les logs sous format Zip.

## 📝 **Résumé des commandes**

- **`kubectl get pods`**
- **`kubectl get service`**
- **`kubectl get namespace`**
- **`kubectl get deployment`**
- **`kubectl scale deployment <deployment_name> –- replicas=<nb_replicas>`**
- **`kubectl delete pod <pod_name>`**
- **`kubectl logs –tail=<nb_logs_lines> <pod_name>`**
- **`kubectl create secret generic <name_secret> --from-literal=<key>=<value>`**
- **`kubectl describe pod <pod_name>`**
- **`kubectl exec -it <pod_name> –- /bin/bash`**
- **`kubectl cp <pod_name>:<source_path_pod> <destination_local_system>`**

## 📝 **Créer son propre exécutable**

Le but étant de créer un exécutable permettant de simplifier l'ensemble des commandes en interrogeant directement le cluster Kubernetes.

1. Récupérer le fichier de configuration du cluster Kubernetes. Généralement, on peut le récupérer depuis le dashboard de Kubernetes ou Rancher.

```yaml
apiVersion: v1
kind: Config
clusters:
- name: "kube-sandbox-dev"
  cluster:
    server: "https://rancher-dev.lab.ranushan.com/k8s/clusters/a-b-c12defgh"

users:
- name: "kube-sandbox-dev"
  user:
    token: "ranu-token"

contexts:
- context:
    cluster: "kube-sandbox-dev"
    user: "kube-sandbox-dev"
    namespace: "Sfeir-App"
  name: 'kube-sandbox-dev'

current-context: "kube-sandbox-dev"
```

1. Téléchargement du client **kubectl** en lançant la commande curl depuis le terminal ou depuis le site : [https://kubernetes.io/fr/docs/tasks/tools/install-kubectl](https://kubernetes.io/fr/docs/tasks/tools/install-kubectl/?ref=sfeir.dev)

`curl -LO `[https://dl.k8s.io/release/v1.31.0/bin/windows/amd64/kubectl.exe](https://dl.k8s.io/release/v1.31.0/bin/windows/amd64/kubectl.exe?ref=sfeir.dev)

1. Organiser correctement votre espace de travail pour lancer Kube
  1. Crée un dossier kube
  - A l'intérieur créer deux dossiers
    - Le 1er dossier, nommer le kubectl
      - A l'intérieur créer un dossier avec la version de kubectl (ex : 1.31.0), cela permet de versionner l'exécutable
        - Ajouter l'exécutable, télécharger précédemment
    - Le 2ème dossier, nommer le kubeconfig  
      - Ajouter à l'intérieur la configuration récupérer depuis le cluster
  - A la racine, du dossier kube
    - Créer un fichier exécutable, dans l'exemple, je crée un fichier kube.bat.

```shell
set PATH=C:\dev\01_Installation\kube\kubectl\1.31.0;%PATH%
set KUBECONFIG=C:\dev\01_Installation\kube\kubeconfig\kube-sandbox-dev
doskey k=C:\dev\01_Installation\kube\kubectl\1.31.0\kubectl.exe $*
doskey p=C:\dev\01_Installation\kube\kubectl\1.31.0\kubectl.exe get pods
doskey up=C:\dev\01_Installation\kube\kubectl\1.31.0\kubectl.exe scale deployment $* –- replicas=1
doskey down=C:\dev\01_Installation\kube\kubectl\1.31.0\kubectl.exe scale deployment $* –- replicas=0
doskey delete=C:\dev\01_Installation\kube\kubectl\1.31.0\kubectl.exe delete pod $*
doskey l=C:\dev\01_Installation\kube\kubectl\1.31.0\kubectl.exe logs –tail=20 $*
doskey shinpod=C:\dev\01_Installation\kube\kubectl\1.31.0\kubectl.exe exec -it $* –- /bin/bash

kubectl config use-context kube-sandbox-dev

cmd /k kubectl get pods
```

1. On peut étendre les différentes touches (doskey), en rajoutant des commandes
2. Lancer l'exécutable kube.bat
3. Par exemple, on lance la touche l sur le pod-1 \=> `l pod-1`
4. Il nous affiche les logs courantes

## 🏁 **Pour terminer...**

En conclusion, j'espère que vous avez apprécié de lire mon article 📖 (1st time) et d'en apprendre davantage sur les commandes de **kubectl**.

Pour ma part 👨🏾‍💻, cet article m'a donné l'opportunité de partager mon savoir à travers ce contenu et de le rendre le plus accessible possible (vulgarisation).

Et encore un grand merci 🙏 SFEIR 🙏 pour m'avoir donné l'occasion de réaliser cet article.