La mise en place de k3s est difficile. C'est pourquoi lors de ma monté en compétences j'ai mis en place ce playbook pour simplifier sa mise en production. Aujourd'hui, nous allons configurer un cluster K3s haute disponibilité en utilisant etcd, MetalLB, kube-vip et Ansible. Nous automatiserons l'ensemble du processus en vous offrant un moyen simple et reproductible de créer un cluster k3s que vous pourrez exécuter en quelques minutes.
Tout d'abord, vous aurez besoin d'installer Ansible. Voici un moyen simple d'installer Ansible.
Deuxièmement, vous devrez provisionner les machines virtuelles. Voici un moyen simple de créer des modèles Proxmox parfaits avec une image cloud et une initialisation cloud.
Ensuite, vous devrez bifurquer et cloner le repo. Pendant que vous y êtes, donnez-lui aussi une ⭐ .
git clone https://github.com/Drack0rr/k3s-ansible
Ensuite, vous devrez installer certaines exigences pour ansible
ansible-galaxy install -r ./collections/requirements.yml
Créez d'abord un nouveau répertoire basé sur le répertoire exemple dans le répertoire inventaire :
cp -R inventaire/exemple inventaire/mon-cluster
Ensuite, modifiez le inventaire/mon-cluster/hosts.ini pour qu'il corresponde à vos systèmes. Les noms DNS fonctionne ici aussi.
[master]
192.168.40.81
192.168.40.82
192.168.40.83
[node]
192.168.40.84
192.168.40.85
[k3s_cluster:children]
master
node
Modifiez inventaire/mon-cluster/group_vars/all.yml à votre guise. Voir les commentaires dans celui-ci.
Il est préférable de commencer à utiliser ces arguments, et éventuellement d'inclure traefik si vous voulez qu'il soit installé avec k3s cependant je recommanderais de l'installer plus tard avec helm
Il est préférable de commencer avec les valeurs par défaut du dépôt.
extra_server_args: >-
{{ extra_args }}
{{ '--node-taint node-role.kubernetes.io/master=true:NoSchedule' if k3s_master_taint else '' }}
--tls-san {{ apiserver_endpoint }}
--disable servicelb
--disable traefik
extra_agent_args: >-
{{ extra_args }}
Je ne changerais pas ces valeurs à moins que vous ne sachiez ce que vous faites.
Démarrez le provisionnement du cluster à l'aide de la commande suivante :
ansible-playbook playbook.yml -i inventaire/mon-cluster/hosts.ini
Remarque : Ajoutez –ask-pass –ask-become-pass si vous utilisez la méthode de connexion SSH avec mot de passe.
Après le déploiement, le control plan sera accessible via une adresse IP virtuelle qui est définie inventaire/mon-cluster/group_vars/all.yml dans apiserver_endpoint
Faite attention à prendre une IP disponible dans votre plage réseau.
ping 192.168.40.79
Obtenir la liste des nœuds
kubectl get nodes
Déploiement d'un exemple avec nginx
kubectl apply -f exemple/deploiement.yml
Vérifiez qu'il a été déployé
kubectl describe deployment nginx
Déployer un exemple de service nginx avec un LoadBalancer
kubectl apply -f exemple/service.yml
Vérifiez l'état du service et assurez-vous qu'il a une adresse IP de metal lb comme défini dans inventaire/mon-cluster/group_vars/all.yml
kubectl describe service nginx
Visitez cette URL via votre navigateur ou en curl
curl http://192.168.40.60
Vous devriez voir la page d'accueil nginx.
Vous pouvez nettoyer cela en exécutant les commandes suivantes :
kubectl delete -f exemple/deploiement.yml
kubectl delete -f exemple/service.yml
Cela supprimera les services k3s de tous les nœuds. Ces nœuds doivent ensuite être redémarrés.
ansible-playbook reset.yml -i ./inventaire/mon-cluster/hosts.ini
Voir ici pour obtenir les étapes d'installation de traefik + let's encrypt