Jenkins auf Kubernetes installieren

CI/CD (Continuous Integration/ Continuous Deployment) ist ein Kernkonzept der DevOps-Welt. Es hilft uns, die Softwareentwicklungsprozesse zu automatisieren: Erstellen, Testen und Bereitstellen der Quellcodes.

Unter vielen CI/CD-Tools ist Jenkins eines der bekanntesten Open-Source-Tools, das beim Einrichten der Pipelines für Continuous Integration und Continuous Deployment hilft.

Dieses Tutorial zeigt Ihnen, wie Sie Jenkins auf einem Kubernetes-Cluster installieren.

Kubernetes-Cluster vorbereiten

Es gibt viele Möglichkeiten, einen Kubernetes-Cluster einzurichten. Sie können die öffentlichen Cloud-Dienste verwenden, um Ihren eigenen Cluster auf AWS, GCP, Linode usw. bereitzustellen. Außerdem ist es am einfachsten, minikube auf Ihrem lokalen Computer zu installieren.

Hier habe ich einen Kubernetes-Cluster mit 5 Knoten, der mit Kubespray bereitgestellt wurde.

$ kubectl get node

Kubernetes-Cluster

Jenkins installieren

Zunächst erstellen wir einen neuen Namespace, um den Isolationsmechanismus zur Steuerung der CI-Umgebung bereitzustellen:

$ kubectl create namespace jenkins
namespace/jenkins created

Überprüfen Sie, ob der Namespace Jenkins erfolgreich erstellt wurde, indem Sie den folgenden Befehl ausführen:

$ kubectl get namespaces

namespace-jenkinsNamespace-Jenkins

Lassen Sie uns dann die Jenkins-Bereitstellung erstellen. Sie können die folgende Manifestdatei verwenden, um eine Einzelinstanzbereitstellung von Jenkins zu erstellen.

Datei `jenkins-deployment.yaml` erstellen:

apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-deployment
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts
ports:
- name: http-port
containerPort: 8080
- name: jnlp-port
containerPort: 50000
volumeMounts:
- name: jenkins-vol
mountPath: /var/jenkins_vol
volumes:
- name: jenkins-vol
emptyDir: {}

Die Bereitstellung mit dem Docker-Image `jenkins/jenkins:lts` und den Ports `8080` und `50000`.

Wenden Sie das obige Manifest an:

$ kubectl create -f jenkins-deployment.yaml --namespace jenkins

Es dauert einige Minuten, um das Image jenkins/jenkins:lts zu laden und den Pod zum Laufen zu bringen. Überprüfen, ob die Jenkins-Bereitstellung erfolgreich bereitgestellt wurde:

$ kubectl get pod -n jenkins

NAME READY STATUS RESTARTS AGE
jenkins-deployment-794699f9bc-rln7x 1/1 Running 0 66s

Bereitstellen des Jenkins-Dienstes

Nachdem Sie die Jenkins-Bereitstellung erstellt haben und der Jenkins-Pod ausgeführt wird, müssen Sie die Verbindung zum laufenden Pod über einen Dienst verfügbar machen. In diesem Tutorial verwenden wir NodePort- und ClusterIP-Dienste.

Erstellen wir die Datei `jenkins-svc.yaml` wie folgt:

apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
selector:
app: jenkins

---
apiVersion: v1
kind: Service
metadata:
name: jenkins-jnlp
spec:
type: ClusterIP
ports:
- port: 50000
targetPort: 50000
selector:
app: jenkins

Wenden Sie nun das obige Manifest an und erstellen Sie den Dienst im Namespace `jenkins`:

$ kubectl create -f jenkins-svc.yaml --namespace jenkins

Überprüfen Sie, ob der Dienst ausgeführt wird:

$ kubectl get svc --namespace jenkins
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins NodePort 10.233.2.81 8080:30000/TCP 30s
jenkins-jnlp ClusterIP 10.233.53.44 50000/TCP 30s

Von nun an können wir über den NodePort-Dienst auf das Jenkins-Dashboard zugreifen.

Zugriff auf das Jenkins-Dashboard

Auf den NodePort-Dienst kann über Port ‘30000’ auf jedem Worker-Knoten des Kubernetes-Clusters zugegriffen werden:

`https://worker_node_ip_address:30000`

Sie können die IP-Adresse von Worker-Knoten mit dem folgenden Befehl abrufen:

$ kubectl get node -o wide

NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node1 Ready master 149m v1.19.2 192.168.0.111 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node2 Ready master 148m v1.19.2 192.168.0.112 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node3 Ready master 148m v1.19.2 192.168.0.113 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node4 Ready 147m v1.19.2 192.168.0.114 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13
node5 Ready 147m v1.19.2 192.168.0.115 Ubuntu 18.04.5 LTS 4.15.0-121-generic docker://19.3.13

Für example, öffnen wir den Webbrowser und gehen zu: `https://192.168.0.111:30000`

jenkins-setup-administrator-passwortJenkins-Setup-Administratorkennwort

Um das Administratorkennwort abzurufen, können Sie den folgenden Befehl ausführen:

$ kubectl logs jenkins-deployment-794699f9bc-rln7x --namespace jenkins

Holen Sie sich das Administrator-Passwort von jenkinsHolen Sie sich das Administrator-Passwort von jenkins

Enter das Administrator-Passwort, dann folgen Sie den nächsten Einrichtungsschritten und Sie werden erfolgreich auf das Jenkins-Dashboard zugreifen.

jenkins WillkommensseiteJenkins-Willkommensseite

Fazit

Jenkins ist ein wirklich leistungsstarkes CI/CD-Tool für jeden DevOps-Ingenieur und auch Softwareentwickler. In diesem Tutorial wurden alle Schritte zur Bereitstellung von Jenkins in einem Kubernetes-Cluster durchlaufen. Dank Jenkins werden wir produktiver und es hilft uns, die Zeit für das Erstellen, Testen und Bereitstellen von Codes zu reduzieren.

Vielen Dank fürs Lesen und hinterlassen Sie bitte Ihren Vorschlag im Kommentarbereich unten.