CoreOS ist das für Docker-Container entwickelte Betriebssystem. CoreOS hat Docker standardmäßig vorinstalliert. Kubernetes kann unter CoreOS mit CloudFormation installiert werden, wie ausführlich in einem früheren Artikel „Erste Schritte mit Kubernetes auf Amazon Web Services (AWS)“ besprochen.
Problem
Kubernetes ist auf CoreOS nicht vorinstalliert und kann mithilfe von kube-aws installiert werden Tool und erfordert einige Benutzereingaben und Konfigurationen. Die Installation von Kubernetes auf CoreOS ist ein komplizierter Prozess und besteht aus den folgenden Phasen, die in Abbildung 1 gezeigt werden.
Abbildung 1: Kubernetes-Installation auf CoreOS Stages
Lösung
Eine Jenkins-Pipeline kann verwendet werden, um die Installation von Kubernetes zu automatisieren, wie in Abbildung 2 gezeigt. Die verschiedenen Phasen der Installation können in einer Jenkins-Datei konfiguriert werden und, wenn die Pipeline ausgeführt wird, die kube-aws Tool heruntergeladen wird, die CloudFormation Der Stack wird initialisiert, der Inhalt des Asset-Verzeichnisses wird gerendert, die Cluster-Parameter wie die Anzahl der Worker-Instanzen werden angepasst und anschließend wird der Cluster validiert und gestartet.
Abbildung 2: Jenkins-Pipeline zum Installieren von Kubernetes auf CoreOS
Die Installation von Kubernetes mit einer Jenkins-Pipeline ist ein Beispiel für die Automatisierung DevOps-Entwurfsmuster.
In einem Tutorial mit drei Artikeln werden wir den Kubernetes-Installationsprozess mithilfe einer Jenkins-Pipeline automatisieren. Dieser Artikel hat die folgenden Abschnitte:
- Einstellung der Umgebung
- Erstellen der vorausgesetzten Artefakte
- Erstellen eines Jenkins-Knotens
- Schlussfolgerung
Einstellung der Umgebung
Wir werden Jenkins mit dem Docker-Image „jenkins“ auf einer CoreOS-Instanz installieren. Wir werden einen Kubernetes-Cluster auf einer Amazon AMI Linux EC2-Instanz mit einer Jenkins-Pipeline starten. Starten Sie zunächst zwei EC2-Instanzen, eine mit Amazon Linux und die andere mit CoreOS, wie in Abbildung 3 gezeigt.
Abbildung 3: Abrufen der öffentlichen IP-Adresse
Erstellen Sie beim Erstellen der Amazon Linux-Instanz ein neues Schlüsselpaar (z. B. „jenkins“), indem Sie „Neues Schlüsselpaar erstellen“ auswählen und den privaten Schlüssel „jenkins.pem“ herunterladen, der zum Konfigurieren eines Jenkins-Agenten verwendet werden soll. Rufen Sie die öffentliche IP-Adresse der EC2-Instance ab, auf der CoreOS ausgeführt wird, und melden Sie sich mit SSH bei der Instance an.
ssh -i "jenkins.pem" [email protected]
Führen Sie das Docker-Image für Jenkins aus, um Jenkins zu starten.
docker run -name jenkins -p 8080:8080 -p 50000:50000 jenkins
Das Docker-Image „Jenkins“ wird heruntergeladen. Jenkins legt los. Kopieren Sie das generierte Passwort. Rufen Sie das öffentliche DNS der EC2-Instance ab, auf der Jenkins ausgeführt wird. Verwenden Sie die URL
Abbildung 4: Jenkins-Admin-Konsole
Erstellen der erforderlichen Artefakte
Jetzt müssen wir einige Artefakte für einen Kubernetes-Cluster erstellen, die nicht automatisiert werden können.
- EC2-Schlüsselpaar
- KMS-Schlüssel
- Jenkins-Verzeichnis /var/jenkins
- SSH-Anmeldung bei der Amazon EC2-Instance, auf der Amazon Linux ausgeführt wird
ssh -i "jenkins.pem" [email protected]
Da Amazon EC2 verwendet wird, ist ein AWS-Konto erforderlich. Wir müssen eine Reihe von AWS-Sicherheitsanmeldeinformationen erstellen, mit denen wir die EC2-Instance konfigurieren, von der aus der CloudFormation-Stack gestartet wird. Um neue AWS-Sicherheitsanmeldeinformationen zu erstellen, klicken Sie auf Sicherheitsanmeldeinformationen für das Benutzerkonto und dann auf Neuen Zugriffsschlüssel erstellen um einen Zugangsschlüssel zu erstellen. Kopieren Sie die Zugriffsschlüssel-ID und den Zugangsschlüssel. Führen Sie in der Amazon Linux-Instance den folgenden Befehl aus, um die Instance mit den AWS-Anmeldeinformationen zu konfigurieren:
aws configure
Geben Sie die Zugriffsschlüssel-ID und den Zugriffsschlüssel an, wenn Sie dazu aufgefordert werden. Geben Sie den standardmäßigen Regionsnamen an (us-east-1 ) und das Ausgabeformat (json ), wie in Abbildung 5 gezeigt.
Abbildung 5: Konfigurieren der Jenkins-Instanz mit AWS-Anmeldeinformationen, Region und Standardausgabeformat
Erstellen Sie als Nächstes ein EC2-Schlüsselpaar. Führen Sie den folgenden Befehl aus, um ein Schlüsselpaar namens kubernetes-coreos zu erstellen und speichern Sie es als kubernetes-coreos.pem .
aws ec2 create-key-pair --key-name kubernetes-coreos --query 'KeyMaterial' --output text > kubernetes-coreos.pem
Ändern Sie die Zugriffsberechtigungen des Schlüsselpaars im Modus 400, wodurch die Zugriffsberechtigungen auf „Lesen durch Besitzer“ festgelegt werden.
chmod 400 kubernetes-coreos.pem
Ein Schlüsselpaar wird erstellt und Zugriffsberechtigungen werden festgelegt (siehe Abbildung 6).
Abbildung 6: Schlüsselpaar für Kubernetes erstellen
Das Schlüsselpaar wird auch in der AWS EC2-Konsole aufgelistet, wie in Abbildung 7 gezeigt.
Abbildung 7: Abrufen der öffentlichen IP-Adresse
Erstellen Sie als Nächstes einen KMS-Schlüssel, der zum Verschlüsseln/Entschlüsseln von Cluster-TLS-Assets verwendet wird und durch eine Arn-Zeichenfolge identifiziert wird. Verwenden Sie die aws Befehlszeilenschnittstelle zum Erstellen eines KMS-Schlüssels für die Region us-east-1 .
aws kms --region=us-east-1 create-key --description="kube-aws assets"
Ein KMS-Schlüssel wird erstellt, wie in Abbildung 8 gezeigt. Kopieren Sie KeyMetadata.Arn Zeichenfolge, die mit arn:aws:kms:us-east-1 beginnt zur späteren Initialisierung des Clusters CloudFormation verwendet werden.
Abbildung 8: Erstellen eines KMS-Schlüssels
Wir müssen auch ein Verzeichnis für Jenkins erstellen:
sudo mkdir /var/Jenkins sudo chmod 777 /var/jenkins
Ein Verzeichnis wird erstellt und Berechtigungen werden festgelegt, wie in Abbildung 9 gezeigt.
Abbildung 9: Erstellen eines Verzeichnisses für Jenkins
Erstellen eines Jenkins-Knotens
Eine Jenkins-Pipeline ist ein Jenkins-Projekt, das das Jenkins-Pipeline-Plug-In verwendet. Eine Pipeline besteht typischerweise aus einer Abfolge von Schritten, wobei jeder Schritt eine Aufgabe ausführt. Verfügbare Executors auf Agenten werden verwendet, um ein Jenkins-Projekt auszuführen. Ein „Agent“ ist eine Maschine, die so konfiguriert ist, dass sie Projekte vom Master-Knoten auslagert. Der „Master“-Knoten ist die Maschine, auf der Jenkins installiert ist und alle Aufgaben für das Build-System erledigt, einschließlich der Analyse von Pipeline-Skripten und der Ausführung eines Jenkins-Projekts auf einem Executor. Ein „Executor“ ist eine Rechenressource zum Kompilieren von Code und kann auf den Master- oder Agent-Knoten konfiguriert werden. In diesem Abschnitt erstellen wir einen Agentenknoten und konfigurieren einen Executor auf dem Knoten. Wählen Sie Jenkins verwalten aus im Jenkins Dashboard, wie in Abbildung 10 gezeigt.
Abbildung 10: Abrufen der öffentlichen IP-Adresse
Wählen Sie anschließend Knoten verwalten aus , wie in Abbildung 11 gezeigt.
Abbildung 11: Abrufen der öffentlichen IP-Adresse
Der „Master“-Knoten sollte aufgelistet werden. Klicken Sie auf Neuer Knoten um einen Agentenknoten zu erstellen, wie in Abbildung 12 gezeigt.
Abbildung 12: Abrufen der öffentlichen IP-Adresse
Geben Sie einen Knotennamen an (jenkins , zum Beispiel) und wählen Sie den Permanent Agent aus Optionsfeld, wie in Abbildung 13 gezeigt. Klicken Sie auf OK.
Abbildung 13: Abrufen der öffentlichen IP-Adresse
Um den neuen Agentenknoten zu konfigurieren, benötigen wir den Host-DNS, auf dem der Agent erstellt werden soll. Kopieren Sie das öffentliche DNS aus der AWS EC2-Konsole für die EC2-Instance, auf der ein Amazon Linux-Image ausgeführt wird, wie in Abbildung 14 gezeigt.
Abbildung 14: Abrufen der öffentlichen IP-Adresse
Geben Sie in der neuen Agenteneingabe-Benutzeroberfläche einen Namen an (jenkins , zum Beispiel). Geben Sie die Anzahl der Ausführenden an as 1. Geben Sie ein Remote-Root-Verzeichnis an als /var/jenkins , die früher erstellt wurde. Geben Sie Labels an als „jenkins“, auf deren Bedeutung wir in einem späteren Abschnitt eingehen werden. In Verwendung , behalten Sie die Standardeinstellung „Diesen Knoten so oft wie möglich verwenden“ bei. In Launch-Methode , wählen Sie „Slave-Agenten auf Unix-Rechnern über SSH starten“. Im Host , geben Sie das öffentliche DNS an, das von der EC2-Konsole kopiert wurde. Unter Verfügbarkeit , wählen Sie „Diesen Agent so oft wie möglich online halten“. Für Anmeldedaten , klicken Sie auf Hinzufügen Drop-down und wählen Sie Jenkins Credentials Provider aus , wie in Abbildung 15 gezeigt.
Abbildung 15: Abrufen der öffentlichen IP-Adresse
Unter Anmeldeinformationen hinzufügen Wählen Sie im Dialogfeld Domäne als Globale Anmeldedaten aus und freundlich als Global . Geben Sie Benutzername an als „ec2-user“ und wählen Sie Direkt eingeben . Kopieren Sie den Inhalt der privaten Schlüsseldatei jenkins.pem und fügen Sie ihn ein im Schlüssel Feld, wie in Abbildung 16 gezeigt.
Abbildung 16: Hinzufügen von Jenkins-Anmeldeinformationen
Klicken Sie auf Hinzufügen , wie in Abbildung 17 gezeigt.
Abbildung 17: Jenkins-Anmeldeinformationsanbieter>Hinzufügen
Wählen Sie den ec2-Benutzer aus Anmeldedaten in Anmeldedaten , wie in Abbildung 18 gezeigt. Klicken Sie auf Speichern .
Abbildung 18: Konfigurieren des Jenkins-Knotens
Ein neuer Agent wird hinzugefügt, wie in Abbildung 19 gezeigt. Anfänglich ist der Agent möglicherweise nicht verfügbar, da er noch gestartet wird.
Abbildung 19: Jenkins-Agent erstellt
Klicken Sie auf den Agent-Link und dann auf Agent neu starten , falls erforderlich, wie in Abbildung 20 gezeigt.
Abbildung 20: Agent neu starten
Die Ausgabemeldung „Agent erfolgreich verbunden und online“ zeigt an, dass der Agent gestartet wurde (siehe Abbildung 21).
Abbildung 21: Agent erfolgreich verbunden und online
Der „jenkins“-Agent sollte als ausgeführt aufgelistet werden, wie in Abbildung 22 gezeigt.
Abbildung 22: Jenkins-Agent wird ausgeführt
Schlussfolgerung
In diesem Artikel haben wir die Bedeutung der Automatisierung einer Kubernetes-Installation mit Jenkins vorgestellt. Wir begannen damit, Jenkins auf CoreOS zu installieren, die erforderlichen Artefakte zu erstellen und einen Jenkins-Knoten zu erstellen. In einem nachfolgenden Artikel werden wir ein Jenkinsfile für eine Jenkins-Pipeline konfigurieren und eine Jenkins-Pipeline erstellen. Und in einem dritten Artikel werden wir die Jenkins-Pipeline ausführen, um Kubernetes zu installieren.