Stellen Sie Ihre dockerisierte Anwendung mithilfe einer CI/CD-Pipeline auf Kubernetes bereit

Anfang dieses Jahres habe ich das Bertelsmann-Stipendium bekommen. Ich entschied mich für den Cloud-Track und das abschließende Abschlussprojekt bestand darin, eine dockerisierte Anwendung mit Jenkins auf EKS (Elastic Kubernetes Service) bereitzustellen. Nur um den verwendeten Services und Tools etwas Kontext und Bedeutung zu geben: EKS ist ein von AWS verwalteter Kubernetes-Service. Damit können Sie einen Kubernetes-Cluster in der AWS-Cloud-Umgebung bereitstellen. Jenkins ist ein CI/CD-Tool, das Prozesse mithilfe einer Jenkins-Datei (Jenkins-Konfigurationsdatei) automatisiert. Das Jenkinsfile gibt die Stufen und die in jeder Stufe durchzuführenden Prozesse an. Dieser Artikel beschreibt die Schritte, die zum Ausführen dieser Aufgabe unternommen werden.

Voraussetzungen
Sie benötigen ein VPS. Sie können eine auf AWS oder GCP erhalten. Ich werde AWS in diesem Artikel verwenden. Sie können meinen Artikel zum Einrichten eines VPS auf AWS und zum Konfigurieren eines Auslagerungsbereichs für Ihr VPS lesen. Öffnen Sie beim Einrichten der Serversicherheitsgruppen auf AWS die folgenden Ports 22 und 8080. Dadurch können Sie eine Verbindung zur Jenkins-Benutzeroberfläche herstellen. Wir verwenden für diese Bereitstellung ein Ubuntu 18.04-Image.

Schritt 1: Installieren Sie Jenkins und zusätzliche Pakete
Wir verwenden ein Repository, das ich mit allen erforderlichen Skripten und der Jenkins-Pipeline eingerichtet habe. Dieses Projekt wurde für den Anwendungsfall in diesem Artikel eingerichtet, aber mit der Konfiguration in diesem Repository können Sie ein CI/CD für jedes Projekt erstellen. Gehen Sie die README durch, um die Funktionsweise des Projekts zu verstehen. Sie können es überprüfen hier. Öffnen Sie das Repository und überprüfen Sie den Inhalt von initial-setup.sh . Dies hilft Ihnen, einige notwendige Pakete zu installieren. Kopieren Sie den Inhalt der Datei auf den Server.

$ vi initial-setup.sh

Speichern und schließen Sie die Datei. Führen Sie das Skript aus, um die Pakete zu installieren.

$ chmod +x initial-setup.sh
$ ./initial-setup.sh

Besuchen Sie nach Abschluss des Skripts die öffentliche IP-Adresse Ihres Servers auf Port 8080, um das Jenkins-Dashboard anzuzeigen ( SERVER-IP>:8080). Sie sehen einen Bildschirm wie den folgenden.

0*593YPYy2B6CL9kKf.png

Führen Sie diesen Befehl aus, um Ihr Administratorkennwort abzurufen.

$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Dadurch wird Ihr Administratorkennwort ausgegeben. Der diesem Passwort zugeordnete Benutzername lautet admin, falls Sie sich mit diesem Benutzer anmelden möchten. Sobald Sie Ihr Administratorkennwort eingegeben haben, erhalten Sie eine Seite, auf der Sie nach der Installation von Plugins gefragt werden.

0*mR4R_3mBh1nbkuMB.png

Wählen Sie Vorgeschlagene Plug-ins installieren aus, um einige Standard-Plug-ins zu installieren, die Ihnen bei der Einrichtung Ihrer Pipeline helfen. Sobald die Installation abgeschlossen ist, werden Sie aufgefordert, einen normalen Benutzer zu erstellen.

0*_HSnT-MZGpY5gBB2.png

Nachdem Sie den Benutzer erstellt haben, werden Sie aufgefordert, Ihre Jenkins-URL festzulegen. Belassen Sie es als Standard und jetzt sollten Sie eingeloggt sein.

0*2g64mJYRIAvv7dgI.png

Wir müssen ein bisschen Haushalt machen. Klicken Sie in der linken Seitenleiste auf „Jenkins verwalten“. Dadurch wird das Verwaltungs-Dashboard von Jenkins geöffnet. Klicken Sie auf „Globale Sicherheit konfigurieren“. Scrollen Sie nach unten und aktivieren Sie „Proxy-Kompatibilität aktivieren“ unter „CSRF-Schutz“. Bewerben und sparen.

0*o4H9P8npvwHn-7_5.png

Wir werden das Blue Ocean-Plugin auf Jenkins verwenden, um unsere CI/CD-Pipeline einzurichten. Blue Ocean ist nur eine neue, elegante Benutzeroberfläche des klassischen Jenkins. Obwohl Jenkins erweiterbar und robust ist, wird seine schlechte Benutzererfahrung viel kritisiert. Jenkins hat Blue Ocean eingeführt, um die Benutzererfahrung zusammen mit einigen Vorteilen zu verbessern. Klicken Sie in der linken Seitenleiste auf Jenkins verwalten. Dadurch wird das Verwaltungs-Dashboard von Jenkins geöffnet. Klicken Sie auf „Plugins verwalten“. Klicken Sie auf „Verfügbar“ und suchen Sie dann nach „Blue Ocean“.

