Utiliser un cluster kubernetes sur Gitlab CI/CD
Pour valider la faisabilité de mon projet de Home Lab Devops, j’ai testé la possibilité d’utiliser un cluster Kubernetes sur la version en ligne de Gitlab.com ↗. Pour info, avant j’utilisais gitlab-runner avec du docker-machine pour instancier dynamiquement des runners sur de l’AWS, c’est donc plus moderne.
Pour rappel les objectifs que je me suis fixés pour ce Home La Devops :
- Pouvoir faire tourner des jobs des pipelines CI/CD en local pour accéder à des ressources locales. Comme mon gestionnaire d’artefacts Nexus pour y déposer mes images de conteneurs, mes packages apt yum, mes librairies python,…
- Pouvoir déployer des applications de type legacy avecAnsible AWX, terraform, …
- Pouvoir déployer des applications cloud native sur ce même cluster.
Installer un cluster kubernetes.
Pour rappel, mon Home Lab est composé de mini-pc et sur un de ceux-ci je vais instancier un cluster kubernetes avec k3s. J’aurais pu le faire aussi avec du minikube ou du kind, …
Allez on se lance :
Patientez quelques minutes. Ensuite je vais copier la config de k3s sur la machine sur laquelle je bosse toujours.
Exposition du cluster sur internet
Maintenant, nous allons configurer les règles NAT de notre box internet pour exposer notre cluster Kubernetes. Je ne vais documenter que ma configuration actuelle, c’est-à-dire avec une box Orange :
- Dans votre navigateur rendez sur l’ip de votre box http://192.168.1.1 ↗.
- Identifiez-vous
- Cliquez en bas de l’écran sur la roue dentée, puis sur réseau
- Cliquez sur l’onglet NAT/PAT
- Dans les règles personnalisées, cliquez sur nouveau
- Saisissez Kubernetes, 6443, 6443, TCP, <l’ip de votre pc hébergeant k3s>, rien dans ip externe
- Validez sur [Créer].
Pour valider que cela fonctionne :
Pour récupérer votre IP publique ↗.
Les liens pour faire la même chose sur :
Intégration du cluster sur Gitlab
Notre cluster Kubernetes est désormais joignable depuis l’extérieur. Nous allons voir :
- Comment installer et configurer des runners Gitlab
- Comment l’ajouter à nos groupes/projets Gitlab pour déployer des environnements
Comme je vais tester le build d’une image Docker via un runner Gitlab
tournant sur mon cluster, je crée un groupe docker-images
.
Installation de Gitlab Runner sur le cluster Kubernetes
Dans les settings CI/CD du groupe cliquez [expand] de la partie Runners et copiez le token affiché.
Je vais utiliser le template Helm officiel pour l’installer. Ajoutons le repository Helm :
Créons le fichier de valeurs :
Éditez-le et changez les valeurs suivantes :
On peut déployer le Runner Gitlab :
Pour valider que Gitlab arrive bien à se connecter, retournez dans les paramètres ci/cd du groupe, ou rafraichissez la page, [expand] Runners et vous devriez voir apparaître votre runner :
Test du runner Gitlab
Pour tester notre runner :
- Créez un projet git dans le groupe créé précédemment.
- Cliquez ensuite sur [Setup CI/CD] + [Create new CI/CD Pipeline]
- Ajoutez juste le tag que vous avez déclaré dans tous les stages. Exemple :
Commit et regardez ce qui se passe dans un des jobs du pipeline :
Oh kubernetes executor
. Un petit tout sur le cluster :
Magique.
Ajout du cluster Kubernetes au groupe Gitlab pour déployer dessus
On commence par préparer le terrain.
- On crée un compte de service et on lui donne des droits d’admin. Pour cela créez
un fichier
gitlab-admin-service-account.yaml
et mettez-y ce contenu :
Appliquez le tout :
-
On récupère les informations nécessaires :
- Le certificat du cluster :
- Le token :
Cette fois, on clique sur Kubernetes > [Connnect cluster with Certificate] > [Connect Existing cluster] :
- Donnez un petit non à votre cluster : mon petit cluster
- Dans API URL :
https://<votre-ip-publique>:6443
- Dans la zone
CA Certificate
le certificat récupéré ci-dessus - Dans la zone
Service Token
le token. - Le reste laissez par défaut.
- Cliquez sur [Add Kubernetes cluster]
Vous devriez le voir apparaître comme ceci :
On peut déployer dessus ! Un grand pas pour mon Home Lab Devops.