Aller au contenu
Conteneurs & Orchestration medium

Utilisation des contextes Kubernetes

10 min de lecture

logo kubernetes

Dans un environnement Kubernetes multi-cluster, la gestion des contextes est essentielle pour naviguer efficacement entre différents environnements (développement, test, production). Un contexte permet de passer rapidement d’un environnement à un autre sans reconfigurer vos kubeconfig à chaque fois.

Sans une bonne organisation des contextes, on risque des erreurs critiques comme déployer une modification en production au lieu d’un environnement de test.

Un contexte Kubernetes est une configuration qui associe :

  • Un cluster : l’ensemble des ressources Kubernetes gérées.
  • Un utilisateur : les identifiants et permissions pour interagir avec le cluster.
  • Un namespace : l’espace logique dans lequel les ressources sont organisées.

L’objectif est de permettre à kubectl de savoir quel cluster utiliser, avec quel utilisateur et dans quel namespace. Cela évite de répéter ces informations à chaque commande.

Dans un environnement Kubernetes, il est courant de travailler avec plusieurs clusters :

  • Un cluster local pour le développement (kind, minikube, k3d).
  • Un cluster de test/staging pour valider les modifications.
  • Un cluster de production qui exécute les services en ligne.
  • Plusieurs clusters clients si on gère des infrastructures différentes.

Grâce aux contextes, on peut facilement basculer d’un environnement à l’autre sans risquer d’exécuter une commande sur le mauvais cluster.

Les contextes sont enregistrés dans le fichier kubeconfig (~/.kube/config par défaut). Ce fichier regroupe toutes les informations nécessaires pour se connecter aux clusters, y compris :

  • La liste des clusters disponibles.
  • Les informations d’authentification des utilisateurs.
  • La liste des contextes enregistrés.
  • Le contexte actif utilisé par défaut.

On peut afficher le fichier kubeconfig avec :

Fenêtre de terminal
cat ~/.kube/config

Ou récupérer le contexte actif avec :

Fenêtre de terminal
kubectl config current-context

Le fichier kubeconfig est un élément clé dans la gestion des contextes Kubernetes. Il permet à kubectl de savoir quel cluster utiliser, avec quel utilisateur et quel namespace. Ce fichier peut inclure plusieurs clusters, utilisateurs et contextes et il est souvent stocké par défaut dans ~/.kube/config.

Dans ce chapitre, nous allons explorer la structure de kubeconfig, ses principaux éléments et comment inclure plusieurs fichiers kubeconfig.

Un fichier kubeconfig est un fichier YAML contenant trois sections principales :

  1. clusters : définit les clusters disponibles
  2. users : stocke les informations d’authentification
  3. contexts : associe un cluster et un utilisateur
  4. current-context : indique le contexte utilisé par défaut

Exemple de fichier ~/.kube/config :

apiVersion: v1
kind: Config
clusters:
- name: cluster-dev
cluster:
server: https://dev-cluster.example.com
certificate-authority: /path/to/ca.crt
- name: cluster-prod
cluster:
server: https://prod-cluster.example.com
certificate-authority: /path/to/ca.crt
users:
- name: dev-user
user:
client-certificate: /path/to/dev-user.crt
client-key: /path/to/dev-user.key
- name: prod-user
user:
token: "xyz789"
contexts:
- name: dev-context
context:
cluster: cluster-dev
user: dev-user
namespace: dev-namespace
- name: prod-context
context:
cluster: cluster-prod
user: prod-user
namespace: prod-namespace
current-context: dev-context

Explication des éléments du fichier :

  • clusters :

    • name : identifiant du cluster
    • server : URL du serveur API Kubernetes
    • certificate-authority : chemin du certificat CA pour sécuriser la connexion
  • users :

    • name : identifiant de l’utilisateur
    • client-certificate / client-key : authentification par certificat
    • token : authentification par jeton
  • contexts :

    • name : nom du contexte
    • cluster : référence à un cluster défini
    • user : référence à un utilisateur défini
    • namespace : namespace par défaut utilisé
  • current-context :

    • Indique quel contexte est actif par défaut

Si on dois travailler avec plusieurs fichiers kubeconfig (par exemple, un fichier pour chaque cluster), on peut les fusionner sans modifier ~/.kube/config.

Il suffit de définir la variable KUBECONFIG pour charger plusieurs fichiers simultanément :

Fenêtre de terminal
export KUBECONFIG=/chemin/vers/kubeconfig1:/chemin/vers/kubeconfig2

On peut ensuite afficher tous les contextes disponibles :

Fenêtre de terminal
kubectl config get-contexts

Maintenant que nous avons une idée de la structure de mon fichier kubeconfig, on peut commencer à gérer les contextes Kubernetes. Cela inclut l’affichage des contextes disponibles ,la modification du contexte actuel, le renommage et la suppression des contextes.

Avant de manipuler les contextes Kubernetes, il est essentiel de savoir lesquels sont déjà configurés. Pour afficher la liste des contextes disponibles dans le fichier kubeconfig, j’utilise la commande :

Fenêtre de terminal
kubectl config get-contexts

