Kubectl de A à Z
Dans ce guide, je vais vous accompagner à travers l'administration de clusters Kubernetes en utilisant l'outil kubectl. kubectl est l'interface en ligne de commande qui vous permet d'interagir avec vos clusters Kubernetes.
Que vous soyez débutant ou administrateur expérimenté, ce guide vous fournira les connaissances nécessaires pour démarrer dans l'administration de vos clusters en utilisant des exemples concrets et des explications claires. Vous découvrirez comment installer kubectl, vous connecter à un cluster, gérer les Pods et les Services et bien plus encore.
Concepts de base
Avant de plonger dans les commandes et les fonctionnalités avancées, il est essentiel de comprendre les concepts de base de Kubernetes. Ce chapitre reprend les notions fondamentales abordées dans le guide d'introduction à Kubernetes. Ces concepts de base sont essentiels pour comprendre comment Kubernetes fonctionne et pour administrer efficacement vos clusters. Dans les chapitres suivants, nous allons explorer en détail comment utiliser ces concepts avec kubectl pour gérer vos déploiements et assurer le bon fonctionnement de vos applications.
Cluster
Un cluster Kubernetes est un ensemble de nœuds (machines physiques ou virtuelles) sur lesquels Kubernetes déploie et gère vos applications. Chaque cluster est constitué de deux types de composants principaux : le master et les nœuds de travail.
- Master : Il est responsable de la gestion de l'état du cluster. Il orchestre les tâches, répartit les charges de travail et assure la communication entre les composants. Le master comprend plusieurs composants, tels que l'API server, le scheduler et le controller manager.
- Nœuds de travail : Ce sont les machines qui exécutent les applications conteneurisées. Chaque nœud contient un agent Kubernetes appelé kubelet qui gère les Pods, ainsi qu'un environnement d'exécution de conteneurs comme Docker.
Pod
Le Pod est l'unité de base de déploiement dans Kubernetes. Il représente un ensemble d'un ou plusieurs conteneurs qui partagent le même réseau et le même stockage. Les Pods sont éphémères par nature et peuvent être remplacés ou redéployés automatiquement.
Service
Un Service est une abstraction Kubernetes qui définit une politique pour accéder aux Pods. Il permet de regrouper un ensemble de Pods sous une adresse IP unique et un nom DNS, facilitant ainsi la communication entre les différentes parties de votre application. Les Services permettent également de gérer la découverte et le load balancing des Pods.
Namespace
Les Namespaces sont utilisés pour diviser un cluster Kubernetes en espaces logiques distincts, permettant une organisation et une gestion plus efficaces des ressources. Chaque ressource dans Kubernetes, comme les Pods et les Services, appartient à un namespace. Par défaut, Kubernetes crée plusieurs namespaces tels que default, kube-system et kube-public.
Deployment
Un Deployment est une ressource Kubernetes qui gère le déploiement et la mise à jour des Pods de votre application. Il permet de définir le nombre de réplicas, de mettre à jour les versions de conteneurs et de rouler les mises à jour de manière contrôlée.
ConfigMap et Secret
- ConfigMap : Permet de séparer les configurations de l'application du code source. Il stocke des données de configuration non sensibles sous forme de paires clé-valeur.
- Secret : Similaire à ConfigMap, mais utilisé pour stocker des informations sensibles comme des mots de passe, des jetons ou des clés SSH. Les données sont encodées en base64 pour plus de sécurité.
Persistent Volume (PV) et Persistent Volume Claim (PVC)
- Persistent Volume (PV) : Représente un stockage disponible pour une utilisation dans le cluster. Il est provisionné par un administrateur.
- Persistent Volume Claim (PVC) : Une demande de stockage par un utilisateur. Les PVC sont liés aux PV pour fournir un espace de stockage persistant aux Pods.
Installation de kubectl
Pour administrer vos clusters Kubernetes, vous devez installer kubectl, l'outil en ligne de commande de Kubernetes. kubectl vous permet de déployer, inspecter et gérer les ressources Kubernetes directement depuis votre terminal.
Prérequis
Avant d'installer kubectl, assurez-vous que vous avez accès à un terminal ou une ligne de commande sur votre machine. Vous devez également disposer des privilèges nécessaires pour installer des logiciels sur votre système.
Installation sur Linux
Pour installer kubectl sur Linux, suivez ces étapes :
# Téléchargez la dernière version de kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# Rendez le fichier exécutable
chmod +x kubectl
# Déplacez le binaire dans votre PATH
sudo mv kubectl /usr/local/bin/
# Vérifiez l'installation
kubectl version --client
Installation sur macOS
Si vous utilisez macOS, vous pouvez installer kubectl via Homebrew :
# Installez kubectl avec Homebrew
brew install kubectl
# Vérifiez l'installation
kubectl version --client
Client Version: v1.30.1
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Installation sur Windows
Pour installer kubectl sur Windows, utilisez Chocolatey, un gestionnaire de paquets pour Windows :
# Installez kubectl avec Chocolatey
choco install kubernetes-cli
# Vérifiez l'installation
kubectl version --client
Installation avec asdf
Pour installer kubectl on peut aussi utiliser asdf qui permet d'installer une très grande partie des outils permettant de gérer des clusters kubernetes.
asdf plugin add kubectl
asdf install kubectl latest
asdf global kubectl latest
Mise à jour de kubectl
Il est important de maintenir kubectl à jour pour bénéficier des dernières fonctionnalités et correctifs de sécurité. Pour mettre à jour kubectl, suivez les mêmes instructions que pour l'installation, selon votre système d'exploitation et votre méthode d'installation.
Avec ces étapes, vous devriez maintenant avoir kubectl installé sur votre système. Dans le chapitre suivant, nous allons voir comment configurer kubectl pour se connecter à un cluster Kubernetes.
Syntaxe de kubectl
Sa syntaxe est la suivante :
kubectl [commande] [TYPE] [NOM] [flags]
- commande : Indique l'opération que vous désirez exécuter sur une ou plusieurs ressources, par exemple create, get, describe, delete.
- TYPE : Indique le type de ressources que vous voulez manipuler
- NOM : Indique le nom de la ressource (sensible à la casse)
- flags : flags optionnels
Configuration de kubectl
Après avoir installé kubectl, il est essentiel de le configurer correctement
pour interagir avec vos clusters Kubernetes. Dans ce chapitre, je vais expliquer
comment mettre en place l'autocomplétion, gérer les fichiers de configuration
dans le répertoire .kube
et utiliser les contextes.
Mise en place de l'autocomplétion
L'autocomplétion permet de faciliter l'utilisation de kubectl en vous suggérant automatiquement des commandes et des arguments. Voici comment l'activer pour différents shell's.
Bash
Pour activer l'autocomplétion dans Bash, exécutez les commandes suivantes :
# Ajouter l'autocomplétion à votre profil Bash
echo "source <(kubectl completion bash)" >> ~/.bashrc
Zsh
Pour activer l'autocomplétion dans Zsh, suivez ces étapes :
# Ajouter l'autocomplétion à votre profil Zsh
echo "source <(kubectl completion zsh)" >> ~/.zshrc
Fish
Pour activer l'autocomplétion dans Fish, utilisez la commande suivante :
# Ajouter l'autocomplétion à votre profil Fish
kubectl completion fish > ~/.config/fish/completions/kubectl.fish
Redémarrer votre shell et tapez kubectl
suivi de tabulation. Vous ferez par
exemple pour changer de namespace, on verra la création plus tard, il suffit de
taper kubectl -n tab et la liste de tous les namespaces existant sur votre
cluster s'affichera.
Les fichiers de configuration
Le répertoire .kube
situé dans votre répertoire personnel contient les
fichiers de configuration utilisés par kubectl. Le fichier principal est
config
, qui stocke les informations nécessaires pour se connecter à un ou
plusieurs clusters.
Le fichier de configuration config
contient les clusters, les utilisateurs et
les contextes configurés. Voici un exemple de fichier config
typique :
apiVersion: v1
clusters:
- cluster:
server: https://my-cluster-api-server
certificate-authority: /path/to/ca.crt
name: my-cluster
contexts:
- context:
cluster: my-cluster
user: my-user
namespace: default
name: my-context
current-context: my-context
kind: Config
preferences: {}
users:
- name: my-user
user:
token: MY_ACCESS_TOKEN
Utilisation de la variable KUBECONFIG
Lorsque vous travaillez avec plusieurs clusters ou environnements, il est
pratique de séparer les configurations dans plusieurs fichiers. kubectl
permet d'utiliser plusieurs fichiers de configuration grâce à la variable
d'environnement KUBECONFIG
.
# Sous Linux/macOS
export KUBECONFIG=~/.kube/config-cluster2
# Sous Windows
set KUBECONFIG=%USERPROFILE%\.kube\config-cluster2
Vous pouvez définir la variable KUBECONFIG
pour utiliser plusieurs fichiers de
configuration en les séparant par des deux-points (:) sous Linux/macOS ou par un
point-virgule (;) sous Windows. Par exemple :
# Sous Linux/macOS
export KUBECONFIG=~/.kube/config:~/.kube/config-cluster2
# Sous Windows
set KUBECONFIG=%USERPROFILE%\.kube\config;%USERPROFILE%\.kube\config-cluster2
Fusionner les configurations
Pour vérifier et fusionner les configurations :
kubectl config view --merge --flatten > ~/.kube/merged-config
export KUBECONFIG=~/.kube/merged-config
Gestion des contextes
Les contextes dans kubectl permettent de définir des configurations spécifiques pour interagir avec différents clusters ou utilisateurs. Cela facilite le passage d'un environnement à un autre sans modifier constamment le fichier de configuration.
Afficher les contextes
Pour afficher la liste des contextes disponibles :
kubectl config get-contexts
Utiliser un contexte
Pour changer de contexte et utiliser un autre cluster ou utilisateur :
kubectl config use-context my-context
Ajouter un contexte
Pour ajouter un nouveau contexte :
kubectl config set-context new-context --cluster=my-cluster --user=my-user --namespace=my-namespace
Supprimer un contexte
Pour supprimer un contexte :
kubectl config delete-context old-context
Avec ces configurations, vous pouvez personnaliser et optimiser votre utilisation de kubectl pour gérer plusieurs clusters et utilisateurs efficacement. Dans le chapitre suivant, nous allons aborder la gestion des Pods et des Services.
Bonnes pratiques de gestion des fichiers de configuration
Pour éviter les erreurs et faciliter la gestion des configurations, il est recommandé de suivre quelques bonnes pratiques :
- Séparer les environnements : Utilisez des fichiers de configuration distincts pour chaque environnement (développement, test, production) afin de minimiser les risques de modification accidentelle des ressources en production.
- Nommer les fichiers de configuration : Donnez des noms explicites à vos
fichiers de configuration (par exemple,
config-dev
,config-prod
) pour une identification rapide. - Utiliser des répertoires spécifiques : Organisez vos fichiers de
configuration dans des répertoires distincts (par exemple,
~/.kube/dev
,~/.kube/prod
) pour maintenir une structure claire. - Vérifier les configurations : Avant d'exécuter des commandes critiques,
vérifiez toujours le contexte actuel avec
kubectl config current-context
.
Avec ces bonnes pratiques, vous pouvez personnaliser et optimiser votre utilisation de kubectl pour gérer plusieurs clusters efficacement.
Obtenir la liste des ressources kubernetes : api-resources
La commande kubectl api-resources
est un outil essentiel pour obtenir des
informations sur les types de ressources disponibles dans l'API Kubernetes. Elle
permet de lister toutes les ressources accessibles via l'API, ainsi que leurs
groupes, versions et si elles sont nommées ou non. Cette commande est
particulièrement utile pour découvrir de nouvelles ressources ou pour comprendre
l'organisation de l'API Kubernetes.
Syntaxe de base
La syntaxe de base de la commande kubectl api-resources
est la suivante :
kubectl api-resources [flags]
- flags (optionnel) : Options supplémentaires pour filtrer ou formater la sortie.
Affichage des ressources
Lister toutes les ressources
Pour lister toutes les ressources disponibles dans l'API Kubernetes :
kubectl api-resources
Cette commande affiche une liste complète de toutes les ressources, avec des
colonnes pour le nom de la ressource, son type court, son groupe, sa version, et
si elle est de type nommée (NAMESPACED
).
Filtrer les ressources par groupe
Pour filtrer les ressources appartenant à un groupe spécifique, utilisez
l'option --api-group
:
kubectl api-resources --api-group=apps
Cette commande affiche toutes les ressources du groupe apps
.
Informations fournies par api-resources
La commande kubectl api-resources
fournit une liste structurée des ressources,
incluant :
- Name : Le nom complet de la ressource.
- ShortNames : Les abréviations ou noms courts utilisés pour référencer la ressource.
- APIGroups : Le groupe d'API auquel la ressource appartient.
- Namespaced : Indique si la ressource est liée à un namespace (
true
oufalse
). - Kind : Le type ou la classe de la ressource.
Exemples pratiques
Lister les ressources dans un groupe spécifique
Pour lister toutes les ressources dans le groupe batch
:
kubectl api-resources --api-group=batch
Cette commande affiche des ressources telles que jobs
et cronjobs
appartenant au groupe batch
.
Lister les ressources non nommées
Pour lister uniquement les ressources qui ne sont pas liées à un namespace :
kubectl api-resources --namespaced=false
Lister les ressources avec des noms courts
Pour afficher toutes les ressources avec leurs noms courts :
kubectl api-resources --sort-by=shortnames
Cette commande trie les ressources par leurs noms courts, facilitant la recherche des abréviations utilisées pour certaines ressources.
Utilisation avancée
L'utilisation de kubectl api-resources
est particulièrement utile pour
découvrir de nouvelles ressources introduites dans des versions plus récentes de
Kubernetes ou par des Custom Resource Definitions (CRD).
La commande kubectl api-resources
peut être intégrée dans des scripts pour
automatiser la découverte et la gestion des ressources disponibles dans un
cluster Kubernetes. Par exemple, un script peut lister toutes les ressources
d'un groupe spécifique et exécuter des commandes sur chacune d'elles.
Bonnes pratiques
L'utilisation de kubectl api-resources
fait partie des bonnes pratiques pour
l'administration de Kubernetes, car elle permet de :
- Explorer l'API : Comprendre l'étendue des ressources disponibles et comment elles sont organisées dans l'API.
- Configurer correctement les RBAC : S'assurer que les règles de contrôle d'accès basées sur les rôles (RBAC) sont correctement configurées en connaissant toutes les ressources à protéger.
- Optimiser les scripts : Écrire des scripts plus robustes et dynamiques qui peuvent s'adapter aux changements dans les ressources de l'API.
Utilisation de la commande explain
La commande kubectl explain
est un outil précieux pour comprendre la structure
et les propriétés des ressources Kubernetes. Elle permet d'afficher des
informations détaillées sur les champs des ressources Kubernetes, aidant ainsi à
mieux comprendre comment configurer et utiliser ces ressources.
Syntaxe de base
La syntaxe de base de la commande kubectl explain
est la suivante :
kubectl explain [RESOURCE_TYPE] [FIELD_PATH] [flags]
- RESOURCE_TYPE : Le type de ressource que vous souhaitez expliquer (par exemple, pods, services, deployments).
- FIELD_PATH (optionnel) : Le chemin vers le champ spécifique de la ressource que vous souhaitez expliquer.
- flags (optionnel) : Options supplémentaires pour spécifier des détails supplémentaires.
Affichage des ressources
Expliquer une ressource de haut niveau
Pour obtenir une explication de haut niveau d'une ressource telle qu'un Pod :
kubectl explain pod
Cette commande affiche une description générale de la ressource Pod, incluant ses champs principaux et leur signification.
Expliquer un champ spécifique
Pour obtenir des informations détaillées sur un champ spécifique d'une
ressource, utilisez le chemin du champ. Par exemple, pour expliquer le champ
spec
d'un Pod :
kubectl explain pod.spec
Expliquer un champ de niveau inférieur
Vous pouvez également obtenir des informations sur des champs plus spécifiques
en fournissant un chemin plus détaillé. Par exemple, pour expliquer le champ
containers
sous spec
d'un Pod :
kubectl explain pod.spec.containers
Informations fournies par explain
La commande kubectl explain
fournit des informations complètes sur les champs
des ressources, y compris :
- Description : Une description textuelle de ce que le champ représente.
- Type : Le type de données du champ (par exemple, string, integer, array).
- Champ requis ou optionnel : Indique si le champ est obligatoire ou optionnel.
- Champs enfants : Les sous-champs que ce champ peut contenir.
Exemples pratiques
Comprendre la structure des Pods
Pour comprendre la structure globale d'un Pod, exécutez :
kubectl explain pod
Cette commande vous donne une vue d'ensemble des champs disponibles dans un Pod,
tels que metadata
, spec
et status
.
Explorer les conteneurs dans un Pod
Pour explorer en détail le champ containers
d'un Pod, qui est crucial pour
définir les conteneurs à l'intérieur d'un Pod :
kubectl explain pod.spec.containers
Cette commande vous montre tous les sous-champs de containers
, comme image
,
ports
et resources
.
Détails des ports d'un conteneur
Pour obtenir des informations spécifiques sur le champ ports
d'un conteneur :
kubectl explain pod.spec.containers.ports
Utilisation avancée
Expliquer les ressources personnalisées
Vous pouvez également utiliser kubectl explain
pour des ressources
personnalisées définies par des CRD (Custom Resource Definitions). Par exemple,
pour expliquer une ressource personnalisée nommée MyResource
:
kubectl explain MyResource
Utilisation avec des sélecteurs
Bien que la commande explain
ne soit pas directement combinée avec des
sélecteurs, elle peut être utilisée en conjonction avec des ressources
sélectionnées pour mieux comprendre leur structure et configuration.
Bonnes pratiques
Utiliser kubectl explain
est une bonne pratique lors de la rédaction de
fichiers de configuration ou de l'apprentissage de nouvelles ressources
Kubernetes. Voici quelques conseils :
- Documentation intégrée : Utilisez
kubectl explain
comme documentation intégrée pour comprendre les ressources et leurs champs sans quitter votre terminal. - Validation : Avant de déployer des configurations, utilisez
kubectl explain
pour vérifier la structure et les champs disponibles, évitant ainsi les erreurs de syntaxe et de configuration. - Formation continue : Pour les nouveaux administrateurs ou développeurs
Kubernetes,
kubectl explain
est un excellent outil pour explorer et apprendre les différentes ressources et leurs configurations.