1*p9s_Qqa9QlERmOD_ApOcRQ.png

Sie können alle Blue Ocean Plugins auswählen und auf „Jetzt herunterladen und nach dem Neustart installieren“ klicken. Sobald der Download abgeschlossen ist, klicken Sie auf „Zurück zur Startseite“. Gehen Sie zurück zum Plug-in-Manager und suchen Sie in den verfügbaren Plug-ins nach aws. Installieren Sie die „Pipeline: AWS Steps“. Klicken Sie auf „Jetzt herunterladen und nach Neustart installieren“.

1*nT-Wh85NBhL3WCRnru0ogg.png

Sobald der Download abgeschlossen ist, klicken Sie auf „Jenkins neu starten, wenn die Installation abgeschlossen ist und keine Jobs ausgeführt werden“.

1*A5TH9aE9sfAuAYBZLze7hw.png

Sobald Sie darauf klicken, werden Sie zu einer Warteseite weitergeleitet, auf der das Update abgeschlossen ist. Sobald das Update abgeschlossen ist, werden Sie zurück zum Jenkins-Dashboard geleitet.

1*oWrZR0ArBOk7p5dKB7KQog.png

Manchmal bleiben Sie auf dieser Seite hängen. Sie können aktualisieren und sehen, ob das Dashboard angezeigt wird. Außerdem wird der Jenkins-Server manchmal möglicherweise nicht neu gestartet, damit die neuen Plugins erfolgreich installiert werden können. Sie können sich mit Ihrem EC2 verbinden Linux-Terminal oder Putty. Sobald die Verbindung hergestellt ist, können Sie den Status des Jenkins-Servers überprüfen und auch, ob die Laufzeit mit der Installation der Plugins übereinstimmt. Wenn die Laufzeit übereinstimmt, können Sie den Neustart des Jenkins-Servers ignorieren.

# Check status of Jenkins server
$ systemctl status jenkins

# Restart the Jenkins server
$ sudo systemctl restart jenkins

1*ZGDL83MlnbIj_oXekyTJ3g.png

Schritt 2: AWS CLI einrichten und Kubernetes-Cluster bereitstellen
Bei der Verwendung von Jenkins werden die Shell-Befehle in den Pipeline-Stufen mit dem Jenkins-Benutzer ausgeführt. Einige dieser Befehle müssen mit Superuser-Rechten ausgeführt werden. Wir geben dem Jenkins-Benutzer Super-Privilegien, damit diese Befehle ohne Fehler in der Pipeline ausgeführt werden.

$ sudo visudo -f /etc/sudoers

Fügen Sie am Ende der folgenden Zeile hinzu visudo Datei.

jenkins ALL= NOPASSWD: ALL

Dadurch kann auch der Jenkins-Benutzer ausgeführt werden su (super user) Befehle, ohne dass ein Passwort eingegeben werden muss. Wechseln Sie anschließend zum Jenkins-Benutzer auf dem Terminal.

$ sudo su - jenkins

Als nächstes müssen wir die AWS CLI mit einem IAM-Benutzer mit programmgesteuertem Zugriff konfigurieren. Dieser IAM-Benutzer muss über die erforderlichen Berechtigungen zum Erstellen und Verwalten des EKS-Clusters verfügen. Sie können sehen, wie das geht hier. Ich rate Ihnen, den IAM-Benutzer zu gewähren Administratorzugriff um Ihnen die Bereitstellung des Clusters zu erleichtern. Beachten Sie nach dem Erstellen des IAM-Benutzers die Zugriffsschlüssel-ID und Geheimer Zugangsschlüssel. Konfigurieren Sie nun die AWS CLI mit dem IAM-Benutzer. Sie sollten als Jenkins-Benutzer am Terminal angemeldet sein. Verwenden us-east-1 als Region beim Einrichten der AWS CLI.

$ aws configure

Führen Sie nach Abschluss der Konfiguration diesen Befehl aus, um sicherzustellen, dass der IAM-Benutzer erfolgreich konfiguriert wurde.

$ aws s3 ls

Möglicherweise erhalten Sie einen solchen Fehler An error occurred (AccessDenied) when calling ListBuckets operation: Access Denied. Dieser Fehler ist in Ordnung, da Sie dem Benutzer keine Berechtigung für Access S3 erteilt haben. Dieser Fehler sollte nicht angezeigt werden, wenn Sie den IAM-Benutzer gewähren Administratorzugriff oder Zugriff auf S3. Nachdem die AWS CLI nun mit einem IAM-Benutzer konfiguriert ist, der über die erforderlichen Berechtigungen verfügt, können wir fortfahren und den Kubernetes-Cluster erstellen. Führen Sie diesen Befehl aus, um den Cluster zu erstellen.

