Cluster Kubernetes
Création d'un cluster Kubernetes pour déployer mes applications en production.
Pourquoi avoir créer un cluster kuberntes ? Pourquoi ne pas avoir utilisé une solution déjà existante ? Dans une premier temps je voulais apprendre une nouvelle technologie et je voulais avoir une infrastructure centralisé et facilement évolutive dans le future.
Les technologies utilisées :
- - K3S
- - Cilium
- - Helm
Détail de cluster :
Pour la mise en place du cluster, j'ai utilisé K3s pour avoir une installation rapide et facile. J'ai ajouté Rancher pour avoir une interface graphique de gestion du cluster. J'ai utilisé Argo CD pour la CI/CD des applications, ce qui permet de déployer automatiquement les applications sur le cluster.
Pour la partie réseau, j'ai utilisé Cilium pour avoir une sécurité accrue et une meilleure gestion du réseau. Cette solution permet de faire du load balancing avec du BGP entre les sites et les pods. En tant que reverse proxy, j'ai utilisé Traefik pour la gestion des noms de domaine et des certificats SSL.
Comment déployer une application sur le cluster ? Pour cela, j'ai installé GitLab, Harbor et Minio. GitLab s'occupe de l'intégration continue pour le build et le déploiement. Harbor permet de stocker les images Docker, et Minio est une solution S3 auto-hébergée.
Un peu de technique ?
Ayant la chance d'avoir le contrôle total sur l'infrastructure, le BGP est la meilleure solution pour faire du load balancing entre les sites et les pods. Le cluster est isolé dans un VLAN pour une meilleure sécurité.
Pour le stockage partagé entre les pods, j'ai utilisé Rook avec Ceph pour avoir un stockage distribué et redondant. Pour la partie base de données, j'ai utilisé CNPG PostgreSQL et Galera. Pour le cache des services, j'ai utilisé Dragonfly.
Helm, qu'est-ce que c'est ? C'est un outil qui permet de déployer des applications sur le cluster Kubernetes. J'ai utilisé Helm pour déployer les applications sur le cluster comme Argo CD, Harbor, la stack de monitoring, etc.
Le Monitoring :
Le monitoring est une partie importante dans un cluster Kubernetes. Pour cela, j'ai utilisé Prometheus et InfluxDB pour la collecte des métriques, et Grafana pour leur visualisation. Cela permet de surveiller l'état de santé du cluster et d'anticiper les problèmes.