Cette commande affiche une sortie similaire à ceci :

CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* dev-context cluster-dev dev-user dev-namespace
prod-context cluster-prod prod-user prod-namespace
  • La colonne CURRENT indique quel est le contexte actif (avec *).
  • NAME est le nom du contexte.
  • CLUSTER correspond au cluster associé.
  • AUTHINFO indique l’utilisateur utilisé pour l’authentification.
  • NAMESPACE (optionnel) montre le namespace par défaut utilisé avec ce contexte.

Si on veut savoir sur quel contexte on travaille actuellement, on utilise :

Fenêtre de terminal
kubectl config current-context

Exemple de sortie :

multinode-demo

Cela signifie que toutes mes commandes kubectl s’exécuteront sur le cluster associé à ce contexte.

Si on travaille régulièrement avec un contexte spécifique, il est utile de le définir comme contexte actif pour éviter d’avoir à le spécifier à chaque commande.

Fenêtre de terminal
kubectl config use-context prod-context

Après cela, toutes mes commandes kubectl seront exécutées sur le cluster de production

Si on a un contexte avec un nom peu explicite, on peut le renommer :

Fenêtre de terminal
kubectl config rename-context ancien-nom nouveau-nom

Exemple :

Fenêtre de terminal
kubectl config rename-context prod-context production

Cela met à jour la configuration sans affecter le cluster ou l’utilisateur.

Si un contexte n’est plus utile, on peut le supprimer avec :

Fenêtre de terminal
kubectl config delete-context nom-du-contexte

Exemple :

Fenêtre de terminal
kubectl config delete-context old-context

Bonnes pratiques pour gérer les contextes Kubernetes

Section intitulée « Bonnes pratiques pour gérer les contextes Kubernetes »
  1. Nommer les contextes clairement :

Utiliser une convention explicite :

prod-ecommerce-cluster1 / dev-fintech-cluster2

🚫 test / mon-cluster (trop vague)

  1. Définir un contexte par défaut sécurisé :

Ne pas laisser production actif par défaut :

Fenêtre de terminal
kubectl config use-context staging-cluster
  1. Vérifier le contexte avant chaque action :

Afficher le contexte actif avant toute commande sensible :

Fenêtre de terminal
kubectl config current-context
  1. Sécuriser le kubeconfig :

Protéger l’accès au fichier :

Fenêtre de terminal
chmod 600 ~/.kube/config

Stocker les kubeconfig sensibles dans Vault ou AWS Secrets Manager.

  1. Sauvegarder le kubeconfig :

Garder une copie de sauvegarde du fichier kubeconfig :

Fenêtre de terminal
cp ~/.kube/config ~/.kube/config.bak
  1. Nettoyer les contextes inutilisés :

Lister et supprimer les contextes obsolètes :

Fenêtre de terminal
kubectl config get-contexts
kubectl config delete-context ancien-contexte
  1. Utiliser des alias pour les commandes fréquentes :

Simplifier les commandes kubectl avec des alias :

Fenêtre de terminal
alias k=kubectl
alias kprod='kubectl config use-context prod-cluster'
alias kdev='kubectl config use-context dev-cluster'
  1. Utiliser kubectx :

Changer rapidement de contexte :

Fenêtre de terminal
kubectx prod-cluster

La gestion des contextes Kubernetes est essentielle pour travailler efficacement et de manière sécurisée avec plusieurs clusters. Grâce aux contextes, on peut facilement naviguer entre différents environnements sans risque d’erreur.

En appliquant les bonnes pratiques, comme nommer clairement les contextes, sécuriser le kubeconfig et vérifier systématiquement le contexte actif, on évite des erreurs critiques, notamment en production. L’utilisation d’outils comme kubectx et l’automatisation via des alias simplifie encore la gestion quotidienne.

Ce guide fait partie d’une série complète dédiée à l’utilisation de kubectl, l’outil en ligne de commande incontournable pour administrer un cluster Kubernetes. Chaque commande de kubectl est abordée en détail dans des guides spécifiques, organisés par thématique pour faciliter l’apprentissage et la référence rapide.

Pour naviguer efficacement entre les différents chapitres, vous trouverez un tableau récapitulatif listant les commandes et leurs guides associés. N’hésitez pas à explorer ces ressources pour approfondir vos connaissances et optimiser votre gestion des clusters Kubernetes.

CommandesDocumentation
kubectl api-resources, kubectl explainExploration de l’API
kubectl create, kubectl applyCréation et mise à jour des ressources
kubectl edit, kubectl patch, kubectl replaceModification des ressources
kubectl get, kubectl describe, kubectl logs, kubectl topRécupération d’informations sur les ressources
kubectl exec, kubectl attach, kubectl debug, kubectl cpGestion et Debug des Pods
kubectl delete, kubectl annotate, kubectl labelSuppression et annotation
kubectl expose, kubectl port-forward, kubectl proxyExposition et accès aux applications
kubectl scale, kubectl autoscale, kubectl rollout, kubectl setMise à l’échelle et gestion des déploiements
kubectl wait, kubectl diffAttente et validation des ressources

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.