Skip to content Skip to sidebar Skip to footer

Eigenes Kubernetes Cluster in gitlab hinzufügen

5/5 - (1 vote)

Wenn du schon länger mit gitlab zu tun hast, dann ist dir sicherlich schon die Möglichkeit der Integration eines Kubernetes Cluster aufgefallen. Neben der Anbindung der GKE (Google Kubernetes Engine) hast du auch die Möglichkeit ein eigenes Kubernetes Cluster hinzuzufügen.

Voraussetzungen

Gitlab

Gitlab Logo

Um den Inhalt dieses Artikels umzusetzen benötigst du administrative Rechte auf einer eigenen Gitlab-Instanz (wenn du das Cluster für alle Projekte zugänglich machen möchtest). Andernfalls reicht ein Account auf gitlab.com bzw. auf einer privaten Gitlab Installation.

Kubernetes

Kubernetes Logo

Natürlich brauchst du hier ein eigenes Kubernetes Cluster. In vorherigen Artikeln kannst du nachlesen, wie du beispielsweise ein K8s Cluster in der Hetzner Cloud bauen kannst.

Ich empfehle dir ein Cluster mit einem Master und mindestens 2 Worker Knoten.

Außerdem benötigst du auf deiner Maschine die Konfiguration für dein Kubernetes Cluster und auch die CLI-Software kubectl.

Einrichtung

Für die Einrichtung des K8s Cluster hast du 2 Einstiegspunkte, je nachdem welche Rechte du in der Gitlab Instanz hast.

Benutzer auf gitlab.com / eingeschränkte Rechte auf einer gitlab Instanz

Eigenes Kubernetes Cluster auf gitlab.com hinzufügen

Bei eingeschränkten Rechten oder in einem Projekt auf gitlab.com klickst du auf das Projekt, öffnest den Menüpunkt “Operations” und klickst auf “Kubernetes”.

Administrator einer eigenen gitlab Instanz

Eigenes Kubernetes Cluster in einer on-Premise Installation von gitlab hinzufügen

Auf einer eigenen gitlab Instanz öffnest du die Administrationsoberfläche und klickst im Menü auf “Kubernetes”.

Formular zur Kubernetes Cluster Integration ausfüllen

Sobald du auf den Knopf “Add Kubernetes cluster” geklickt hast, startest du die Konfiguration für das eigene K8s Cluster. Wähle dazu den Tab “Add existing cluster” aus.

Kubernetes cluster name

Gebe hier einen Namen für das Cluster ein. Das dient später dazu, das richtige Cluster auszuwählen. Ich verwende hier immer die entsprechende Subdomain, die diesem K8s Cluster zugewiesen wurde.

Environment scope

Sofern du sämtliche Umgebungen in einem Cluster bereitstellen möchtest, gibst du hier den Wert “*” ein. Andernfalls kannst du hier eine Auswahl von Umgebungen Komma getrennt eingeben.

API URL

Die API URL ist wichtig, dass die Gitlab weiß, wo es seine Anfragen hin senden soll. Dazu kannst du mit folgendem Befehl in der Konsole die gewünschte URL abrufen:

Mac:# kubectl cluster-info | grep 'Kubernetes master' | awk '/http/ {print $NF}'

Die Ausgabe des Befehls kannst du direkt in das entsprechende Formular-Feld kopieren.

CA Certificate

Das Zertifikat, dass gitlab braucht, um mit dem Cluster zu sprechen bekommst du über 2 Schritte. Dabei ist es im ersten Schritt wichtig, die Namen des Zertifikat-Schlüssel zu bekommen default-token-[xxxxx]. Sobald du Diesen hast kannst du danach für diesen Wert hast, kannst du dessen Zertifikat abrufen.

Mac:# kubectl get secrets
NAME                  TYPE                                  DATA   AGE
 default-token-[xxxxx] kubernetes.io/service-account-token   3     9m4s
Mac:# kubectl get secret default-token-[xxxxx] -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
-----BEGIN CERTIFICATE-----
.
.
.
-----END CERTIFICATE-----

