Déploiement des serveurs linux pour Kubernetes

L’étape suivante consiste à préparer les serveurs pour l’installation de Kubernetes.

Je ne vais pas détailler la mise en oeuvre d’une VM sous vSphere, mais uniquement m’attacher à préciser quelques points et éléments de configuration nécessaire au bon fonctionnement de Kubernetes sur une plateforme vmware.

Je précise que je me suis basé sur le tutoriel suivant.

Je ne vais pas le suivre à la lettre et m’en détacher par la suite surtout au niveau de l’étape suivante qui consistera à l’installation de Kubernetes. Mais dans un premier temps, les prérequis proposés sont à mettre en oeuvre.

Point nomenclature et sizing

Il est de bon ton dans l’IT actuelle de ne plus prêter attention à la nomenclature de ses serveurs. À l’heure des microservices ou les ressources sont éphémères et en changement permanent, il n’est plus nécessaire de faire un brainstorming pour choisir le petit nom de ses machines (on passe du temps sur les tags maintenant 😊). Néanmoins s’accorder sur une nomenclature pour ses noeuds Kubernetes reste une bonne idée.

Voici les VMs que j’ai déployées

VMs

Size

Role

IP

NLBLAN001

1vCPU, 2GB Ram, 30 GB Disque

LoadBalancer HA Proxy

192.168.10.45

k8smst001

2vCPU, 2GB Ram, 32 GB Disque

Master Kubernetes 01

192.168.10.70

k8smst002

2vCPU, 2GB Ram, 32 GB Disque

Master Kubernetes 02

192.168.10.71

k8smst003

2vCPU, 2GB Ram, 32 GB Disque

Master Kubernetes 03

192.168.10.72

k8swok001

2vCPU, 2GB Ram, 32 GB Disque

Worker Kubernetes 01

192.168.10.72

k8swok002

2vCPU, 2GB Ram, 32 GB Disque

Worker Kubernetes 02

192.168.10.73

Un premier point très important : j'ai utilisé des noms de VMs en minuscule pour les serveur K8S. Qu'il s'agisse des noms dans l'inventaire vCenter ou des hostnames au niveau OS, il est primordial d'avoir une cohérence dans les noms pour les échanges Kubernetes/vSphere. Il faut avoir une correspondance entre le nom dans le vCenter, le hostname et le nom du node dans Kubernetes. Le plus simple est de tous mettre en minuscule.

Cas de la VM HaProxy

Pour cette VM par d’instruction particulière, un déploiement avec les options de bases suffiront.

Cas des VM Kubernetes

Les VMs qui vont servir aux noeuds Kubernetes, master comme worker doivent avoir une configuration spécifique pour la partie disque. En effet, il est nécessaire d’activer l’option "disk.EnableUUID" à True.

Configuration UUID des VMs

L’UUID pour « Universal Unique Identifier » est une suite de caractères alphanumériques qui permet d’identifier de façon certaine chaque périphérique de stockage et de partition. Il est calculé automatiquement fonction de la configuration du serveur hôte au moment de la création ou du formatage de la partition. Dans le cas de VMWARE, cette option permet de présenter un UUID cohérent pour éviter tout problème de montage des volumes.

Il faut donc procéder aux opérations suivantes

 Configuration VM

 

Configuration vmware pour disk.EnableUUID 02

 

Configuration vmware pour disk.EnableUUID 03

 

Configuration vmware pour disk.EnableUUID 04

 

Prérequis additionnels

Certains prérequis complémentaires sont nécessaires pour faire fonctionner Kubernetes

Désactivation de la SWAP

Kubernetes ne supporte pas pour le moment l’usage de la swap. Si vous souhaitez savoir pourquoi n’hésiter pas à lire le topic suivant mais en gros, dans le fonctionnement de Kubernetes les pods ne devraient jamais avoir à utiliser la swap et intégrer son support est compliqué.


La commande suivante est à passer sur chaque serveur K8S


sudo swapoff -v /swapfile

Il faut également commenter la référence à la swap dans le fichier fstab

Désactivation de la swap
Packets supplémentaires

Il est conseillé d’installer dès à present les packets suivants


net-tools
python3-pip

De même il peut être utile de déployer le package python suivant


docker-py

sysctl.conf


Il est nécessaire d’autoriser iptable à traiter les paquets traversant un pont réseau. Cela passe par l’ajout de ces deux lignes dans le fichier /etc/sysctl.conf


net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1

N’oubliez pas de recharger les règles systcl via la commande sysctl -system


Pour ceux qui seront intéressés, j’ai utilisé Ansible pour automatiser le déploiement de ces prérequis. Les playbooks sont récupérables ici. Ils traitent également de l’installation de Kubernetes que l’on verra dans l’étape suivante. Attention, si vous souhaitez les utiliser, il sera nécessaire de les adapter à votre configuration et à votre inventaire.

Check de fin

Cette étape se termine ici par un ensemble de check à réaliser pour s’assurer d’avoir une bonne base pour la suite

- Configuration du temps : s’assurer que les serveurs sont tous à l’heure et synchronisés entre eux sur la même référence de temps. NTP est à conseiller sur ce point.

- Résolution DNS : s’assurer que chaque serveur dispose de son enregistrement DNS et que chaque serveur résolve correctement le nom de ses petits camarades

- Serveur à jour et open-vm-tools installé (si plateforme vmware comme ici)