Comment créer un cluster Kubernetes sur Proxmox ?
La création d’un cluster Kubernetes sur Proxmox permet d’exploiter une plateforme d’orchestration de conteneurs performante dans un environnement virtualisé et auto-hébergé. Cette approche convient particulièrement aux environnements de test, aux workflows de développement et de CI, ainsi qu’à des scénarios de production de plus petite envergure. Dans ce guide, découvrez comment configurer des machines virtuelles (VM) sur Proxmox et construire, à partir de celles-ci, un cluster Kubernetes Proxmox stable et fiable.
Étape 1 : vérifier les prérequis techniques
Avant de démarrer la mise en place du cluster Kubernetes, vous devez vérifier que votre environnement répond à l’ensemble des prérequis techniques. Disposer d’une base propre dès le départ permet de gagner un temps précieux par la suite et de limiter les erreurs de configuration.
Vous avez tout d’abord besoin d’une installation Proxmox VE fonctionnelle. Pour des raisons de performances, une installation bare metal de Proxmox est recommandée. L’accès Web via l’interface Proxmox ainsi que l’accès SSH à la ligne de commande doivent être disponibles. Grâce à SSH, vous pouvez exécuter des commandes, téléverser des images et automatiser certaines configurations.
Pour mettre en place un cluster Kubernetes stable, plusieurs machines virtuelles sont également nécessaires. Les nœuds (nodes) Kubernetes suivants sont recommandés :
- un nœud master de la control plane
- au moins deux nœuds worker
Cette configuration apporte une certaine redondance et permet d’exploiter Kubernetes dans des conditions proches d’un environnement de production. Pour des tests, une configuration plus réduite avec un nœud master et un nœud worker peut toutefois suffire.
Votre hôte Proxmox doit par ailleurs disposer d’une interface bridge fonctionnelle, afin que les machines virtuelles puissent accéder au réseau local et, si nécessaire, à Internet. Cela est indispensable pour permettre aux VM de télécharger des mises à jour et d’installer les composants Kubernetes requis dans un environnement Kubernetes Proxmox.
Pour les environnements de production, il est également recommandé de configurer des sauvegardes régulières des machines virtuelles via un serveur de sauvegarde Proxmox. Vous pouvez ainsi restaurer rapidement vos nœuds Kubernetes en cas de besoin et réduire les temps d’arrêt.
Managed Kubernetes est la plateforme idéale pour des applications de conteneurs performantes et hautement évolutives.
Étape 2 : télécharger une image Cloud et créer un template Proxmox
Les installations Kubernetes s’effectuent le plus simplement à l’aide d’images Cloud. Ces images de systèmes d’exploitation préconfigurées, généralement basées sur Ubuntu ou Debian, sont optimisées pour un démarrage automatisé avec cloud-init. Dans cet exemple, nous utilisons une image Cloud Ubuntu 22.04 LTS, car elle est stable, bien documentée et parfaitement adaptée à une utilisation avec Kubernetes.
Commencez par télécharger la version la plus récente de l’image Cloud Ubuntu directement sur votre hôte Proxmox. Pour cela, connectez-vous à votre serveur Proxmox via SSH et accédez au répertoire dans lequel Proxmox stocke les fichiers ISO et les images :
cd /var/lib/vz/template/isobashTéléchargez ensuite l’image Ubuntu avec la commande suivante :
wget -O ubuntu-22.04-server-cloudimg-amd64.img https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.imgbashVous pouvez aussi télécharger d’abord l’image sur votre machine locale, puis la transférer vers l’hôte Proxmox via scp (Secure Copy) :
scp ubuntu-22.04-server-cloudimg-amd64.img root@<proxmox-ip>:/var/lib/vz/template/iso/bashUne fois l’image présente sur l’hôte Proxmox, créez une nouvelle machine virtuelle à partir de celle-ci, qui servira ensuite de modèle (template). Pour cela, créez d’abord une VM vide avec un ID unique, par exemple 9000, et attribuez-lui des ressources matérielles de base :
qm create 9000 --name ubuntu-template --memory 2048 --net0 virtio,bridge=vmbr0bashImportez maintenant l’image Cloud téléchargée précédemment comme disque dur virtuel dans le stockage souhaité (dans notre exemple local-lvm) :
qm importdisk 9000 /var/lib/vz/template/iso/ubuntu-22.04-server-cloudimg-amd64.img local-lvmbashSi votre cluster Proxmox dispose d’un stockage distribué, vous pouvez également enregistrer l’image dans le stockage Ceph. L’intégration de Ceph sur Proxmox fournit une solution de stockage hautement disponible et évolutive, particulièrement adaptée aux VM d’un environnement Kubernetes Proxmox.
Rattachez ensuite le disque importé à la VM et configurer le bon contrôleur. De cette manière, l’image est associée au contrôleur SCSI virtuel de la machine virtuelle :
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0bashPour pouvoir, plus tard, lors du clonage des VM, définir automatiquement les adresses IP, les noms d’hôte et les clés SSH, vous avez besoin d’un lecteur Cloud-Init. Ce lecteur virtuel contient les données de configuration appliquées automatiquement au démarrage de la VM. Ajoutez le lecteur Cloud-Init et définissez l’ordre de démarrage avec les commandes suivantes :
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot c --bootdisk scsi0bashActivez en plus l’agent invité QEMU afin que Proxmox puisse ensuite lire les informations d’état depuis la VM, et configurez une console série pour disposer, en cas d’urgence, d’un accès direct à la console de la VM :
qm set 9000 --agent 1
qm set 9000 --serial0 socket --vga serial0bashUne fois la configuration terminée, convertissez votre machine virtuelle en un modèle (template). Dans Proxmox, les templates servent de modèle, à partir duquel vous pouvez ensuite créer autant de clones que nécessaire. Ils constituent ainsi une base idéale pour déployer rapidement et de manière cohérente les nœuds d’un environnement Kubernetes Proxmox.
qm template 9000bashAprès cette étape, le template Ubuntu est prêt et servira de base à vos nœuds Kubernetes Proxmox.
Étape 3 : cloner les machines virtuelles pour les nœuds master et worker
Dans une troisième étape, vous créez, à partir du template créé précédemment, les machines virtuelles qui serviront ensuite de nœuds master et worker de votre cluster Kubernetes Proxmox. Chacune de ces VM reçoit sa propre adresse IP, un nom d’hôte unique ainsi qu’une clé SSH pour un accès sécurisé. Proxmox prend en charge automatiquement la configuration de base via cloud-init, de sorte que vous n’avez plus besoin d’effectuer de configuration manuelle au sein des machines virtuelles.
Commencez par cloner le template créé préalablement (dans cet exemple avec l’ID 9000) et créez à partir de celui-ci trois machines virtuelles : une pour le nœud master et deux pour les nœuds worker correspondants. Adaptez également individuellement le CPU et la mémoire vive :
qm clone 9000 101 --name k8s-master-1 --full true
qm set 101 --cores 2 --memory 4096
qm clone 9000 102 --name k8s-worker-1 --full true
qm set 102 --cores 2 --memory 4096
qm clone 9000 103 --name k8s-worker-2 --full true
qm set 103 --cores 2 --memory 4096bashEnsuite, vous définissez via cloud-init les paramètres réseau de base, le nom d’hôte et la clé SSH. Vous pouvez attribuer des adresses IP fixes ou utiliser le DHCP. Dans cet exemple, des adresses statiques sont utilisées :
# Configurer le nœud master
qm set 101 --ipconfig0 ip=192.168.1.10/24,gw=192.168.1.1
qm set 101 --sshkey "$(cat ~/.ssh/id_rsa.pub)"
qm set 101 --ciuser ubuntu
qm set 101 --nameserver 192.168.1.1
qm set 101 --description "K8s Control Plane 1"
# Configurer les nœuds worker
qm set 102 --ipconfig0 ip=192.168.1.11/24,gw=192.168.1.1
qm set 102 --sshkey "$(cat ~/.ssh/id_rsa.pub)"
qm set 102 --ciuser ubuntu
qm set 103 --ipconfig0 ip=192.168.1.12/24,gw=192.168.1.1
qm set 103 --sshkey "$(cat ~/.ssh/id_rsa.pub)"
qm set 103 --ciuser ubuntubashAdaptez les adresses IP d’exemple utilisées ici à la configuration de votre propre réseau. Veillez à sélectionner des adresses issues de la plage IP de votre routeur et à attribuer à chaque VM une adresse unique, qui n’est pas déjà utilisée.
Pour finir, démarrez les trois machines avec les commandes de terminal ci-dessous :
qm start 101
qm start 102
qm start 103bashAttendez un moment, le temps que les systèmes aient complètement démarré, puis testez la connexion via SSH. Si tout fonctionne, vous pouvez par exemple vous connecter au nœud master avec la commande suivante :
ssh ubuntu@192.168.1.10Étape 4 : appliquer la configuration système de base sur toutes les VM
Avant d’installer Kubernetes sur les VM, certains réglages au niveau du système sont indispensables pour garantir un fonctionnement stable. Cela comprend la désactivation du swap, l’ajustement des paramètres du noyau pour le réseau et l’IP forwarding, ainsi que la synchronisation de l’heure système. Ces mesures assurent que Kubernetes fonctionne correctement et que les mécanismes réseau au sein des conteneurs restent fiables.
Commencez par désactiver le swap sur l’ensemble des nœuds, car Kubernetes l’exige pour le bon fonctionnement du scheduler. Supprimez également l’entrée correspondante dans /etc/fstab, afin d’éviter toute réactivation du swap après un redémarrage :
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstabbashEnsuite, configurez les paramètres du noyau afin de vous assurer que les paquets réseau peuvent être traités correctement entre les conteneurs et les nœuds :
cat <<'EOF' | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
# Appliquer les modifications
sudo sysctl --systembashUne autre étape importante consiste à synchroniser l’heure système, afin que les certificats et les composants du cluster ne rencontrent pas de problèmes dus à des écarts d’horloge. Pour cela, installez et démarrez chrony :
sudo apt update && sudo apt install -y chrony
sudo systemctl enable --now chronybashEnfin, il est recommandé d’installer quelques outils de base, utiles pour les étapes suivantes :
sudo apt install -y curl apt-transport-https ca-certificates gnupg lsb-releasebashAprès ces étapes, tous les nœuds sont préparés de manière uniforme, le swap est désactivé, les paramètres réseau sont correctement définis et l’heure est synchronisée. Vos VM sont désormais prêtes pour l’installation de Kubernetes et la mise en place de votre cluster.
Étape 5 : choisir la distribution Kubernetes adaptée
Avant de commencer l’installation proprement dite de Kubernetes, vous devez choisir une distribution adaptée. Selon vos besoins, optez pour l’une des deux variantes recommandées :
- RKE2 (Rancher Kubernetes Engine 2) : RKE2 est une distribution Kubernetes stable et prête pour la production, développée par Rancher. Elle convient particulièrement si vous prévoyez d’utiliser par la suite une interface d’administration graphique via Rancher ou de mettre en place un cluster avec plusieurs nœuds de la control plane.
- k3s : k3s est une distribution Kubernetes légère, bien adaptée aux environnements de test, aux Home Labs ou aux systèmes disposant de ressources limitées. Elle se distingue par une installation simple et une consommation réduite de mémoire et de CPU.
Pour la mise en place d’un cluster Kubernetes Proxmox robuste, pouvant également être utilisé dans un contexte proche de la production, RKE2 est recommandé. Si vous souhaitez en revanche déployer rapidement un petit cluster de test ou de développement, k3s constitue une alternative particulièrement pratique. Dans la suite de ce guide, RKE2 est utilisé.
Étape 6 : installer RKE2 sur le nœud master
Une fois la configuration de base de vos machines virtuelles terminée, commencez l’installation de RKE2 sur le nœud master. Pour cela, connectez-vous au nœud master via SSH :
ssh ubuntu@192.168.1.10bashTéléchargez maintenant le script d’installation de RKE2 et exécutez-le. Vous pouvez, en option, indiquer un canal correspondant à la version souhaitée :
curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_CHANNEL=v1.28 bash -bashAprès l’installation, activez le service serveur RKE2 et démarrez-le immédiatement :
sudo systemctl enable --now rke2-server.servicebashVérifiez avec la commande suivante si le serveur RKE2 fonctionne correctement :
sudo systemctl status rke2-serverbashPour pouvoir gérer le cluster Kubernetes depuis votre machine locale, copiez le fichier kubeconfig :
sudo chmod 644 /etc/rancher/rke2/rke2.yaml
scp ubuntu@192.168.1.10:/etc/rancher/rke2/rke2.yaml ~/rke2-kubeconfigbashEnsuite, adaptez l’IP du master dans le fichier afin que kubectl accède correctement au serveur :
sed -i 's/127.0.0.1:6443/192.168.1.10:6443/' ~/rke2-kubeconfig
export KUBECONFIG=~/rke2-kubeconfigbashAvec cette commande, vérifiez maintenant si le nœud master est joignable :
kubectl get nodesbashSi le master s’affiche, l’installation est terminée avec succès ! Vous pouvez passer à l’étape suivante, c’est-à-dire ajouter les nœuds worker.
Étape 7 : joindre les nœuds worker au cluster avec RKE2
Une fois le nœud master configuré avec succès, intégrez les nœuds worker à votre cluster. Pour cela, installez l’agent RKE2 sur chaque worker et connectez-le au master.
Sur le nœud master, vous avez d’abord besoin du node token, qui est nécessaire à l’authentification des workers auprès du cluster :
sudo cat /var/lib/rancher/rke2/server/node-tokenbashNotez le token. Vous aurez besoin de cette valeur juste après sur les nœuds worker.
Connectez-vous via SSH sur chaque nœud worker :
ssh ubuntu@192.168.1.11bashTéléchargez le script d’installation de RKE2 et installez l’agent avec la commande suivante :
curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_CHANNEL=v1.28 sh -bashCréez ensuite le fichier de configuration de l’agent et renseignez-y l’IP du master ainsi que le token du nœud :
sudo mkdir -p /etc/rancher/rke2
cat <<EOF | sudo tee /etc/rancher/rke2/config.yaml
server: https://192.168.1.10
token: <INSÉRER_LE_TOKEN_ICI>
EOFbashPour finir, activez et démarrez le service de l’agent RKE2 :
sudo systemctl enable --now rke2-agent.servicebashRépétez cette opération pour tous les nœuds worker du cluster. Après quelques minutes, vérifiez sur le master si les nœuds worker sont correctement connectés :
kubectl get nodesbashVous devriez maintenant voir tous les nœuds, le master ainsi que les workers nouvellement ajoutés. Votre cluster est ainsi complet et prêt pour l’installation de plugins réseau, de load balancers et d’autres composants Kubernetes.
Étape 8 : configurer le réseau du cluster avec un CNI et un Load Balancer
Une fois les nœuds de la control plane et les nœuds worker configurés avec succès, vous devez mettre en place une Container Network Interface (CNI) afin de permettre la communication entre les pods au sein du cluster, ainsi qu’un Load Balancer pour rendre les services accessibles sur le réseau. Dans ce guide, nous utilisons Calico comme CNI et MetalLB pour assurer la fonctionnalité de load balancing en couche 2.
Calico établit les connexions réseau entre les pods, gère l’attribution des adresses IP et permet, en option, la définition de politiques réseau. Son installation s’effectue simplement à l’aide d’une commande dans le terminal :
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yamlbashVérifiez ensuite si tous les pods Calico ont bien démarré :
kubectl get pods -n kube-systembashTous les pods doivent afficher le statut Running ou Completed. Si certains pods affichent encore Pending, patientez quelques minutes, car Calico a besoin d’un certain temps pour distribuer la configuration réseau sur tous les nœuds.
Kubernetes prend en charge par défaut le type de Service Load Balancer, qui nécessite des IP externes. Dans un cluster auto-hébergé comme sur Proxmox, MetalLB est utilisé à cet effet. Installez d’abord MetalLB :
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yamlbashCréez ensuite un pool d’IP à partir duquel MetalLB peut attribuer des adresses IP aux services. Adaptez la plage d’IP à votre réseau local :
cat <<EOF | kubectl apply -f
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: my-ip-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.200-192.168.1.210
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2adv
namespace: metallb-system
spec: {}
EOFbashVérifiez également ici que les pods MetalLB fonctionnent correctement :
kubectl get pods -n metallb-systembashDès que tous les pods ont le statut Running, votre réseau est configuré. Vous pouvez désormais utiliser des types de services LoadBalancer pour rendre des applications accessibles sur le LAN. Votre cluster Kubernetes Proxmox est ainsi entièrement configuré et prêt à déployer des applications et à gérer les ressources réseau.
- Serveurs GPU NVIDIA RTX PRO 6000 Blackwell haute performance
- Performances inégalées pour les tâches complexes liées à l'IA et aux données
- Hébergement dans des data centers sécurisés et fiables
- Tarification flexible, en fonction de votre utilisation

