Installer un executor kubernetes Gitlab sur un microk8s
Lecture 6 min. âą
Table des matiĂšres
Bonjour Ă tous đ
Aujourdâhui on va faire de lâautomatisation et un peu de gitops; un chouille.
Je vous propose dâinstaller un runner gitlab en autoscale sur un cluster kubernetes via la distribution microk8s.
Il y a 12 mille mots incomprĂ©hensible lĂ , câest quoi Gitlab ?
Gitlab est ce que je considĂšre comme une plateforme de gitopsâŠ
Mais câest quoi gitops?
Le gitops est un paradigme de travail qui sâappuie sur le merveilleux outils quâest git (je vous ferai pas lâaffront de vous expliquer git). Il permet au moyen dâobservation dâĂ©vĂšnements relatifs Ă git (push, merge, âŠ) dâautomatiser des tĂąches, ce qui est Ă la base de lâintĂ©gration continue (CI) et du dĂ©ploiement continue(CD).
LâidĂ©e est de rendre les choses les plus simples possibles aux dĂ©veloppeurs. Ils poussent leur code et des robots bossent pour sâassurer de la qualitĂ© du boulot et dâenvoyer en production si les critĂšres de qualitĂ© sont respectĂ©s.
Sauf que pour ça il faut des robots, et bien les gitlab runners sont ces robots. Ils vont prendre les tĂąches et les rĂ©aliser. Il existe tout un tas de façons dâinstaller un runner (il peut dâailleurs ĂȘtre local Ă la machine du dev).
Câest bien mais ça a un dĂ©faut: ça ne sâadapte pas Ă la charge de travail, si vous avez 3 tĂąches Ă rĂ©aliser, il vous faudra 3 runners qui tournent quelque part. Câest pas pratique :/
Câest ici quâentre en scĂšne lâexĂ©cutor kubernetes gitlab, il va prendre en charge la crĂ©ation et la destruction des runners aprĂšs utilisation, ce qui âŠ.
Oh! Doucement Simone! Câest quoi kubernetes ? Et tâas parlĂ© de microk8s dans le titre câest quoi encore ça ?
Kubernetes est un produit initialement lancĂ© par google qui a fini par faire consensus dans la communautĂ© des dĂ©veloppeurs pour devenir la maniĂšre standard dâorchestrer des containers.
Vu que tu vas me poser la question, un container est une maniĂšre dâisoler un processus au sein dâun OS. Non ça nâa rien Ă voir avec une VM. Câest plus une cage logiciel quâautre chose. (pardon pour les puristes, je ferai un article plus dĂ©taillĂ© un jour).
Kubernetes va avoir pour rÎle de gérer le cycle de vie des ses containers et toutes ses I/O (systÚme de fichiers, réseaux).
On va donc faire tourner nos runners gitlab sous la forme de containers orchestrés par Kubernetes.
Mais Kubernetes câest un peu comme linux, il y a plein de distributions faites par des Ă©diteurs diffĂ©rents. Pour le tuto on va utiliser une distribution appellĂ©e microk8s gĂ©rĂ©e par Canonical, la sociĂ©tĂ© derriĂšre Ubuntu.
Câest bon le titre est expliquĂ© ?
Ouais ça va, mais je te tiens Ă lâoeil đ
Fantastique, on peut attaquer ! đ„
Installer microk8s
Avant de faire quoi que se soit il nous faut une machine, jâai choisi une Ubuntu 20.04 dans une droplet Digital Ocean.
Une fois connecté en ssh avec droits root.
snap install microk8s --classicPuis
microk8s status --wait-readySi tout se passe bien vous devriez avoir en premiĂšre ligne:
microk8s is runningSi câest bon, vous avez votre kubernetes, sinon vous reporter Ă la FAQ de microk8s.
On va démarrer plusieurs services sur notre cluster:
microk8s enable dashboard dns rbacPetite explication:
- dns: un dns interne basé sur CoreDNS
- dashboard: une web ui de gestion du cluster
- rbac: le systĂšme de gestion de droits sur le cluster
Vous pouvez vérifier que tout marche avec
microk8s kubectl get allCe qui devrait renvoyer quelque chose comme:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 6m47sMaintenant on va configurer le dashboard.
Lors de lâinstallation des services une indication est apparue Ă lâĂ©cran disant de se rendre Ă lâadresse.
Et bien faisons ce qui est dit.
Dâabord lâaccount service:
# L'utilisateur root
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
# Puis le cluster role binding qui va nous accorder les droits root sur le cluster.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-systemVous enregistrez ceci dans fichier admin-dashbord.yml par exemple.
Puis vous appliquez les modifications au cluster.
microk8s kubectl apply -f admin-dashboard.ymlEt ça vous répond:
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user createdIl nous faut ensuite le token dâauthentification associĂ© Ă lâadmin-user:
microk8s kubectl -n kube-system get secret $(microk8s kubectl -n kube-system get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"Cela va vous cracher une chaine de caractĂšres:
eyJH.........Stockez quelques part en sĂ©curitĂ© et pas en publique. Ce token est la clef pour faire nâimporte quoi sur le cluster !!!
On démarre le dashboard:
microk8s dashboard-proxyRendez vous Ă lâIP de votre machine port 10443. https://localhost:10443 par exemple.

Choisissez bien jeton, rentrez le token de lâadmin-user et connexion.
Si vous voyez ça:

Félicitations vous avez un cluster tout beau tout propre ! :D
Installer lâexecutor Gitlab sur le cluster
Si vous nâavez pas de compte sur Gitlab, vous pouvez en crĂ©er un câest gratos.
Pour lâexemple je vais crĂ©er un projet et dedans dĂ©finir un fichier .gitlab-ci.yml.
Ce fichier permet de dĂ©clarer les opĂ©rations de gitops dont on parlait tout Ă lâheure.
On va faire des choses stupides mais câest pour la dĂ©mo.
image: busybox
stages:
- step1
- step2
job1:
stage: step1
script:
- sleep 10
job2:
stage: step2
script:
- sleep 10
job2:
stage: step2
script:
- sleep 10
job3:
stage: step2
script:
- sleep 10
job4:
stage: step2
script:
- sleep 10Tout dâabord on va dĂ©sactiver les runners partagĂ©s et ajouter notre cluster Kubernetes

Ignorez la pub, notre cluster est mieux đ

On rĂ©cupĂšre dâabord le port de connexion de lâAPI de Kubernetes.
microk8s kubectl cluster-info | grep -E 'Kubernetes master|Kubernetes control plane' | awk '/http/
{print $NF}'Ici jâai le 16443
Dans le champ de âAPI URLâ, vous allez donc par exemple mettre:
https://localhost:16443Ensuite il nous faut un certificat que lâon va extraire des secrets du cluster.
microk8s kubectl get secretslâun dâeux devrait se nommer:
default-token-xxxxFaites ensuite:
microk8s kubectl get secret <default-token-xxxx> -o jsonpath="{['data']['ca\.crt']}" | base64 --decodeça devrait renvoyer un certificat:
-----BEGIN CERTIFICATE-----
MIID........
-----END CERTIFICATE-----Copiez ce certificat dans le champ âCA Certificateâ
On va ensuite se créer un deuxiÚme utilisateur admin pour gitlab:
apiVersion: v1
kind: ServiceAccount
metadata:
name: gitlab
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gitlab-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: gitlab
namespace: kube-systemJe lâai enregistrĂ© dans gitlab-admin-service-account.yaml.
Appliquez les modifications.
microk8s kubectl apply -f gitlab-admin-service-account.yamlserviceaccount/gitlab created
clusterrolebinding.rbac.authorization.k8s.io/gitlab-admin createdOn récupÚre le token
microk8s kubectl -n kube-system get secret $(microk8s kubectl -n kube-system get sa/gitlab -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"Et ce token vous le mettez dans le âService Tokenâ.
Le reste vous le laissez tel quel.
Puis âAdd Kubernetes clusterâ !
ça y est Gitlab et votre Cluster parlent ensemble!
Installons lâĂ©xĂ©cutor Gitlab dessus.
Ceci ce fait dans lâonglet âApplicationsâ

Descendez un peu vous verrez lâapplication âGitlab Runnerâ. Cliquez sur âInstallâ

Au bout dâun petit moment ça aura fini de mouliner.
Rendez vous dans votre dashboard kubernetes.

Dans les espaces de noms vous devriez voir âgitlab-manages-appsâ, si câest le cas, FĂ©licitations câest bon.

Et le runner gilab en lui mĂȘme.

Si vous retournez dans la définition des runners, vous allez le retrouver :)

Si vous lancez un pipeline, vous devriez voir quelque chose comme cela.

Tous les jobs de la âstep2â sont en parallĂšles et vous nâavez quâĂ mettre les pieds sous la table ! :D
Et voilĂ !!
Conclusion
Beaucoup de configurations dans cet article!
JâespĂšre que vous avez pris autant de plaisir Ă le lire que moi Ă lâĂ©crire.
Merci de mâavoir lu et Ă la prochaine <3