Afin de poursuivre une série de billets liées à Docker et Kubernetes, je vous propose d’aborder MicroK8s.
Un cluster K8s n’est pas forcément très simple à installer. L’environnement de production doit faire l’objet de toutes les attentions, mais pour le développeur qui souhaite disposer d’un bac à sable, éventuellement sur son poste, des solutions simples existent …
Deux alternatives semblent se démarquer à l’heure actuelle :
Minikube me parait être une solution un peu lourde, d’un point de vue mise en œuvre, si l’on souhaite s’adresser à un public de développeur. Il faut en effet passer par une machine virtuelle. Mais sachant que dans le monde OpenSource et / ou Conteneurisation en évolution / révolution permanente, il est fort probable que d’autres solutions verront le jour.
J’ai fait allusion aux développeurs et à leur poste de travail, et ce n’est pas sans raisons. Canonical, que vous connaissez probablement pour la distribution Ubuntu, se cache derrière MicroK8s et affiche clairement le crédo du produit : « A single package of k8s that installs on 42 flavours of Linux. Made for developers and great for appliances. ». Clairement Canonical semble fournir le moyen le plus simple pour provisionner un cluster Kubernetes à nœud unique à destination des développeurs pour tester leurs pipelines de CI/CD ou tout simplement pour permettre aux IT Pros et aux développeurs de se former à Kubernetes.
Bien que sponsorisé par Canonical, il est possible d’installer MicroK8s sur d’autres distributions que Ubuntu, comme le montre le site web de SnapCraft (également dans le giron de Canonical). Snap n’est autre qu’un magasin d’applications pour Linux.
Beaucoup de postes clients sous Linux exploitent Ubuntu, j’ai choisi pour ma part de faire cette démo sous CentOS. J’ai également des postes de test sous Fedora, plus orienté poste client que CentOS, mais il ne devrait pas y avoir de différences notables, y compris au travers de l’installation qui se fait au travers de l’utilitaire snap.
Snap est disponible pour CentOS version 7.6+. Pour vérifier la version de CentOS :
cat /etc/centos-release
Ensuite il faut installer Snap :
sudo yum install epel-release
sudo yum install snapd
sudo systemctl enable –now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
Une fois terminé, on peut procéder à l’installation de MicroK8s (il est préférable de disposer de 2GB de RAM au minimum sans quoi même si les conteneurs se lancent, ils restent en état pending).
sudo snap install microk8s –classic
Le processus d’installation, extrêmement simple, est vraiment appréciable et devrait convaincre bon nombre de personnes.
Une fois redémarré la session utilisateur, il est possible de vérifier la configuration du cluster K8s. Pour ceux qui ont l’habitude de travailler avec Kubernetes, vous utilisez l’utilitaire kubectl. Pour MicroK8s, il faudra utiliser microk8s.kubect. Simple et efficace.
kubectl cluster-info
microk8s.kubectl cluster-info
microk8s.kubectl get all -o wide –all-namespaces
Afin de garder les mêmes commandes que vous avez l’habitude d’utiliser, je vous suggère de créer un alias :
alias kubectl=’microk8s.kubectl’
kubectl version –short
Sachant qu’il s’agit d’un « cluster » Kubernetes de test/dev, un seul Node est nécessaire. Ce qui n’empêchera pas de jouer avec le scaling (l’ajout de réplicas). Les Pods seront seulement hébergés sur le même Worker.
Le déploiement d’une application est strictement identique à un « vrai » cluster K8s. Je vais réutiliser le déploiement de l’application Nginx de l’article précédent, fichier « deployment-definition.yaml ».
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
selector:
matchLabels:
app: myapp
replicas: 1
template:
metadata:
labels:
app: myapp
type: front-end
spec:
containers:
– name: web
image: nginx
ports:
– containerPort: 80
kubectl create -f ./deployment-definition.yaml
kubectl get pods -o wide
De la même manière, il est possible de changer le nombre de réplicas :
kubectl scale deploy myapp-deployment –replicas 2
kubectl get pods -o wide
Aucune différence perçue avec le cluster Kubernetes utilisé précédemment. Contrat rempli !
Sachant que l’objectif est clairement de se positionner sur les postes développeurs, sur une machine virtuelle, on utiliserait la notion de snapshot de VM afin de reseter totalement la configuration. MicroK8s propose une fonctionnalité équivalente qui va détruire toute la configuration et mettre à disposition un « cluster » fresh copy (suppression des deployments, pods, services, images, …)
microk8s.reset
L’avenir nous dira si des produits équivalents seront disponibles afin de faciliter au maximum la vie des développeurs, mais nul doute qu’à l’heure où ce billet est écrit, MicroK8s fait forte impression…
Happy Micro Kubernetes !