$ eksctl create cluster --name stage-cluster --version 1.14 --region 
us-east-1 --nodegroup-name standard-workers --node-type t2.small --
nodes 2 --nodes-min 1 --nodes-max 4 --managed

Die Erstellung des Kubernetes-Clusters dauert etwa 20 bis 30 Minuten. Sie können die Erstellung auch auf der AWS-Konsole verfolgen. Sobald die Erstellung abgeschlossen ist, können Sie diesen Befehl ausführen, um Ihre Knoten zu überprüfen. Beachten Sie, dass Sie als Jenkins-Benutzer angemeldet sein sollten.

$ kubectl get nodes

Jetzt, da Ihr Cluster betriebsbereit ist, können wir mit dem nächsten Schritt fortfahren.

Schritt 3: Richten Sie AWS- und Docker-Anmeldeinformationen auf Jenkins ein
Öffnen Sie Ihr Jenkins-Dashboard ( SERVER-IP>:8080). Melden Sie sich mit dem von Ihnen erstellten Benutzer an. Klicken Sie in der linken Seitenleiste auf „Jenkins verwalten“. Dadurch wird das Verwaltungs-Dashboard von Jenkins geöffnet. Klicken Sie auf „Anmeldeinformationen verwalten“.

1*5fOwRHq_E4QV7TZ8f3_O_w.png

Klicken Sie auf „global“. Klicken Sie in der linken Seitenleiste auf „Anmeldeinformationen hinzufügen“. Jetzt fügen wir Ihre Dockerhub-Anmeldeinformationen hinzu, wohin die in der Pipeline erstellten Docker-Images gepusht werden. Legen Sie die ID der Anmeldeinformationen als „dockerhub“ fest, da sie von der Jenkins-Datei referenziert wird.

1*mzI9jCCwY5b-rjxAbiDnkQ.png

Fügen Sie als Nächstes weitere Anmeldeinformationen mit Ihrem AWS IAM-Benutzer hinzu Zugriffsschlüssel-ID und Geheimer Zugangsschlüssel. Legen Sie die ID der Anmeldeinformationen als „aws“ fest, da sie von der Jenkins-Datei referenziert wird.

1*Z2ahhr_zmCDgJfetszUB-A.png

Schritt 4: Pipeline auf Blue Ocean einrichten
Öffnen Sie Ihr Jenkins-Dashboard ( SERVER-IP>:8080). Klicken Sie in der linken Seitenleiste auf „Open Blue Ocean“. Dadurch wird die Benutzeroberfläche von Blue Ocean geöffnet.

1*wcsWEIi2XBNSJ0nnvbC0YA.png

Richten Sie die Pipeline mit dem ein github repo, auf das bereits hingewiesen wurde.

1*yZyHaa-Id9G2pfaRqG6RRw.png

1*pO4t_6o3v9oA138YzunUzw.png

Sobald Sie fertig sind, sollte die Pipeline sofort mit dem Aufbau beginnen. Sie können auf das Projekt klicken, um den Bereitstellungsprozess zu verfolgen.

1*xQBgFhQCbU21vfUvpQxSBg.png

1*P0A4PKd_VplttesYqOraxQ.png

Dies bedeutet, dass die Anwendung erfolgreich bereitgestellt wurde. Um die zu besuchende URL zu erhalten, stellen Sie sicher, dass Sie immer noch als Jenkins-Benutzer auf dem Terminal angemeldet sind. Führen Sie dann die folgenden Befehle aus.

# If not logged in
$ sudo su - jenkins

# To get nodes
$ kubectl get nodes

# To get pods running
$ kubectl get pods

# To get services and the URL of the application 
$ kubectl get services

1*86XRhP5M0ZzK6--HVMStKA.png

Wenn Sie die URL des Load Balancers aufrufen, wird Ihnen die ausgeführte Webanwendung angezeigt.

1*QTkV797vm9xz9mMQOGPqiQ.png

Sie können die Pipeline auch so einrichten, dass die Anwendung auf Kubernetes automatisch neu erstellt und erneut bereitgestellt wird, wenn neue Commits im Repository vorhanden sind. Klicken Sie im Pipeline-Dashboard auf das Zahnradsymbol. Gehen Sie zu „Scan Repository Triggers“ und klicken Sie auf das Kontrollkästchen. Stellen Sie es auf 1 Minute ein. Bewerben und sparen.

1*wSJucZ3cTYSUkFV_2RIlZA.png

Herzlichen Glückwunsch!!!
Wir konnten eine dockerisierte Webanwendung auf Kubernetes mithilfe von Jenkins bereitstellen, um den Fluss von der Codeänderung bis zur Bereitstellung zu verwalten. Jede Änderung, die Sie am Quellcode vornehmen und in das Repo übertragen, wird automatisch ohne Ihr manuelles Eingreifen bereitgestellt. Viel Glück!!!

REFERENZ-Links:
1) https://logz.io/blog/amazon-eks-cluster/
2)

Similar Posts

Leave a Reply

Your email address will not be published.