garutilorenzo.ansible-role-linux-kubernetes
Installer et configurer un cluster Kubernetes hautement disponible
Ce rôle Ansible va installer et configurer un cluster Kubernetes hautement disponible. Ce dépôt automatise le processus d'installation de Kubernetes en utilisant kubeadm.
Ce dépôt est seulement un exemple de la façon d'utiliser l'automatisation Ansible pour installer et configurer un cluster Kubernetes. Pour un environnement de production, utilisez Kubespray.
Exigences
Installez ansible, ipaddr et netaddr :
pip install -r requirements.txt
Téléchargez le rôle depuis GitHub :
ansible-galaxy install git+https://github.com/garutilorenzo/ansible-role-linux-kubernetes.git
Variables du rôle
Ce rôle accepte ces variables :
Var | Obligatoire | Par défaut | Description |
---|---|---|---|
kubernetes_subnet |
oui |
192.168.25.0/24 |
Sous-réseau où Kubernetes sera déployé. Si la VM ou le serveur physique a plus d'une interface, Ansible filtrera l'interface utilisée par Kubernetes en fonction du sous-réseau de l'interface. |
disable_firewall |
non |
non |
Si activé, Ansible désactivera le pare-feu. |
kubernetes_version |
non |
1.25.0 |
Version de Kubernetes à installer |
kubernetes_cri |
non |
containerd |
CRI de Kubernetes à installer. |
kubernetes_cni |
non |
flannel |
CNI de Kubernetes à installer. |
kubernetes_dns_domain |
non |
cluster.local |
Domaine DNS par défaut de Kubernetes |
kubernetes_pod_subnet |
non |
10.244.0.0/16 |
Sous-réseau des pods Kubernetes |
kubernetes_service_subnet |
non |
10.96.0.0/12 |
Sous-réseau des services Kubernetes |
kubernetes_api_port |
non |
6443 |
Port d'écoute kubeapi |
setup_vip |
non |
non |
Configurer une adresse VIP Kubernetes en utilisant kube-vip |
kubernetes_vip_ip |
non |
192.168.25.225 |
Obligatoire si setup_vip est réglé sur oui. Adresse IP VIP pour le plan de contrôle |
kubevip_version |
non |
v0.4.3 |
Version du conteneur kube-vip |
install_longhorn |
non |
non |
Installer Longhorn, solution de stockage distribué cloud native pour Kubernetes. |
longhorn_version |
non |
v1.3.1 |
Version de Longhorn. |
install_nginx_ingress |
non |
non |
Installer le contrôleur d'entrée Nginx |
nginx_ingress_controller_version |
non |
controller-v1.3.0 |
Version du contrôleur d'entrée Nginx |
nginx_ingress_controller_http_nodeport |
non |
30080 |
NodePort utilisé par le contrôleur d'entrée Nginx pour le trafic HTTP entrant |
nginx_ingress_controller_https_nodeport |
non |
30443 |
NodePort utilisé par le contrôleur d'entrée Nginx pour le trafic HTTPS entrant |
enable_nginx_ingress_proxy_protocol |
non |
non |
Activer le mode proxy protocol du contrôleur d'entrée Nginx |
enable_nginx_real_ip |
non |
non |
Activer le module real-ip du contrôleur d'entrée Nginx |
nginx_ingress_real_ip_cidr |
non |
0.0.0.0/0 |
Obligatoire si enable_nginx_real_ip est réglé sur oui. Sous-réseau de confiance à utiliser avec le module real-ip |
nginx_ingress_proxy_body_size |
non |
20m |
Taille maximale du corps de proxy pour le contrôleur d'entrée Nginx |
sans_base |
non |
[liste des valeurs, voir defaults/main.yml] |
Liste d'adresses IP ou FQDN utilisés pour signer le certificat kube-api |
Variables supplémentaires
Ce rôle accepte une variable supplémentaire kubernetes_init_host. Cette variable est utilisée lors du premier démarrage du cluster. La valeur de cette variable doit être le nom d'hôte de l'un des nœuds maîtres. Lorsque l'Ansible s'exécute sur l'hôte correspondant, Kubernetes sera initialisé.
Ressources du cluster déployées
Avec ce rôle, le contrôleur d'entrée Nginx et Longhorn seront installés.
Contôleur d'entrée Nginx
Le contrôleur d'entrée Nginx est utilisé comme contrôleur d'entrée.
L'installation est celle des clusters bare metal, le contrôleur d'entrée est ensuite exposé via un service NodePort. Vous pouvez personnaliser les ports exposés par le service NodePort, utilisez les Variables du Rôle pour modifier ces valeurs.
Longhorn
Longhorn est un système de stockage distribué léger, fiable et puissant pour Kubernetes.
Longhorn met en œuvre le stockage distribué à l'aide de conteneurs et de microservices. Longhorn crée un contrôleur de stockage dédié pour chaque volume de périphérique de bloc et réplique de manière synchrone le volume sur plusieurs répliques stockées sur plusieurs nœuds. Le contrôleur de stockage et les répliques sont eux-mêmes orchestrés à l'aide de Kubernetes.
Vagrant
Pour tester ce rôle, vous pouvez utiliser Vagrant et Virtualbox pour créer une infrastructure exemple. Une fois que vous avez téléchargé ce dépôt, utilisez Vagrant pour démarrer les machines virtuelles :
vagrant up
Dans le Vagrantfile, vous pouvez injecter votre clé SSH publique directement dans les authorized_keys de l'utilisateur vagrant. Vous devez remplacer le placeholder CHANGE_ME dans le Vagrantfile. Vous pouvez également ajuster le nombre des VM déployées en modifiant la variable NNODES (Par défaut : 6).
Utiliser ce rôle
Pour utiliser ce rôle, suivez l'exemple dans le répertoire examples/. Ajustez le fichier hosts.ini avec vos hôtes et exécutez le playbook :
lorenzo@mint-virtual:~$ ansible-playbook -i hosts-ubuntu.ini site.yml -e kubernetes_init_host=k8s-ubuntu-0
PLAY [kubemaster] ***************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [k8s-ubuntu-2]
ok: [k8s-ubuntu-1]
ok: [k8s-ubuntu-0]
...
PLAY RECAP **********************************************************************************************************************************************************
k8s-ubuntu-0 : ok=78 changed=24 unreachable=0 failed=0 skipped=25 rescued=0 ignored=0
k8s-ubuntu-1 : ok=52 changed=12 unreachable=0 failed=0 skipped=30 rescued=0 ignored=1
k8s-ubuntu-2 : ok=52 changed=12 unreachable=0 failed=0 skipped=30 rescued=0 ignored=1
k8s-ubuntu-3 : ok=58 changed=30 unreachable=0 failed=0 skipped=35 rescued=0 ignored=1
k8s-ubuntu-4 : ok=52 changed=28 unreachable=0 failed=0 skipped=27 rescued=0 ignored=1
k8s-ubuntu-5 : ok=52 changed=28 unreachable=0 failed=0 skipped=27 rescued=0 ignored=1
Nous avons maintenant un cluster Kubernetes déployé en mode hautement disponible, nous pouvons vérifier l'état du cluster :
root@k8s-ubuntu-0:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-ubuntu-0 Ready control-plane 139m v1.24.3
k8s-ubuntu-1 Ready control-plane 136m v1.24.3
k8s-ubuntu-2 Ready control-plane 136m v1.24.3
k8s-ubuntu-3 Ready <none> 117m v1.24.3
k8s-ubuntu-4 Ready <none> 117m v1.24.3
k8s-ubuntu-5 Ready <none> 117m v1.24.3
Vérifiez l'état des pods :
root@k8s-ubuntu-0:~# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx ingress-nginx-admission-create-tsc8p 0/1 Completed 0 135m
ingress-nginx ingress-nginx-admission-patch-48tpn 0/1 Completed 0 135m
ingress-nginx ingress-nginx-controller-6dc865cd86-kfq88 1/1 Running 0 135m
kube-flannel kube-flannel-ds-fm4s6 1/1 Running 0 117m
...
Nous pouvons voir Longhorn, Nginx Ingress et tous les pods du kube-system.
Nous pouvons également inspecter le service du contrôleur d'entrée Nginx :
root@k8s-ubuntu-0:~# kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.111.203.177 <none> 80:30080/TCP,443:30443/TCP 136m
ingress-nginx-controller-admission ClusterIP 10.105.11.11 <none> 443/TCP 136m
Nous pouvons voir le port d'écoute du contrôleur d'entrée Nginx, dans ce cas, le port HTTP est 30080 et le port HTTPS est 30443. Depuis une machine externe, nous pouvons tester le contrôleur d'entrée :
lorenzo@mint-virtual:~$ curl -v http://192.168.25.110:30080
* Trying 192.168.25.110:30080...
* TCP_NODELAY set
* Connected to 192.168.25.110 (192.168.25.110) port 30080 (#0)
> GET / HTTP/1.1
> Host: 192.168.25.110:30080
> User-Agent: curl/7.68.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Date: Wed, 17 Aug 2022 12:26:17 GMT
< Content-Type: text/html
< Content-Length: 146
< Connection: keep-alive
<
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host 192.168.25.110 left intact
Install and configure a high available Kubernetes cluster
ansible-galaxy install garutilorenzo.ansible-role-linux-kubernetes