Installer des clusters Kubernetes avec Kubeadm
Mise à jour :
Kubeadm est un outil conçu pour simplifier le déploiement de clusters Kubernetes sur vos serveurs. Il permet d’initialiser un cluster Kubernetes en quelques commandes seulement et assure la configuration de tous les composants nécessaires pour le faire fonctionner.
Introduction
Avec Kubeadm, vous pouvez créer des clusters vanilla avec une installation plus rapide et plus fiable. L’outil est extensible et adaptable, permettant aux administrateurs de personnaliser les configurations selon les besoins spécifiques de leur environnement. Kubeadm gère également la mise à jour et la configuration des clusters, ce qui simplifie grandement le processus d’administration continue.
L’objectif principal de ce guide est de fournir une vue d’ensemble complète de Kubeadm, en couvrant ses fonctionnalités principales, les concepts de base, les étapes d’installation et les meilleures pratiques pour installer et maintenir un cluster Kubernetes.
Historique de Kubeadm
Kubeadm a été introduit par la communauté Kubernetes pour répondre à la complexité croissante de l’installation et de la gestion des clusters Kubernetes. Avant Kubeadm, le déploiement de Kubernetes nécessitait de nombreuses étapes manuelles, une configuration complexe et une bonne compréhension des composants internes de Kubernetes. Cela rendait le processus non seulement fastidieux, mais aussi sujet aux erreurs, surtout pour les nouveaux utilisateurs.
L’outil Kubeadm a été lancé officiellement avec la version 1.6 de Kubernetes en 2017. Son objectif principal était de fournir une méthode simple, rapide et reproductible pour installer Kubernetes, sans pour autant compromettre la flexibilité et la robustesse des déploiements.
Avec chaque nouvelle version de Kubernetes, Kubeadm a été amélioré pour prendre en compte les changements de l’API de Kubernetes et en charge de nouvelles fonctionnalités et les changements de l’API de Kubernetes. Aujourd’hui, Kubeadm est largement utilisé dans les environnements de production, les environnements de test et par les développeurs souhaitant configurer des clusters Kubernetes sur leurs machines.
Fonctionnalités de Kubeadm
Kubeadm offre plusieurs fonctionnalités clés qui simplifient le déploiement et la gestion des clusters Kubernetes :
- Initialisation du cluster : Configure automatiquement les composants critiques du plan de contrôle.
- Ajout de nœuds : Génère des jetons d’adhésion sécurisés pour intégrer de nouveaux nœuds au cluster.
- Gestion des mises à jour : Simplifie la mise à jour des composants du plan de contrôle et des nœuds de travail.
- Gestion des certificats : Génère, renouvelle et distribue les certificats de sécurité nécessaires.
- Configuration du réseau de pods : Supporte plusieurs plugins de réseau comme Calico et Flannel.
- Support multi-plateforme : Compatible avec plusieurs systèmes d’exploitation et architectures matérielles.
- Automatisation : S’intègre avec des outils comme Ansible, Terraform et des bash script pour automatiser les tâches d’administration.
- Vérification de l’état du cluster : Fournit des outils pour diagnostiquer et vérifier l’état du cluster.
Prérequis
Avant de commencer avec Kubeadm, il est essentiel de s’assurer que votre environnement est correctement configuré pour supporter le déploiement et la gestion d’un cluster Kubernetes. Voici les prérequis nécessaires pour un déploiement réussi avec Kubeadm :
Infrastructure matérielle
Vous aurez besoin d’un ensemble de machines virtuelles ou physiques pour constituer les nœuds de votre cluster. Typiquement, un cluster Kubernetes comprend un nœud maître et plusieurs nœuds de travail. Voici les spécifications matérielles recommandées pour chaque type de nœud :
-
Nœud maître :
- CPU : 2 cœurs minimum
- Mémoire : 2 GB de RAM minimum
- Stockage : 20 GB de disque
-
Nœud de travail :
- CPU : 1 cœur minimum
- Mémoire : 1 GB de RAM minimum
- Stockage : 20 GB de disque
Dans mon cas, je vais utiliser des machines virtuelles instanciées sur le cloud Ouitscale. Je vais utiliser 3 maîtres et 2 workers.
Système d’exploitation
Kubeadm supporte plusieurs distributions Linux. Voici quelques exemples courants :
- Ubuntu 22.04+
- Rocky Linux 8+
- Debian 11+
Il est recommandé de maintenir votre système d’exploitation à jour avec les dernières mises à jour de sécurité.
Logiciels nécessaires
Avant d’installer Kubeadm, certains logiciels doivent être installés et configurés sur chaque nœud :
- Un runtime de conteneurs parmi :
- containerd : Un runtime de conteneur léger et rapide, maintenu par la CNCF. Il est souvent utilisé comme runtime par défaut pour Kubernetes.
- CRI-O : Un runtime de conteneur optimisé pour Kubernetes, conforme à l’interface CRI (Container Runtime Interface). Il est conçu pour fonctionner avec les pods Kubernetes de manière efficace et sécurisée.
- Docker : Docker utilise le runtime containerd.
- gVisor : Un runtime de conteneur sécurisé développé par Google, qui offre une isolation renforcée des conteneurs.
- Kubeadm, Kubelet et Kubectl : Ces trois composants sont essentiels pour la gestion du cluster Kubernetes.
Configuration réseau
Kubernetes nécessite une configuration réseau correcte pour permettre la communication entre les nœuds. Assurez-vous que les ports suivants sont disponibles sur vos machines :
- Port 6443 (kube-apiserver) sur le nœud maître
- Ports 10250, 10251, 10252 (kubelet, scheduler, controller-manager) sur le nœud maître
- Port 10250 (kubelet) sur les nœuds de travail
- Port 179 (BGP) si vous l’utilisez
De plus, les nœuds doivent pouvoir communiquer entre eux sans restriction.
Accès utilisateur
Vous aurez besoin d’un accès root
ou sudo
sur toutes les machines pour exécuter
les commandes nécessaires à l’installation et à la configuration de Kubernetes.
Synchronisation de l’heure
Il est indispensable que toutes les machines du cluster aient des horloges synchronisées. Utilisez un service comme NTP ou Chrony (Network Time Protocol) pour assurer la synchronisation de l’heure.
Création des machines sur le cloud Outscale
Ici, je vais suivre une architecture similaire à celle utilisée pour provisionner des machines sur le cloud Outscale avec Terraform, en l’adaptant pour déployer un cluster Kubernetes avec Kubeadm.
Avant de commencer, assurez-vous d’avoir installé les outils nécessaires comme Terraform , Ansible et d’avoir également vos identifiants d’accès pour Outscale.
Définissez un VPC (Virtual Private Cloud) et des sous-réseaux pour isoler vos ressources cloud. Créer les 5 machines dans le subnet privé.
Pour plus de détails, vous pouvez consulter l’article original sur le provisionnement de machines avec Terraform sur Outscale.
Installation des prérequis
Pour installer Kubeadm, ainsi que Kubelet et Kubectl, nous devons d’abord installer et configurer containerd comme runtime de conteneur. containerd est une alternative légère et performante à Docker, souvent utilisée dans les environnements Kubernetes.
Pour faciliter et accélérer leur déploiement quoi de mieux que d’utiliser Packer et de créer une OMI.
Voici le contenu du playbook Ansible :
Le contenu des templates :
Créez votre inventaire statique en créant des groupes :
- kube_masters
- kube_workers
Personnellement, j’utilise un inveentaire dynamique qui créé ces groupes automatiquement :
Exécutez le playbook :
Utilisation d’haproxy comme Load Balancer
Je ne vais pas utiliser le service de Load Balancer Outscale. Je vais utiliser HAProxy pour cette tâche que je vais installer sur le bastion.
Le template :
On peut lancer l’exécution du playbook :
On se connecte au bastion et on vérifie que les ports sont en écoute :
C’est bon port le port 6443 est bien en écoute.
Initialisation d’un cluster manuellement
Sur le premier nœud maître, exécutez la commande suivante pour initialiser le cluster :
Cette commande initialise un cluster Kubernetes et configure les composants du plan de contrôle.
Pour permettre à l’utilisateur non-root d’accéder au cluster, exécutez les commandes suivantes sur votre machine (dans mon cas c’est mon bastion) :
Ajout de nœuds au cluster
Pour ajouter des nœuds masters supplémentaires au cluster, utilisez le jeton d’adhésion fourni par Kubeadm lors de l’initialisation. Exécutez cette commande sur chaque nœud master :
Pour ajouter des nœuds workers supplémentaires au cluster, utilisez le jeton d’adhésion fourni par Kubeadm lors de l’initialisation. Exécutez cette commande sur chaque nœud worker :
Remplacez <MASTER_IP>
, <TOKEN>
et <HASH>
par les valeurs retournées par la
commande kubeadm init
.
Déploiement d’un réseau de pods
Le réseau de pods est essentiel pour permettre la communication entre les différents nœuds d’un cluster Kubernetes. Sans un réseau de pods configuré, les pods sur différents nœuds ne pourront pas communiquer entre eux. Il existe plusieurs solutions de réseaux de pods disponibles pour Kubernetes, comme Calico, Flannel, Weave Net et Canal. Ici, je vais utiliser Callico. Depuis le bastion :
Vérification du cluster
Après avoir ajouté tous les nœuds, vous pouvez vérifier que votre cluster est opérationnel en utilisant la commande suivante depuis la machine bastion :
Vous devriez voir une liste de tous les nœuds de votre cluster avec leur statut.
Vérifiez également que tous les pods du namespace kube-system
tournent de
manière normale (pas trop d’arrêt/relance) :
À partir de ce moment, vous pouvez commencer à déployer des applications sur votre cluster Kubernetes.
Mise à jour et gestion du cluster
Une gestion efficace et des mises à jour régulières sont essentielles pour maintenir un cluster Kubernetes sécurisé, performant et fiable. Kubeadm simplifie ces processus en fournissant des outils et des commandes pour gérer les mises à jour de Kubernetes et assurer une administration continue du cluster.
Mise à jour du plan de contrôle
La mise à jour du plan de contrôle est une étape critique lors de la mise à jour de votre cluster Kubernetes. Cela inclut la mise à jour de l’API Server, du Controller Manager et du Scheduler.
Avant de commencer, vérifiez la version actuelle de Kubernetes :
Contrôler ensuite les versions disponibles :
Il faut ensuite releaser le package kubeadm
et kubelet
:
Kubeadm offre une commande pour planifier la mise à jour et vérifier les versions disponibles :
Cette commande affiche les versions disponibles et vérifie la compatibilité avec les composants actuels du cluster.
Pour appliquer la mise à jour, utilisez la commande suivante en remplaçant
vX.Y.Z
par la version cible de Kubernetes :
Cette commande met à jour les composants du plan de contrôle. Il faut procéder
de la même manière pour kubelet
.
Après l’exécution, redémarrez les composants pour appliquer les changements :
Vérifiez que les composants du plan de contrôle sont à jour :
Il faudra répéter cette procédure sur les autres nœuds masters, mais au lieu
d’utiliser la commande sudo kubeadm upgrade apply
il faudra utiliser la
commande suivante :
Mise à jour des nœuds de travail (workers)
Après la mise à jour du plan de contrôle, mettez à jour les nœuds de travail pour assurer la compatibilité avec la nouvelle version du cluster.
Pour éviter les interruptions de service, drainez chaque nœud de travail avant la mise à jour. Le drainage évacue tous les pods en cours d’exécution sur le nœud :
Sur chaque nœud de travail, mettez à jour kubelet
et kubectl
:
Redémarrez le service kubelet
pour appliquer la mise à jour :
Une fois le nœud mis à jour, annulez le drainage pour rendre le nœud à nouveau disponible pour les pods :
Surveillance du cluster
La surveillance continue est essentielle pour assurer la santé du cluster. Utilisez des outils comme Prometheus et Grafana pour surveiller les performances et les métriques du cluster.
Sauvegarde et restauration
Assurez-vous d’avoir des stratégies de sauvegarde et de restauration en place pour protéger les données de votre cluster.
Sauvegarde des etcd
etcd stocke les données de l’état du cluster. Sauvegardez régulièrement les données d’etcd :
Stockez ensuite la sauvegarde sur un bucket S3.
Restauration des etcd
Pour restaurer une sauvegarde, utilisez la commande suivante :
Rotation des certificats
Kubernetes utilise des certificats pour sécuriser la communication. Assurez-vous que les certificats sont renouvelés avant leur expiration.
Vérification des certificats
Vérifiez la validité des certificats avec la commande suivante :
Renouvellement des certificats
Renouvelez les certificats si nécessaire :
Nettoyage du cluster
Maintenez votre cluster propre en supprimant régulièrement les ressources inutilisées.
Suppression des pods orphelins
Listez et supprimez les pods orphelins ou en échec :
En suivant ces pratiques, vous pouvez assurer une gestion efficace et des mises à jour régulières de votre cluster Kubernetes, garantissant ainsi sa stabilité et sa sécurité.
Conclusion
En conclusion, Kubeadm est un outil puissant et indispensable pour simplifier le déploiement et la gestion des clusters Kubernetes. Grâce à ses fonctionnalités robustes et à son intégration étroite avec Kubernetes, Kubeadm facilite la mise en place de clusters de production fiables et performants.
La gestion continue de votre cluster Kubernetes est essentielle pour garantir sa performance, sa sécurité et sa fiabilité. Les mises à jour régulières, la surveillance active, la sauvegarde des données et la rotation des certificats sont autant de pratiques essentielles pour maintenir un environnement Kubernetes optimal.
Plus d’infos
Pour approfondir vos connaissances et rester à jour avec les meilleures pratiques, je vous recommande de consulter les ressources suivantes :
- Documentation officielle de Kubernetes : La documentation officielle est une source complète et à jour pour toutes les fonctionnalités et configurations de Kubernetes. Consulter la documentation ↗
- Projets GitHub : Les dépôts GitHub des projets Kubernetes et Kubeadm offrent un accès direct au code source et aux discussions de la communauté. Consulter le projet Kubeadm ↗
- Communauté Kubernetes : Participer aux forums, aux groupes de discussion et aux événements de la communauté Kubernetes peut vous fournir des informations précieuses et des opportunités de collaboration avec d’autres professionnels.