Die Ausgabe des 2. Befehls kopierst du anschließend in die Textbox.

Service Token

Um einen Service Token zu erhalten, musst du zuerst das passende Funktionskonto in Kubernetes anlegen. Dazu legst du am Einfachsten eine Datei auf deiner lokalen Maschine an: gitlab-admin-service-account.yml Beachte dabei, dieses Konto bekommt die Rechte cluster-admin.

apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: gitlab-admin
   namespace: kube-system
 apiVersion: rbac.authorization.k8s.io/v1beta1
 kind: ClusterRoleBinding
 metadata:
   name: gitlab-admin
 roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: ClusterRole
   name: cluster-admin
 subjects:
 kind: ServiceAccount
 name: gitlab-admin
 namespace: kube-system 

Diese Datei kannst du mit dem nachfolgenden Befehl in dein K8s System einspielen.

Mac:# kubectl apply -f gitlab-admin-service-account.yml
serviceaccount/gitlab-admin created
clusterrolebinding.rbac.authorization.k8s.io/gitlab-admin created

Die beiden Zeilen geben dir die Rückmeldung, dass Account angelegt ist und die Rolle des cluster-admin bekommen hat. Jetzt brauchst du nur noch den Schlüssel token auszulesen und in das entsprechende Feld zu kopieren.

Mac:# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')
Name:         gitlab-admin-token-[xxxxx]
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: gitlab-admin
              kubernetes.io/service-account.uid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      [TOKEN]

RBAC-enabled cluster

Diese Option solltest du aktivieren, bzw aktiviert lassen. Damit wird festgelegt, dass Zugriffssteuerung und -kontrolle aktiviert ist (RBAC).

GitLab-managed cluster

Mit diesem Haken erlaubst du deiner gitlab Instanz, dass diese Namespaces und service Accounts in deinem Kubernetes Cluster verwalten darf.

Initiale Einrichtung des K8s Cluster abgeschlossen

Mit diesen Schritten hast du die Einrichtung deines eigenen Kubernetes Cluster in gitlab abgeschlossen.

Installation von notwendigen Erweiterungen im K8s Cluster

Gitlab braucht einige Erweiterungen um das Kubernetes Cluster für dich zu managen. Dazu gehören Helm – ein Applikationsmanager, Prometheus zur Überwachung des K8s Cluster, und cert-manager für Zertifikatmanagement. Dazu kannst du auch direkt die Erweiterung knative installieren, mit der du Serverless-Anwendungen managen kannst.


Foto: unsplash-logoJeff Sheldon

Kommentare anzeigenKommentare schließen

2 Kommentare

  • von Andreas Richter
    Posted 7. April 2020 23:08 0Likes

    Hallo Daniel! Das Format des gitlab-admin-service-account.yml Files ist hier leider nicht korrekt dargestellt, das richtige File habe ich unter https://docs.gitlab.com/ee/user/project/clusters/add_remove_clusters.html gefunden. Danke für den Artikel!

  • von frank
    Posted 22. Dezember 2020 10:28 0Likes

    Schöne Beschreibung. Soweit habe ich das auch exakt hin bekommen. Eigener gitlab- und eigener kubernetes- Server. Jetzt bersuche ich verzweifelt die weiteren Applications zu installieren, was leider nicht klappt.
    Bei einfach jeder App bekomme ich
    “Something went wrong while installing Ingress
    Operation failed. Check pod logs for install-ingress for more details.”

    Und im kubernetes sehe ich: (z.B.)
    kub1:~# kubectl logs install-runner -n gitlab-managed-apps
    (…)
    Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
    Error: error initializing: Looks like “https://kubernetes-charts.storage.googleapis.com” is not a valid chart repository or cannot be reached: Failed to fetch https://kubernetes-charts.storage.googleapis.com/index.yaml : 403 Forbidden

    Vermutlich fehlt mir irgend eine Einstellung. Nur welche? Eine Idee?
    Gruß Frank

Hinterlasse ein Kommentar

0.0/5