[LJP-Infos] Créer un cluster Microkube, MicroK8s
Kubernetes et les micro-services sont l'avenir.
Kubernetes est l'usine à conteneurs. On n'a pas forcément besoin ou les moyens de travailler dessus, parfois c'est juste pour y faire des essais.
Il y a alors quelques alternatives comme Minikube ou Microkube.
Micro Kubernetes Microk8S et le petit frère de Kubernetes. On peut y faire presque tout. C'est parfait pour des essais ou la petite entreprise. Il est fait aussi pour les Devops et les développeurs. Il est simple à installer et propose presque toutes les fonctionnalités d'un Kubernetes.
Mais surtout, chrono en main, on peut créer un cluster avec quelques serveurs dedans en moins de 30 minutes.
Microkube c'est quand même la solution pour un démarrage très rapide.
Le document présenté dans la vidéo est disponible ici:
https://drive.google.com/file/d/1w_PgArCnH_8RQWSAvuzqPuKXF-Y_WMEr/viewCe document explique comment installer un cluster avec micro Kubernetes Microk8S.
Kuberntes existe dans de nombreuses déclinaisons Microk8S en est une.
Il est tout particulièrement fait pour les Devops et les dévelopeurs.
Il est simple à installer et propose toutes les fonctionnalités d'un Kubernetes.
Comme il pourra très bien convenir pour des installations de moyennes taille s'il est configuré correctement.
Ce document explique comment se lancer dans la fabrication d'un cluster Microcube.
Ce document est disponible ici:
LJP-Infos le 07/12/2022
== Installation du microcube (rappel)
========================================================================
# Pour plus d'informations se référer au document suivant:
# Disponibkle ici: https://drive.google.com/file/d/1yylcH4ncfqnffHhPpl8tzWcRlZHmOyLJ
# Pas besoin de machine particulière, un simple Centos, Rocky, Redhat...
vi /etc/hostname
mk8s1
vi /etc/resolv.conf
# On ne laisse que 2 DNS!
# A adapter suivant le serveur configuré
vi /etc/hosts
# Le poste local:
127.0.0.1 localhost
127.0.1.1 mk8s1 mk8s1.loisel.loc
# Autres serveurs mk8s
192.168.1.50 mk8s1 mk8s1.loisel.loc
192.168.1.35 mk8s2 mk8s2.loisel.loc
192.168.1.36 mk8s3 mk8s3.loisel.loc
# On valide, on teste, on reboote (au besoin)
reboot
# On vérifie/on installe les mises à jour
dnf update -y
# L'installer on utilise snap
dnf install epel-release -y
dnf install snapd -y
# On active snap
systemctl enable snapd.socket --now
systemctl enable snapd
systemctl status snapd.socket
# On va utiliser snapd de manière classique alors on le lie à la racine /snap
ln -s /var/lib/snapd/snap /snap
# On ajoute snapd dans le path (si on veut utiliser tout de suite)
PATH=$PATH:/snap:/snap/bin
# Sinon pour prendre en compte snapd et son chemin
reboot
# On installe microk8s de manière classique
snap install microk8s --classic
# Pour le cas d'une utilisation sur un user différent de root (on adapte "user_name_to_use")
usermod -a -G microk8s user_name_to_use
chown -f -R user_name_to_use ~/.kube
su - user_name_to_use
# Microk8s est tout configuré, on peut tout de suite voir ça
# (la première fois il faut attendre quand même un peu qu'il démarre)
microk8s status --wait-ready
* "microk8s status" retourne la liste des addons disponables pour microk8s
# Et pour la liste des commandes:
microk8s
# Et on fait comme dans la doc k8s
alias kubectl="microk8s kubectl"
# Et on l'ajoute à la config de bash...
echo alias kubectl=\"microk8s kubectl\" >> /etc/bashrc
# (Et on peut faire ça avec les sous commandes qu'on veut!)
# Pour les commandes de kubectl
kubectl --help
# Suivant les besoins on ajoute les ports nécessaires pour firewalld (le port du dashboard)
firewall-cmd --add-port=10443/tcp --permanent
firewall-cmd --reload
=== Accès au dashboard
========================================================================
# On active le dashboard puis on le lance
microk8s enable dashboard
microk8s dashboard-proxy
# Le aashboard sera disponible à l'adresse
https://127.0.0.1:10443
https://ip_ou_nom_du_server:10443
* Par ex: https://192.168.1.53:10443
* Pour se connecter on utilisera le token fourni (s'assurer de le copier come il faut!)
# Etant sur Redhat ou un assimilé on pourra se lancer au travers de cockpit (après l'avoir installé)
dnf install cockpit -y
# On l'active et on l'autorise
systemctl enable --now cockpit.socket
# Au besoin ajouter cokipt aux exceptions
firewall-cmd --list-all
firewall-cmd --add-service=cockpit --permanent
firewall-cmd --reload
# On accède à cockpit par / ce qui sera plus pratique pour lancer le dashboard Kubernetes:
https://ip_ou_nom_du_server:
* Par ex: https://192.168.1.53:9090
* On pourrait aussi le lancer par tmux...
# L'installation de microkube est erminée... on faire un peu de nettoyage.
dnf clean all && history -c && history -w && init 0
=== Ajouter un second server au cluster
=== (voir https://microk8s.io/docs/command-reference)
========================================================================
# "microk8s" remplace kubeadmin d'un kubernetes "microk8s join"
# On ajoute toutes les ouvertures de ports qu'on pourra avoir besoin (si le port du dashbord n'est pas ouvert on pourra rajouter 10443)
firewall-cmd --zone=public --permanent --add-port={6443,2379,2380,10250,10251,10252,19001,25000,30000-32767,49726}/tcp
firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 accept'
firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address=172.17.0.0/16 accept'
firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address=127.0.0.0/8 accept'
# Et on le recharge pour prendre en compte les paramètres
firewall-cmd --reload
# On peut vérifier avec
firewall-cmd --list-all
* On le fait pour tous les serveurs (dans le cas ou on voudrait en transformer un ou plusieurs en master)
* Les règles du parefeu sont données une par une pour faciliter la lecture du document mais on peut tout mettre en une seule ligne.
# Pour obtenir la commande pour joindre le cluster on tape
microk8s add-node
# Pour éviter les erreurs de token non valides car expiré - on lui donne une durée de vie de 1h
microk8s add-node --token-ttl 3600
# ... OU 24h = 86400
# Tout est indiqué dans les lignes retournées (qui devraient ressembler à ça avec le token différent) -
# From the node you wish to join to this cluster, run the following:
microk8s join 192.168.1.59:25000/0a87bb413a0a5833a10b80be059bef1a/32817ae52867
# Use the '--worker' flag to join a node as a worker not running the control plane, eg:
microk8s join 192.168.1.59:25000/0a87bb413a0a5833a10b80be059bef1a/32817ae52867 --worker
* La 3 ème ligne est la même que la première...
* '--worker' ne fonctionne pas toujours (C'est indiqué comment faire sans plus loin)
microk8s join 192.168.1.59:25000/456437bce1dfc0bbe8e46766042b8ac4/32817ae52867 --worker
# On attend quelques minutes et on vérifie si les nodes sont correctement accessibles (qsi le noeud a été ajouté et est remis ça ne prendra que quelques secondes)
kubectl get nodes
# Pour plus d'infos
kubectl get nodes -o wide
# Ou en abrégé
kubectl get no -o wide
# Pour supprimer un node on utilisera
microk8s remove-node mk8s2
# Il faudra souvent faire un "leave" sur le noeud a supprimer
microk8s leave
# Puis on peut refaire un sur le "master"
microk8s remove-node mk8s2
# Sinon si on ne peut pas faire un leave... (a utiliser en dernier recours)
microk8s remove-node mk8s2 --force
# Un role est juste un label au format node-role.kubernetes.io/<role>
# Ajouter le role à un noeud (dans le cas ou --worker ne fonctionnerait pas) --overwrite n'est pas obligatoire (mais fonctionne très bien avec)
kubectl label node mk8s2 node-role.kubernetes.io/worker=worker
# Mettre le noeud en master
kubectl label node mk8s1 node-role.kubernetes.io/master=master
# Changer le role d'un noeud (dans le cas ou worker n'est pas ce qu'on veut)
kubectl label node mk8s2 --overwrite node-role.kubernetes.io/master=master
# Supprimer un role
kubectl label node mk8s2 --overwrite --overwrite node-role.kubernetes.io/worker-
# ou (sans --overwrite)
kubectl label node mk8s2 --overwrite node-role.kubernetes.io/master-
# Ou on peut ajouter le label qu'on veut...
kubectl label node mk8s1 description=mk8s1_my_master_node
# ..
kubectl label node mk8s2 description=mk8s2_my_worker_node
# On devrait avoir ce qu'on veut...
kubectl get no
kubectl label node mk8s1 --list
kubectl label node mk8s2 --list
# Après c'est les fondamentaux...
https://kubebyexample.com/learning-paths/kubernetes-fundamentals/what-kubernetes-3-minutesTime code:
01:37 Installation, environnement
04:45 Accès au dashboard
05:45 Ajouter un second server au cluster
09:02 La commande pour joindre un server au cluster
11:32 Joindre un server au cluster
15:51 Manager les noeuds du cluster
17:20 Ajouter des rôles aux noeuds du cluster
20:57 Autres possibilités