Tanzu und GitLab CI

2. Oktober 2020 at 10:00

In meinem letzten Artikel habe ich gezeigt wie man auf Basis von vSphere Tanzu Cluster bereitstellen kann. Dort habe ich auch geschrieben das ein UseCase dafür unter anderem die GitLab CI ist.
Zunächst einmal, was kann GitLab CI mit Kubernetes? GitLab kann einen Kubernetescluster nutzen um dort seine Runner zu starten. Aber auch kann man über die CI seine Micro-Services auch direkt auf einem Kubernetescluster deployen. Ich beziehe mich nun auf den ersten Teil und zeige wie man CI Runner auf dem Tanzu Cluster bereitstellt.
In diesem Fall gehe ich davon aus das sich zwischen GitLab Server und Tanzu Cluster keine NAT-Instanzen befinden.

Aus Gründen des Leseflusses werde ich hier auch Teile aus der offiziellen GitLab-Anleitung übernehmen.

Die Basics

Hinzufügen kann man in GitLab einen Kubernetescluster an verschiedenen Stellen. Zum einen geht dies im Administrationsbereich, aber auch bei einzelnen Gruppen und auf Projektebene. Aber egal für welche Ebene man sich entscheidet man wird immer vor die Wahl gestellt ob man einen neuen Cluster erstellen möchte, oder ob man einen vorhanden verbinden möchte. Wir wählen immer die zweite Option. Die Eingabemaske die dann ausgefüllt werden muss sieht so aus:

GitLab Add Kubernetes

Als Clusternamen kann man einen Friendly Name seiner Wahl eintragen und den Environment scope lasse ich in diesem Fall auf dem Standard (Sternchen). Die restlichen Daten können, bzw. müssen wir aus dem Cluster auslesen.
Zuerst habe ich einen neuen Tanzu Cluster bereitgestellt. Dieser heißt nun gitlab-001. Danach müssen wir uns wieder mit dem Cluster verbinden:

Die API URL

Mit dem Befehl kubectl config get-contexts können wir uns die verfügbaren Kontexte anschauen lassen. Von Interesse ist hier aber lediglich der Kontext der zu unserem Tanzu Cluster gehört:

kubectl config get-contexts

Wir sehen hier den Tanzu Cluster gitlab-001 und benötigen die Clusteradresse (192.168.138.131). Diese tragen wir in GitLab als API URL in diesem Format ein: https://<IP>:6443
Ein alternativer Befehl ist kubectl cluster-info | grep 'Kubernetes master' | awk '/http/ {print $NF}' welcher uns die korrekte URL ausgibt: https://192.168.138.131:6443

Das CA Certificate

Für das CA Certificate reicht ein einfacher Befehl:

Das angezeigt Zertifikat kopieren wir und fügen es in GitLab als CA Certificate ein.

Der Service Token

Für den Service Token müssen wir zuerst einen entsprechenden ServiceAccount für GitLab erstellen. Ich nutze dazu diese Definition:

Damit die Integration aber gelingt, muss noch ein weiteres RoleAssignment durchgeführt werden. Da dies ein Cluster ist der dediziert für GitLab verwendet wird, kann man es sich einfach gestalten:

Dann kann man den Befehl kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab | awk '{print $1}') nutzen um sich den token anzuzeigen. Dies ist der gesuchte Service Token und kann bei Gitlab an der entsprechenden Stelle hinterlegt werden.

Das fertige Formular

An dieser Stelle sollte das Formular in GitLab nun vollständig ausgefüllt sein:

das fertige GitLab Formular

Das Runner Setup

Die Einrichtung eines GitLab Runners auf diesem Cluster ist denkbar einfach. Dazu wechselt man auf den Applications-Tab und scrollt hinunter bis man den Eintrag GitLab Runner sieht. Dort drückt man auf Installieren:

GitLab Runner Installation

Den Installationsstatus kann man in der Kubernetes CLI überwachen. Dazu nutzt man diesen Befehl: kubectl get pod -n gitlab-managed-apps Dort erscheint zu erst ein Pod mit dem Namen install-runner und nach einiger Zeit dann der richtige Runner. In meinem Fall heißt dieser runner-gitlab-runner-7f6cf97f67-pclzj. Ab dann kann der Runner in GitLab verwaltet und genutzt werden.