Passer les certifications Kubernetes
Bien décidé à passer la certification CKA et mon budget perso est assez limité, donc j’ai décidé de mettre en place un projet permettant de provisionner de manière flexible des clusters Kubernetes. Je ne cherche pas à rivaliser avec KubeSpray ou les bacs à sable payant, mais de provisionner gratuitement et rapidement des machines avec vagrant en se collant aux conditions de passage de la certification. J’ai décidé de vous partager mon projet, qui réponde au nom de CKASandBox ↗. Il est à ces débuts et je fais appel à votre bonne volonté pour me proposer vos idées voir vos contributions.
Idées en cours d’écriture
Parmi les fonctionnalités que je compte ajouter, la possibilité de déclencher des pannes de manière aléatoire sur le cluster provisionné.
Fonctionnement de CKASandBox
Pour le moment CKASandBox ↗ utilise vagrant, libvirt et Ansible pour provisionner des machines virtuelles. Les machines sont construites avec des boxes Ubuntu 20.04 pour se retrouver dans les conditions de la certification. Pour faciliter l’utilisation, j’ai ajouté une VM se nommant controller sur laquelle est installé HaProxy comme load-balancer, kubectl et quelques autres outils pour manipuler le cluster.
Pour ceux qui ne connaissent pas Ansible et Vagrant je vous renvoie à mes documentations :
Pour utiliser CKASandBox ↗, il faut disposer d’une machine comptant un minimum de 5 Cores et 8Gb de RAM, mais plus serait le bienvenu. Personnellement j’utilise mon pc Windows sur lequel j’ai une machine hyper-v avec 6 cores et 12 Gb de RAM. Il faudra installer Vagrant, Ansible, Libvirt en prérequis (je les documenterais dans le projet par la suite)
Pour le moment j’ai documenté la création d’une VM Centos sous hyper-v contenant tout ce qu’il faut pour faire fonctionner ce projet : libvirt et ansible. J’ajouterais dans les prochains ce qu’il faut pour d’autre OS, mais pas WSL !!!
Installation du projet
Il suffit de cloner le projet :
Dans les premières lignes du Vagrantfile se trouve des variables permettant de configurer le cluster :
Il est ainsi de possible de :
- de choisir le nom de la boxe sources
- paramétrer le nombre de nœuds master et worker
- paramétrer les ressources des nodes
- de choisir les versions des principaux composants (attention à bien prendre composants compatibles entre eux!).
Pour provisionner un cluster, il suffit de changer les paramètres et de lancer la
commande vagrant up
. Par contre, comme j’ai fait le choix de m’appuyer
l’inventaire dynamique de vagrant il faudra bien lancer le provisionnement de
tous les noeuds. En effet, vagrant reconstruit l’inventaire à chaque lancement
de commande voir de lancements de playbooks. Si à un moment donné je me rends
que cela contraint le projet je ferai les changements adéquats.
Pour se connecter au cluster il faut préalable ajouter la ligne suivante dans votre fichier /etc/hosts :
Ensuite on se connecte en ssh (en utilisant la clé id_ed25519):
Le compte utilisateur est vagrant bien sur qui a les droits sudo
.
Installation du cluster Kubernetes à la main
Pour le moment pour monter le cluster, il faut passer les commandes kubeadm
.
Création des masters nodes
Sur le noeud master:
Les choix du cidr des pods est fait pour accéder la plupart des CNI : calico. Le
point d’entrée du control-plane est celui de l’haproxy (je dois encore
paramétrer sa configuration). Si vous êtes limité en terme de ressources cpu et
mem il faudra ajouter l’option --ignore-preflight-errors
!
Création des workers nodes
Sur le worker il faudra lancer la commande fournie en sortie du kubeadm sur le noeud master (avec l’option —ignore-preflight-errors=NumCPU,Mem si besoin)
Pour copier la configuration du cluster sur le controller :
Gestion du cluster depuis le controller
Il faut copier la configuration du cluster sur le controller :
Installation du CNI
On va prendre calico :
Attendez une bonne minute le temps que tout se mette en place :
Les nodes sont Ready !
Installation du cluster Kubernetes avec Ansible
Il suffit d’utiliser la commande vagrant push
. Au bout de quelques minutes le
cluster devrait être disponible.
Dans une autre session :
La commande vagrant push permet de lancer des actions après le provisionnement de la stack. Bien pratique dans mon cas puisque je veux parfois pouvoir valider que je suis capable de monter un cluster à la main.
Installation d’outils sur le node controller
J’adore asdf car il permet d’installer tous les outils permettant de gérer facilement des clusters kubernetes. Il est préinstallé sur le node controller.
Exemple installation de Helm :
Initialisation du cluster via un playbook
Vous êtes le maître de l’initialisation du cluster et vous voulez passer cette étape. J’ai écrit un simple playbook permettant de réaliser cette action. Pour le lancer rien de plus simple :
Avantages de vagrant
Les environnements provisionner peuvent être suspendus pour libérer les ressources temporairement. Cela permet de switcher de context et d’y revenir plus tard.
Les commandes à connaître sont : vagrant suspend
et vagrant resume
.
La suite
Je vais poursuivre ma formation et je complèterai le projet au fil de mes avancées. Mais si vous avez des suggestions vous pouvez créer des issues sur le projet : CKASandBox ↗