Einführung
Um Fehler zu reduzieren und die Komplexität bei der Bereitstellung einer Anwendung zu organisieren, müssen CI / CD-Systeme zuverlässige Tools für die Paketverwaltung / -bereitstellung und Pipelines mit automatisierten Tests enthalten. In modernen Produktionsumgebungen kann die zunehmende Komplexität der cloudbasierten Infrastruktur Probleme bei der Zusammenstellung einer zuverlässigen CI / CD-Umgebung verursachen. Zwei Kubernetes-spezifische Tools, die zur Lösung dieses Problems entwickelt wurden, sind der Paketmanager Helm und das Pipeline-Automatisierungstool Jenkins X.
Helm ist ein Paketmanager, der speziell für Kubernetes entwickelt wurde und von der Cloud Native Computing Foundation (CNCF) in Zusammenarbeit mit Microsoft, Google, Bitnami und der Helm-Community verwaltet wird. Auf hohem Niveau werden die gleichen Ziele wie bei Linux-Systempaketmanagern wie APT oder YUM erreicht: die Installation von Anwendungen und Abhängigkeiten hinter den Kulissen zu verwalten und die Komplexität vor dem Benutzer zu verbergen. Bei Kubernetes ist diese Art der Verwaltung jedoch noch wichtiger: Die Installation von Anwendungen erfordert die komplexe und langwierige Orchestrierung von YAML-Dateien, und das Aktualisieren oder Zurücksetzen von Releases kann von schwierig bis unmöglich sein. Um dieses Problem zu lösen, wird Helm über Kubernetes ausgeführt und paketiert Anwendungen in vorkonfigurierte Ressourcen namens charts, die der Benutzer mit einfachen Befehlen verwalten kann, um die Freigabe und Verwaltung von Anwendungen benutzerfreundlicher zu gestalten.
Jenkins X ist ein CI / CD-Tool zur Automatisierung von Produktionspipelines und -umgebungen für Kubernetes. Mithilfe von Docker-Images, Helm-Diagrammen und der Jenkins-Pipeline-Engine kann Jenkins X Releases und Versionen automatisch verwalten und Anwendungen zwischen Umgebungen auf GitHub bewerben.
In diesem zweiten Artikel der *CI/CD with Kubernetes * series erhalten Sie eine Vorschau dieser beiden Tools:
-
Kubernetes-Pakete mit Helm verwalten, erstellen und bereitstellen.
-
Aufbau einer CI / CD-Pipeline mit Jenkins X.
Obwohl eine Vielzahl von Kubernetes-Plattformen Helm und Jenkins X verwenden können, führen Sie in diesem Lernprogramm einen simulierten Kubernetes-Cluster aus, der in Ihrer lokalen Umgebung eingerichtet ist. Dazu verwenden Sie Minikube, ein Programm, mit dem Sie Kubernetes-Tools auf Ihrem eigenen Computer ausprobieren können, ohne einen echten Kubernetes-Cluster einrichten zu müssen.
Am Ende dieses Lernprogramms erhalten Sie grundlegende Informationen darüber, wie Sie mit diesen Kubernetes-Tools ein CI / CD-System für Ihre Cloud-Anwendung implementieren können.
Voraussetzungen
Um diesem Tutorial zu folgen, benötigen Sie:
-
Ein Ubuntu 16.04 Server mit 16 GB RAM oder mehr. Da dieses Tutorial nur zu Demonstrationszwecken gedacht ist, werden Befehle vom Root-Konto aus ausgeführt. * Beachten Sie, dass die uneingeschränkten Berechtigungen dieses Kontos nicht den bewährten Methoden für die Produktion entsprechen und sich auf Ihr System auswirken können. * Aus diesem Grund wird empfohlen, die folgenden Schritte in einer Testumgebung wie einer virtuellen Maschine oder einem https: / / www.digitalocean.com/products/droplets/[DigitalOcean Droplet].
-
Ein GitHub-Konto und https://github.com/settings/tokens/new?scopes=repo,read:user,read:org,user:email,write:repo_hook,delete_repo [ GitHub-API-Token]. Stellen Sie sicher, dass Sie dieses API-Token aufzeichnen, damit Sie es im Jenkins X-Teil dieses Lernprogramms eingeben können.
-
Vertrautheit mit Kubernetes-Konzepten. Weitere Informationen finden Sie im Artikel Einführung in Kubernetes.
Schritt 1 - Erstellen eines lokalen Kubernetes-Clusters mit Minikube
Bevor Sie Minikube einrichten, müssen Sie dessen Abhängigkeiten installieren, einschließlich des Kubernetes-Befehlszeilentools kubectl, das bidirektionale Datenübertragungsrelay socat und das Containerprogramm Docker.
Stellen Sie zunächst sicher, dass der Paketmanager Ihres Systems über HTTPS mit "+ apt-transport-https +" auf Pakete zugreifen kann:
apt-get update
apt-get install apt-transport-https
Fügen Sie anschließend den GPG-Schlüssel für das offizielle Google-Repository zu Ihrem System hinzu, um sicherzustellen, dass der Kubectl-Download gültig ist:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
Nachdem Sie den GPG-Schlüssel hinzugefügt haben, erstellen Sie die Datei "+ / etc / apt / sources.list.d / kubernetes.list +", indem Sie sie in Ihrem Texteditor öffnen:
nano /etc/apt/sources.list.d/kubernetes.list
Sobald diese Datei geöffnet ist, fügen Sie die folgende Zeile hinzu:
/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
Dies zeigt Ihrem System die Quelle für das Herunterladen von kubectl. Sobald Sie die Zeile hinzugefügt haben, speichern und schließen Sie die Datei. Mit dem Nano-Texteditor können Sie dies tun, indem Sie "+ STRG + X " drücken, " y " eingeben und " ENTER +" drücken.
Aktualisieren Sie abschließend die Quellliste für APT und installieren Sie "+ kubectl ", " socat " und " docker.io +":
apt-get update
apt-get install -y kubectl socat docker.io
Nachdem Sie kubectl installiert haben, können Sie mit installing Minikube fortfahren. Verwenden Sie zuerst "+ curl +", um die Binärdatei des Programms herunterzuladen:
curl -Lo minikube https://storage.googleapis.com/minikube/releases//minikube-linux-amd64
Ändern Sie als Nächstes die Zugriffsberechtigungen der soeben heruntergeladenen Datei, damit Ihr System sie ausführen kann:
chmod +x minikube
Kopieren Sie abschließend die Datei + minikube +
in den ausführbaren Pfad unter + / usr / local / bin / +
und entfernen Sie die Originaldatei aus Ihrem Home-Verzeichnis:
cp minikube /usr/local/bin/
rm minikube
Wenn Minikube auf Ihrem Computer installiert ist, können Sie das Programm jetzt starten. Verwenden Sie den folgenden Befehl, um einen Minikube Kubernetes-Cluster zu erstellen:
minikube start --vm-driver none
Das Flag "+ - vm-driver none +" weist Minikube an, Kubernetes auf dem lokalen Host unter Verwendung von Containern anstelle einer virtuellen Maschine auszuführen. Wenn Sie Minikube auf diese Weise ausführen, müssen Sie keinen VM-Treiber herunterladen, sondern der Kubernetes-API-Server wird unsicher als Root ausgeführt.
Nachdem Sie Minikube gestartet haben, überprüfen Sie, ob Ihr Cluster mit dem folgenden Befehl ausgeführt wird:
minikube status
Sie erhalten die folgende Ausgabe mit Ihrer IP-Adresse anstelle von "++":
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at
Nachdem Sie Ihren simulierten Kubernetes-Cluster mit Minikube eingerichtet haben, können Sie Erfahrungen mit der Kubernetes-Paketverwaltung sammeln, indem Sie den Helm-Paketmanager auf Ihrem Cluster installieren und konfigurieren.
Schritt 2 - Einrichten des Helm Package Managers in Ihrem Cluster
Um die Installation von Anwendungen auf Ihrem Kubernetes-Cluster zu koordinieren, installieren Sie jetzt den Helm-Paketmanager. Helm besteht aus einem "+ helm " - Client, der außerhalb des Clusters ausgeführt wird, und einem " tiller +" - Server, der Anwendungsversionen innerhalb des Clusters verwaltet. Sie müssen beide installieren und konfigurieren, um Helm erfolgreich auf Ihrem Cluster auszuführen.
Um die Helm-Binärdateien zu install herunterzuladen, verwenden Sie zuerst + curl +
, um die folgenden https://raw.githubusercontent.com/helm herunterzuladen / helm / master / scripts / holt [Installationsskript] aus dem offiziellen Helm GitHub-Repository in eine neue Datei mit dem Namen "+ get_helm.sh +":
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
Da für dieses Skript Root-Zugriff erforderlich ist, ändern Sie die Berechtigung von "+ get_helm.sh +", damit der Eigentümer der Datei (in diesem Fall "root") sie lesen, schreiben und ausführen kann:
chmod 700 get_helm.sh
Führen Sie nun das Skript aus:
./get_helm.sh
Wenn das Skript beendet ist, haben Sie "+ helm " unter " / usr / local / bin / helm " und " tiller " unter " / usr / local / bin / tiller +" installiert.
Obwohl + tiller +
jetzt installiert ist, verfügt es noch nicht über die richtigen Rollen und Berechtigungen, um auf die erforderlichen Ressourcen in Ihrem Kubernetes-Cluster zuzugreifen. Um diese Rollen und Berechtigungen "+ tiller " zuzuweisen, müssen Sie ein https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/[_service account_] mit dem Namen " tiller " erstellen `. In Kubernetes stellt ein Dienstkonto eine Identität für Prozesse dar, die in einem Pod ausgeführt werden. Nachdem ein Prozess über ein Dienstkonto authentifiziert wurde, kann er den API-Server kontaktieren und auf Clusterressourcen zugreifen. Wenn einem Pod kein bestimmtes Dienstkonto zugewiesen ist, wird das Standarddienstkonto verwendet. Sie müssen auch eine https://kubernetes.io/docs/reference/access-authn-authz/rbac/[_Role-Based access control_] (RBAC) -Regel erstellen, die das Dienstkonto " tiller +" autorisiert.
In der RBAC-API von Kubernetes enthält eine Rolle Regeln, die eine Reihe von Berechtigungen festlegen. Eine Rolle kann mit einem Gültigkeitsbereich von "+ Namespace " oder " Cluster " definiert werden und nur den Zugriff auf Ressourcen in einem einzigen Namespace gewähren. ` ClusterRole ` kann die gleichen Berechtigungen auf der Ebene eines Clusters erstellen und Zugriff auf Ressourcen mit Cluster-Bereich wie Knoten und Ressourcen mit Namespaces wie Pods gewähren. Um dem Dienstkonto " tiller " die richtige Rolle zuzuweisen, erstellen Sie eine YAML-Datei mit dem Namen " rbac_helm.yaml +" und öffnen Sie sie in Ihrem Texteditor:
nano rbac_helm.yaml
Fügen Sie der Datei die folgenden Zeilen hinzu, um das Dienstkonto "+ Pinne +" zu konfigurieren:
rbac_helm.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
- kind: User
name: "admin"
apiGroup: rbac.authorization.k8s.io
- kind: User
name: "kubelet"
apiGroup: rbac.authorization.k8s.io
- kind: Group
name: system:serviceaccounts
apiGroup: rbac.authorization.k8s.io
In der vorhergehenden Datei ermöglicht "+ ServiceAccount " den " Tiller " - Prozessen den Zugriff auf den Apiserver als authentifiziertes Dienstkonto. " ClusterRole " gewährt einer Rolle bestimmte Berechtigungen, und " ClusterRoleBinding " weist diese Rolle einer Liste von " Themen " zu, einschließlich des Dienstkontos " Pinne ", der Benutzer " Admin " und " Kubelet " und die Gruppe " system: serviceaccounts +".
Stellen Sie als nächstes die Konfiguration in + rbac_helm.yaml +
mit dem folgenden Befehl bereit:
kubectl apply -f rbac_helm.yaml
Wenn die Konfiguration "+ Pinne " implementiert ist, können Sie Helm jetzt mit dem Flag " - Dienstkonto +" initialisieren, um das soeben eingerichtete Dienstkonto zu verwenden:
helm init --service-account tiller
Sie erhalten die folgende Ausgabe, die eine erfolgreiche Initialisierung darstellt:
OutputCreating /root/.helm
Creating /root/.helm/repository
Creating /root/.helm/repository/cache
Creating /root/.helm/repository/local
Creating /root/.helm/plugins
Creating /root/.helm/starters
Creating /root/.helm/cache/archive
Creating /root/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /root/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!
Dadurch wird im Namespace "+ kube-system" ein "+ tiller" -Pod erstellt. Außerdem wird das Standard-Repository "+ .helm " in Ihrem " $ HOME " - Verzeichnis erstellt und das Standard-Repository für stabile Helm-Diagramme unter " https://kubernetes-charts.storage.googleapis.com " und das lokale Helm-Repository unter "" konfiguriert + http: //127.0.0.1: 8879 / charts +
.
Geben Sie den folgenden Befehl ein, um sicherzustellen, dass der Pod "+ tiller" im Namespace "+ kube-system" ausgeführt wird:
kubectl --namespace kube-system get pods
In Ihrer Pod-Liste wird "+ tiller-deploy +" angezeigt, wie in der folgenden Ausgabe dargestellt:
OutputNAME READY STATUS RESTARTS AGE
etcd-minikube 1/1 Running 0 2h
kube-addon-manager-minikube 1/1 Running 0 2h
kube-apiserver-minikube 1/1 Running 0 2h
kube-controller-manager-minikube 1/1 Running 0 2h
kube-dns-86f4d74b45-rjql8 3/3 Running 0 2h
kube-proxy-dv268 1/1 Running 0 2h
kube-scheduler-minikube 1/1 Running 0 2h
kubernetes-dashboard-5498ccf677-wktkl 1/1 Running 0 2h
storage-provisioner 1/1 Running 0 2h
Lautet der Status des Pods "+ Tiller " " Running +", kann er Kubernetes-Anwendungen jetzt im Auftrag von Helm von Ihrem Cluster aus verwalten.
Um sicherzustellen, dass die gesamte Helm-Anwendung funktioniert, durchsuchen Sie die Helm-Paket-Repositorys nach einer Anwendung wie MongoDB:
helm search mongodb
In der Ausgabe sehen Sie eine Liste möglicher Anwendungen, die zu Ihrem Suchbegriff passen:
OutputNAME CHART VERSION APP VERSION DESCRIPTION
stable/mongodb 5.4.0 4.0.6 NoSQL document-oriented database that stores JSON-like do...
stable/mongodb-replicaset 3.9.0 3.6 NoSQL document-oriented database that stores JSON-like do...
stable/prometheus-mongodb-exporter 1.0.0 v0.6.1 A Prometheus exporter for MongoDB metrics
stable/unifi 0.3.1 5.9.29 Ubiquiti Network's Unifi Controller
Nachdem Sie Helm auf Ihrem Kubernetes-Cluster installiert haben, können Sie mehr über den Paketmanager erfahren, indem Sie ein Beispiel-Helmdiagramm erstellen und eine Anwendung daraus bereitstellen.
Schritt 3 - Erstellen eines Diagramms und Bereitstellen einer Anwendung mit Helm
Im Helm-Paketmanager heißen einzelne Pakete charts. Innerhalb eines Diagramms definiert eine Reihe von Dateien eine Anwendung, deren Komplexität von einem Pod zu einer strukturierten Full-Stack-Anwendung variieren kann. Sie können Diagramme aus den Helm-Repositorys herunterladen oder mit dem Befehl + helm create +
Ihre eigenen erstellen.
Um die Fähigkeiten von Helm zu testen, erstellen Sie ein neues Helm-Diagramm mit dem Namen "+ demo +" mit dem folgenden Befehl:
helm create demo
In Ihrem Home-Verzeichnis finden Sie ein neues Verzeichnis mit dem Namen "+ demo +", in dem Sie Ihre eigenen Diagrammvorlagen erstellen und bearbeiten können.
Wechseln Sie in das Verzeichnis "+ demo " und verwenden Sie " ls +", um den Inhalt aufzulisten:
cd demo
ls
Sie finden die folgenden Dateien und Verzeichnisse in + demo +
:
demo
charts Chart.yaml templates values.yaml
Öffnen Sie mit Ihrem Texteditor die Datei + Chart.yaml +
:
nano Chart.yaml
Im Inneren finden Sie folgende Inhalte:
demo / Chart.yaml
apiVersion: v1
appVersion: "1.0"
description: A Helm chart for Kubernetes
name: demo
version: 0.1.0
In dieser + Chart.yaml +
Datei finden Sie Felder wie + apiVersion +
, die immer + v1 +
sein müssen, eine + Beschreibung +
, die zusätzliche Informationen darüber gibt, was + demo +
ist, der + Name + `des Charts und die
+ version + `Nummer, die Helm als Release-Marker verwendet. Wenn Sie mit der Prüfung der Datei fertig sind, schließen Sie Ihren Texteditor.
Öffnen Sie als nächstes die Datei + values.yaml +
:
nano values.yaml
In dieser Datei finden Sie folgende Inhalte:
demo / values.yaml
# Default values for demo.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
repository: nginx
tag: stable
pullPolicy: IfNotPresent
nameOverride: ""
fullnameOverride: ""
service:
type: ClusterIP
port: 80
ingress:
enabled: false
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
paths: []
hosts:
- chart-example.local
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {}
tolerations: []
affinity: {}
Durch Ändern des Inhalts von + values.yaml +
können Diagrammentwickler Standardwerte für die im Diagramm definierte Anwendung bereitstellen und die Anzahl der Replikate, die Image-Basis, den Ingress-Zugriff, die geheime Verwaltung und vieles mehr steuern. Diagrammbenutzer können ihre eigenen Werte für diese Parameter mit einer benutzerdefinierten YAML-Datei angeben, indem sie "+ helm install " verwenden. Wenn ein Benutzer benutzerdefinierte Werte angibt, überschreiben diese Werte die Werte in der Datei ` values.yaml +` des Diagramms.
Schließen Sie die Datei "+ values.yaml" und listen Sie den Inhalt des Verzeichnisses "+ templates" mit dem folgenden Befehl auf:
ls templates
Hier finden Sie Vorlagen für verschiedene Dateien, mit denen Sie verschiedene Aspekte Ihres Diagramms steuern können:
Vorlagen
deployment.yaml _helpers.tpl ingress.yaml NOTES.txt service.yaml tests
Nachdem Sie das "+ Demo " - Diagramm erkundet haben, können Sie mit der Installation des Helm-Diagramms experimentieren, indem Sie " Demo +" installieren. Kehren Sie mit dem folgenden Befehl in Ihr Ausgangsverzeichnis zurück:
cd
Installieren Sie die "+ Demo" -Helm-Tabelle unter dem Namen "+ web" mit "+ helm install":
helm install --name ./demo
Sie erhalten folgende Ausgabe:
OutputNAME: web
LAST DEPLOYED: Wed Feb 20 20:59:48 2019
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web-demo ClusterIP 10.100.76.231 <none> 80/TCP 0s
==> v1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
web-demo 1 0 0 0 0s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
web-demo-5758d98fdd-x4mjs 0/1 ContainerCreating 0 0s
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=demo,app.kubernetes.io/instance=web" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:80
In dieser Ausgabe finden Sie den "+ STATUS" Ihrer Anwendung sowie eine Liste der relevanten Ressourcen in Ihrem Cluster.
Listen Sie als Nächstes die Bereitstellungen auf, die mit dem Befehl + demo +
Helm erstellt wurden:
kubectl get deploy
Dies führt zu einer Ausgabe, in der Ihre aktiven Bereitstellungen aufgelistet sind:
OutputNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
web-demo 1 1 1 1 4m
Wenn Sie Ihre Pods mit dem Befehl "+ kubectl get pods " auflisten, werden die Pods angezeigt, auf denen Ihre " web +" - Anwendung ausgeführt wird. Dies sieht folgendermaßen aus:
OutputNAME READY STATUS RESTARTS AGE
web-demo-5758d98fdd-nbkqd 1/1 Running 0 4m
Öffnen Sie "+ demo / values.yaml " in Ihrem Texteditor und ändern Sie " replicaCount: " in " 3 " und " image: tag", um zu veranschaulichen, wie Änderungen im Helm-Diagramm verschiedene Versionen Ihrer Anwendung freigeben können : + von
+ stable + bis
+ latest + `. Im folgenden Codeblock finden Sie, wie die YAML-Datei nach dem Ändern aussehen soll, wobei die Änderungen hervorgehoben sind:
demo / values.yaml
# Default values for demo.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount:
image:
repository: nginx
tag:
pullPolicy: IfNotPresent
nameOverride: ""
fullnameOverride: ""
service:
type: ClusterIP
port: 80
. . .
Speichern und schließen Sie die Datei.
Bevor Sie diese neue Version Ihrer "+ web +" - Anwendung bereitstellen, listen Sie Ihre Helm-Versionen mit dem folgenden Befehl so auf, wie sie jetzt sind:
helm list
Sie erhalten die folgende Ausgabe mit der zuvor erstellten Bereitstellung:
OutputNAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
Beachten Sie, dass "+ REVISION " als " 1 " aufgeführt ist, was darauf hinweist, dass dies die erste Revision der " web +" - Anwendung ist.
Aktualisieren Sie die Anwendung mit dem folgenden Befehl, um die Anwendung "+ web " mit den neuesten Änderungen an " demo / values.yaml +" bereitzustellen:
helm upgrade web ./demo
Listen Sie nun die Helm-Releases erneut auf:
helm list
Sie erhalten folgende Ausgabe:
OutputNAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
web Wed Feb 20 21:18:12 2019 DEPLOYED demo-0.1.0 1.0 default
Beachten Sie, dass sich "+ REVISION " in " 2 +" geändert hat, was darauf hinweist, dass dies die zweite Revision ist.
Verwenden Sie Folgendes, um den Verlauf der Helm-Versionen für "+ web +" zu ermitteln:
helm history web
Daraufhin werden beide Revisionen der Anwendung "+ web +" angezeigt:
Ausgabe
REVISION UPDATED STATUS CHART DESCRIPTION
1 Wed Feb 20 20:59:48 2019 SUPERSEDED demo-0.1.0 Install complete
2 Wed Feb 20 21:18:12 2019 DEPLOYED demo-0.1.0 Upgrade complete
Geben Sie den folgenden Befehl ein, um ein Rollback Ihrer Anwendung auf die Revision "+ 1 +" durchzuführen:
helm rollback web 1
Dies wird die folgende Ausgabe ergeben:
OutputRollback was a success! Happy Helming!
Rufen Sie nun die Versionsgeschichte von Helm auf:
helm history web
Sie erhalten folgende Liste:
OutputREVISION UPDATED STATUS CHART DESCRIPTION
1 Wed Feb 20 20:59:48 2019 SUPERSEDED demo-0.1.0 Install complete
2 Wed Feb 20 21:18:12 2019 SUPERSEDED demo-0.1.0 Upgrade complete
3 Wed Feb 20 21:28:48 2019 demo-0.1.0 Rollback to 1
Durch Zurücksetzen der Anwendung "+ web " haben Sie eine dritte Revision erstellt, die dieselben Einstellungen wie die Revision " 1 " hat. Denken Sie daran, dass Sie immer feststellen können, welche Revision aktiv ist, indem Sie das Element " DEPLOYED " unter " STATUS +" suchen.
Um sich auf den nächsten Abschnitt vorzubereiten, bereinigen Sie Ihren Testbereich, indem Sie Ihre "+ web" -Version mit dem Befehl "+ helm delete" löschen:
helm delete web
Sehen Sie sich den Versionsverlauf von Helm noch einmal an:
helm history web
Sie erhalten folgende Ausgabe:
OutputREVISION UPDATED STATUS CHART DESCRIPTION
1 Wed Feb 20 20:59:48 2019 SUPERSEDED demo-0.1.0 Install complete
2 Wed Feb 20 21:18:12 2019 SUPERSEDED demo-0.1.0 Upgrade complete
3 Wed Feb 20 21:28:48 2019 demo-0.1.0 Deletion complete
Das "+ STATUS " für " REVISION 3 " wurde in " DELETED " geändert und zeigt an, dass Ihre implementierte Instanz von " web " gelöscht wurde. Dadurch wird die Version zwar gelöscht, aber nicht aus dem Speicher gelöscht. Um die Freigabe vollständig zu löschen, führen Sie den Befehl " helm delete" mit dem Flag "+ - purge" aus.
helm delete web --purge
In diesem Schritt haben Sie Anwendungsversionen auf Kubernetes mit dem Helm verwaltet. Wenn Sie Helm weiter studieren möchten, lesen Sie unsere Eine Einführung in Helm, the Package Manager for Kubernetes oder lesen Sie die offizielle Helm documentation.
Als Nächstes richten Sie das Pipeline-Automatisierungstool Jenkins X ein und testen es, indem Sie die CLI + jx +
verwenden, um einen CI / CD-fähigen Kubernetes-Cluster zu erstellen.
Schritt 4 - Einrichten der Jenkins X-Umgebung
Mit Jenkins X können Sie Ihren Kubernetes-Cluster von Grund auf mit eingebauten Pipeline-Automatisierungs- und CI / CD-Lösungen erstellen. Durch die Installation des CLI-Tools + jx +
können Sie Anwendungsversionen, Docker-Images und Helm-Diagramme effizient verwalten und Ihre Anwendungen in verschiedenen Umgebungen in GitHub automatisch bewerben.
Da Sie + jx +
verwenden, um Ihren Cluster zu erstellen, müssen Sie zuerst den Minikube-Cluster löschen, den Sie bereits haben. Verwenden Sie dazu den folgenden Befehl:
minikube delete
Dadurch wird der lokal simulierte Kubernete-Cluster gelöscht, die Standardverzeichnisse, die bei der Erstinstallation von Minikube erstellt wurden, werden jedoch nicht gelöscht. Verwenden Sie die folgenden Befehle, um diese von Ihrem Computer zu entfernen:
rm -rf ~/.kube
rm -rf ~/.minikube
rm -rf /etc/kubernetes/*
rm -rf /var/lib/minikube/*
Sobald Sie Minikube vollständig von Ihrem Computer gelöscht haben, können Sie mit der Installation der Jenkins X-Binärdatei fortfahren.
Laden Sie zuerst die komprimierte + jx +
- Datei aus dem offiziellen Jenkins X GitHub-Repository mit dem Befehl + curl +
herunter und dekomprimieren Sie sie mit dem Befehl + tar +
:
curl -L https://github.com/jenkins-x/jx/releases/download/v1.3.781/jx-linux-amd64.tar.gz | tar xzv
Verschieben Sie als nächstes die heruntergeladene + js
-Datei in den ausführbaren Pfad unter` + / usr / local / bin`:
mv jx /usr/local/bin
Jenkins X wird mit einer Docker-Registrierung geliefert, die in Ihrem Kubernetes-Cluster ausgeführt wird. Da dies ein internes Element ist, können Sicherheitsmaßnahmen wie selbstsignierte Zertifikate Probleme für das Programm verursachen. Um dies zu beheben, stellen Sie Docker so ein, dass unsichere Registrierungen für den lokalen IP-Bereich verwendet werden. Erstellen Sie dazu die Datei "+ /etc/docker/daemon.json" und öffnen Sie diese in Ihrem Texteditor:
nano /etc/docker/daemon.json
Fügen Sie der Datei den folgenden Inhalt hinzu:
/etc/docker/daemon.json
{
"insecure-registries" : ["0.0.0.0/0"]
}
Speichern und schließen Sie die Datei. Starten Sie den Docker-Dienst mit dem folgenden Befehl neu, damit diese Änderungen wirksam werden:
systemctl restart docker
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob Sie Docker mit unsicheren Registrierungen konfiguriert haben:
docker info
Am Ende der Ausgabe sollte die folgende hervorgehobene Zeile angezeigt werden:
OutputContainers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 15
Server Version: 18.06.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
. . .
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Nachdem Sie Jenkins X heruntergeladen und die Docker-Registrierung konfiguriert haben, erstellen Sie mit dem CLI-Tool + jx +
einen Minikube Kubernetes-Cluster mit CI / CD-Funktionen:
jx create cluster minikube --cpu=5 --default-admin-password=admin --vm-driver=none --memory=13314
Hier erstellen Sie mit Minikube einen Kubernetes-Cluster mit dem Flag "+ - cpu = 5 ", um 5 CPUs festzulegen, und " - memory = 13314 ", um Ihrem Cluster 13314 MB Arbeitsspeicher zu geben. Da es sich bei Jenkins X um ein robustes, aber umfangreiches Programm handelt, stellen diese Spezifikationen sicher, dass Jenkins X bei dieser Demonstration problemlos funktioniert. Außerdem verwenden Sie " - default-admin-password = admin ", um das Jenkins X-Kennwort als " admin " festzulegen, und " - vm-driver = none +", um den Cluster wie in "" lokal einzurichten Schritt 1.
Während Jenkins X Ihren Cluster hochfährt, erhalten Sie während des gesamten Vorgangs verschiedene Eingabeaufforderungen, mit denen Sie die Parameter für Ihren Cluster festlegen und festlegen können, wie er mit GitHub kommuniziert, um Ihre Produktionsumgebungen zu verwalten.
Zunächst erhalten Sie die folgende Eingabeaufforderung:
Output? disk-size (MB) 150GB
Drücken Sie "+ ENTER", um fortzufahren. Als nächstes werden Sie aufgefordert, den Namen, den Sie mit git verwenden möchten, die E-Mail-Adresse, die Sie mit git verwenden möchten, und Ihren GitHub-Benutzernamen einzugeben. Geben Sie diese bei entsprechender Aufforderung ein und drücken Sie "+ ENTER".
Als Nächstes fordert Jenkins X Sie auf, Ihr GitHub-API-Token einzugeben:
OutputTo be able to create a repository on GitHub we need an API Token
Please click this URL
Then COPY the token and enter in into the form below:
? API Token:
Geben Sie Ihr Token hier ein oder erstellen Sie ein neues Token mit den entsprechenden Berechtigungen unter Verwendung der im vorhergehenden Codeblock hervorgehobenen URL.
Als nächstes wird Jenkins X fragen:
Output? Do you wish to use GitHub as the pipelines Git server: (Y/n)
? Do you wish to use as the pipelines Git user for GitHub server: (Y/n)
Geben Sie für beide Fragen "+ Y +" ein.
Danach werden Sie von Jenkins X aufgefordert, die folgenden Fragen zu beantworten:
Output? Select Jenkins installation type: [Use arrows to move, type to filter]
>Static Master Jenkins
Serverless Jenkins
? Pick workload build pack: [Use arrows to move, type to filter]
> Kubernetes Workloads: Automated CI+CD with GitOps Promotion
Library Workloads: CI+Release but no CD
Wählen Sie "+ Static Master Jenkins " und " Kubernetes Workloads: Automated CI + CD with GitOps Promotion +" für letzteres. Wenn Sie aufgefordert werden, eine Organisation für Ihr Umgebungs-Repository auszuwählen, wählen Sie Ihren GitHub-Benutzernamen.
Schließlich erhalten Sie die folgende Ausgabe, die die erfolgreiche Installation überprüft und Ihr Jenkins X-Administratorkennwort angibt.
OutputCreating GitHub webhook for /environment-horsehelix-production for url http://jenkins.jx..nip.io/github-webhook/
Jenkins X installation completed successfully
********************************************************
NOTE: Your admin password is:
********************************************************
Your Kubernetes context is now set to the namespace: jx
To switch back to your original namespace use: jx namespace default
For help on switching contexts see: https://jenkins-x.io/developing/kube-context/
To import existing projects into Jenkins: jx import
To create a new Spring Boot microservice: jx create spring -d web -d actuator
To create a new microservice from a quickstart: jx create quickstart
Verwenden Sie als Nächstes den Befehl + js get
, um eine Liste von URLs zu erhalten, die Informationen zu Ihrer Anwendung enthalten:
jx get urls
Dieser Befehl liefert eine Liste ähnlich der folgenden:
Name URL
jenkins http://jenkins.jx..nip.io
jenkins-x-chartmuseum http://chartmuseum.jx..nip.io
jenkins-x-docker-registry http://docker-registry.jx..nip.io
jenkins-x-monocular-api http://monocular.jx..nip.io
jenkins-x-monocular-ui http://monocular.jx..nip.io
nexus http://nexus.jx..nip.io
Mithilfe der URLs können Sie Jenkins X-Daten zu Ihrer CI / CD-Umgebung über eine Benutzeroberfläche anzeigen, indem Sie die Adresse in Ihren Browser eingeben und Ihren Benutzernamen und Ihr Kennwort eingeben. In diesem Fall ist dies für beide "admin".
Um sicherzustellen, dass die Dienstkonten in den Namespaces "+ jx ", " jx-staging " und " jx-production +" über Administratorrechte verfügen, ändern Sie als Nächstes Ihre RBAC-Richtlinien mit den folgenden Befehlen:
kubectl create clusterrolebinding jx-staging1 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx-staging:expose --namespace=jx-staging
kubectl create clusterrolebinding jx-staging2 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx-staging:default --namespace=jx-staging
kubectl create clusterrolebinding jx-production1 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx-production:expose --namespace=jx-productions
kubectl create clusterrolebinding jx-production2 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx-production:default --namespace=jx-productions
kubectl create clusterrolebinding jx-binding1 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx:expose --namespace=jx
kubectl create clusterrolebinding jx-binding2 --clusterrole=cluster-admin --user=admin --user=expose --group=system:serviceaccounts --serviceaccount=jx:default --namespace=jx
Nachdem Sie Ihren lokalen Kubernetes-Cluster mit integrierter Jenkins X-Funktionalität erstellt haben, können Sie eine Anwendung auf der Plattform erstellen, um deren CI / CD-Funktionen zu testen und eine Jenkins X-Pipeline zu testen.
Schritt 5 - Erstellen einer Testanwendung in Ihrer Jenkins X-Umgebung
Mit Ihrer Jenkins X-Umgebung, die in Ihrem Kubernetes-Cluster eingerichtet ist, verfügen Sie jetzt über eine CI / CD-Infrastruktur, mit der Sie eine Test-Pipeline automatisieren können. In diesem Schritt probieren Sie dies aus, indem Sie eine Testanwendung in einer funktionierenden Jenkins X-Pipeline einrichten.
Zu Demonstrationszwecken wird in diesem Tutorial eine Beispiel-RSVP-Anwendung verwendet, die vom CloudYuga -Team erstellt wurde. Sie finden diese Anwendung zusammen mit anderen Webinar-Materialien unter DO-Community GitHub repository.
Klonen Sie zunächst die Beispielanwendung aus dem Repository mit dem folgenden Befehl:
git clone https://github.com/do-community/rsvpapp.git
Nachdem Sie das Repository geklont haben, wechseln Sie in das Verzeichnis "+ rsvpapp +" und entfernen Sie die Git-Dateien:
cd rsvpapp
rm -r .git/
Um ein Git-Repository und ein Jenkins X-Projekt für eine neue Anwendung zu initialisieren, können Sie "+ jx create " verwenden, um von vorne zu beginnen, oder " jx import +", um eine vorhandene Anwendung aus einem lokalen Projekt oder einem Git-Repository zu importieren. Importieren Sie für dieses Lernprogramm die RSVP-Beispielanwendung, indem Sie den folgenden Befehl im Basisverzeichnis der Anwendung ausführen:
jx import
Jenkins X fragt Sie nach Ihrem GitHub-Benutzernamen, ob Sie git, eine Bestätigungsnachricht, Ihre Organisation und den Namen für Ihr Repository initialisieren möchten. Beantworten Sie die Frage mit "Ja", um Git zu initialisieren, und geben Sie dann die restlichen Eingabeaufforderungen mit Ihren individuellen GitHub-Informationen und -Einstellungen an. Wenn Jenkins X die Anwendung importiert, werden Helm-Diagramme und eine Jenkins-Datei im Basisverzeichnis Ihrer Anwendung erstellt. Sie können diese Diagramme und die Jenkins-Datei gemäß Ihren Anforderungen ändern.
Da die RSVP-Beispielanwendung auf dem Port "+ 5000 " ihres Containers ausgeführt wird, ändern Sie Ihre Datei " charts / rsvpapp / values.yaml " entsprechend. Öffnen Sie die Datei ` charts / rsvpapp / values.yaml +` in Ihrem Texteditor:
nano charts/rsvpapp/values.yaml
In dieser + values.yaml +
Datei setzen Sie + service: internalPort: +
auf + 5000 +
. Nachdem Sie diese Änderung vorgenommen haben, sollte Ihre Datei folgendermaßen aussehen:
charts / rsvpapp / values.yaml
# Default values for python.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
repository: draft
tag: dev
pullPolicy: IfNotPresent
service:
name: rsvpapp
type: ClusterIP
externalPort: 80
internalPort:
annotations:
fabric8.io/expose: "true"
fabric8.io/ingress.annotations: "kubernetes.io/ingress.class: nginx"
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
ingress:
enabled: false
Speichern und schließen Sie Ihre Datei.
Als nächstes ändern Sie das + charts / preview / requirements.yaml +
so, dass es zu Ihrer Anwendung passt. + requirements.yaml +
ist eine YAML-Datei, in der Entwickler Diagrammabhängigkeiten zusammen mit dem Speicherort des Diagramms und der gewünschten Version deklarieren können. Da unsere Beispielanwendung MongoDB für Datenbankzwecke verwendet, müssen Sie die Datei "+ charts / preview / requirements.yaml +" ändern, um MongoDB als Abhängigkeit aufzulisten. Öffnen Sie die Datei in Ihrem Texteditor mit dem folgenden Befehl:
nano charts/preview/requirements.yaml
Bearbeiten Sie die Datei, indem Sie den Eintrag + mongodb-replicaset +
nach dem Eintrag + alias: cleanup +
hinzufügen, wie im folgenden Codeblock hervorgehoben:
charts / preview / requirements.yaml
# !! File must end with empty line !!
dependencies:
- alias: expose
name: exposecontroller
repository: http://chartmuseum.jenkins-x.io
version: 2.3.92
- alias: cleanup
name: exposecontroller
repository: http://chartmuseum.jenkins-x.io
version: 2.3.92
# !! "alias: preview" must be last entry in dependencies array !!
# !! Place custom dependencies above !!
- alias: preview
name: rsvpapp
repository: file://../rsvpapp
Hier haben Sie das Diagramm "+ mongodb-replicaset " als Abhängigkeit für das Diagramm " preview +" angegeben.
Wiederholen Sie diesen Vorgang für Ihr "+ rsvpapp " - Diagramm. Erstellen Sie die Datei ` charts / rsvpapp / requirements.yaml +` und öffnen Sie sie in Ihrem Texteditor:
nano charts/rsvpapp/requirements.yaml
Fügen Sie nach dem Öffnen der Datei Folgendes hinzu, und vergewissern Sie sich, dass vor und nach den ausgefüllten Zeilen eine Leerzeile vorhanden ist:
charts / rsvpapp / requirements.yaml
dependencies:
- name: mongodb-replicaset
repository: https://kubernetes-charts.storage.googleapis.com/
version: 3.5.5
Jetzt haben Sie das Diagramm "+ mongodb-replicaset " als Abhängigkeit für Ihr Diagramm " rsvpapp +" angegeben.
Um das Frontend der RSVP-Beispielanwendung mit dem MongoDB-Backend zu verbinden, fügen Sie als Nächstes eine Umgebungsvariable "+ MONGODB_HOST " zu Ihrer " deployment.yaml " -Datei in " charts / rsvpapp / templates / +" hinzu. Öffnen Sie diese Datei in Ihrem Texteditor:
nano charts/rsvpapp/templates/deployment.yaml
Fügen Sie der Datei die folgenden hervorgehobenen Zeilen hinzu, zusätzlich zu einer leeren Zeile oben in der Datei und zwei leeren Zeilen unten in der Datei. Beachten Sie, dass diese Leerzeilen erforderlich sind, damit die YAML-Datei funktioniert:
charts / rsvpapp / templates / deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ template "fullname" . }}
labels:
draft: {{ default "draft-app" .Values.draft }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
spec:
replicas: {{ .Values.replicaCount }}
template:
metadata:
labels:
draft: {{ default "draft-app" .Values.draft }}
app: {{ template "fullname" . }}
{{- if .Values.podAnnotations }}
annotations:
{{ toYaml .Values.podAnnotations | indent 8 }}
{{- end }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: {{ .Values.service.internalPort }}
resources:
{{ toYaml .Values.resources | indent 12 }}
Mit diesen Änderungen kann Helm Ihre Anwendung mit MongoDB als Datenbank bereitstellen.
Untersuchen Sie als Nächstes das von Jenkins X generierte "+ Jenkinsfile +", indem Sie die Datei aus dem Ausgangsverzeichnis Ihrer Anwendung öffnen:
nano Jenkinsfile
Dieses + Jenkinsfile +
definiert die Pipeline, die jedes Mal ausgelöst wird, wenn Sie eine Version Ihrer Anwendung in Ihr GitHub-Repository übertragen. Wenn Sie den Codetest automatisieren möchten, sodass die Tests bei jedem Auslösen der Pipeline ausgelöst werden, fügen Sie den Test diesem Dokument hinzu.
Um dies zu demonstrieren, fügen Sie einen benutzerdefinierten Testfall hinzu, indem Sie "+ sh" python -m unittest "" unter " stage" ("CI-Erstellung und Push-Snapshot") + "und" + stage "(" Build Release ") " in ersetzen das ` Jenkinsfile +` mit den folgenden hervorgehobenen Zeilen:
/ rsvpapp / Jenkinsfile
. . .
stages {
stage('CI Build and push snapshot') {
when {
branch 'PR-*'
}
environment {
PREVIEW_VERSION = "0.0.0-SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER"
PREVIEW_NAMESPACE = "$APP_NAME-$BRANCH_NAME".toLowerCase()
HELM_RELEASE = "$PREVIEW_NAMESPACE".toLowerCase()
}
steps {
container('python') {
sh "export VERSION=$PREVIEW_VERSION && skaffold build -f skaffold.yaml"
sh "jx step post build --image $DOCKER_REGISTRY/$ORG/$APP_NAME:$PREVIEW_VERSION"
dir('./charts/preview') {
sh "make preview"
sh "jx preview --app $APP_NAME --dir ../.."
}
}
}
}
stage('Build Release') {
when {
branch 'master'
}
steps {
container('python') {
// ensure we're not on a detached head
sh "git checkout master"
sh "git config --global credential.helper store"
sh "jx step git credentials"
// so we can retrieve the version in later steps
sh "echo \$(jx-release-version) > VERSION"
sh "jx step tag --version \$(cat VERSION)"
sh "export VERSION=`cat VERSION` && skaffold build -f skaffold.yaml"
sh "jx step post build --image $DOCKER_REGISTRY/$ORG/$APP_NAME:\$(cat VERSION)"
}
}
}
. . .
Mit den hinzugefügten Zeilen installiert die Jenkins X-Pipeline Abhängigkeiten und führt einen Python-Test durch, wenn Sie eine Änderung an Ihrer Anwendung vornehmen.
Nachdem Sie die RSVP-Beispielanwendung geändert haben, übertragen Sie diese Änderungen mit den folgenden Befehlen an GitHub:
git add *
git commit -m update
git push
Wenn Sie diese Änderungen an GitHub übertragen, wird eine neue Erstellung Ihrer Anwendung ausgelöst. Wenn Sie die Jenkins-Benutzeroberfläche öffnen, indem Sie zu "+ http: // jenkins.jx..nip.io +" navigieren und "admin" für Ihren Benutzernamen und Ihr Kennwort eingeben, finden Sie Informationen zu Ihrem neuen Build. Wenn Sie im Menü auf der linken Seite auf "Build-Verlauf" klicken, sollte ein Verlauf Ihrer festgeschriebenen Builds angezeigt werden. Wenn Sie auf das blaue Symbol neben einem Build klicken und dann im linken Menü die Option "Konsolenausgabe" auswählen, finden Sie die Konsolenausgabe für die automatisierten Schritte in Ihrer Pipeline. Wenn Sie zum Ende dieser Ausgabe scrollen, wird die folgende Meldung angezeigt:
Output. . .
Finished: SUCCESS
Dies bedeutet, dass Ihre Anwendung Ihre benutzerdefinierten Tests bestanden hat und jetzt erfolgreich bereitgestellt wird.
Sobald Jenkins X die Anwendungsversion erstellt hat, wird die Anwendung in die Umgebung "+ staging +" verschoben. Um zu überprüfen, ob Ihre Anwendung ausgeführt wird, listen Sie die auf Ihrem Kubernetes-Cluster ausgeführten Anwendungen mit dem folgenden Befehl auf:
jx get app
Sie erhalten eine Ausgabe ähnlich der folgenden:
OutputAPPLICATION STAGING PODS URL
rsvpapp 0.0.2 1/1 http://rsvpapp.jx-staging..nip.io
Daraus können Sie ersehen, dass Jenkins X Ihre Anwendung in Ihrer "+ jx-staging " -Umgebung als Version " 0.0.2 +" bereitgestellt hat. In der Ausgabe wird auch die URL angezeigt, über die Sie auf Ihre Anwendung zugreifen können. Wenn Sie diese URL besuchen, sehen Sie die RSVP-Beispielanwendung:
image: https://assets.digitalocean.com/articles/cart_64885/Sample_App_jx-staging.png [RSVP-Beispielanwendung in der Staging-Umgebung]
Überprüfen Sie als Nächstes die Aktivität Ihrer Anwendung mit dem folgenden Befehl:
jx get activity -f rsvpapp
Sie erhalten eine Ausgabe ähnlich der folgenden:
OutputSTEP STARTED AGO DURATION STATUS
/rsvpappv/master #1 3h42m23s 4m51s Succeeded Version: 0.0.1
Checkout Source 3h41m52s 6s Succeeded
CI Build and push snapshot 3h41m46s NotExecuted
Build Release 3h41m46s 56s Succeeded
Promote to Environments 3h40m50s 3m17s Succeeded
Promote: staging 3h40m29s 2m36s Succeeded
PullRequest 3h40m29s 1m16s Succeeded PullRequest: https://github.com//environment-horsehelix-staging/pull/1 Merge SHA: dc33d3747abdacd2524e8c22f0b5fbb2ac3f6fc7
Update 3h39m13s 1m20s Succeeded Status: Success at: http://jenkins.jx..nip.io/job//job/environment-horsehelix-staging/job/master/2/display/redirect
Promoted 3h39m13s 1m20s Succeeded Application is at: http://rsvpapp.jx-staging..nip.io
Clean up 3h37m33s 1s Succeeded
/rsvpappv/master #2 28m37s 5m57s Succeeded Version: 0.0.2
Checkout Source 28m18s 4s Succeeded
CI Build and push snapshot 28m14s NotExecuted
Build Release 28m14s 56s Succeeded
Promote to Environments 27m18s 4m38s Succeeded
Promote: staging 26m53s 4m0s Succeeded
PullRequest 26m53s 1m4s Succeeded PullRequest: https://github.com//environment-horsehelix-staging/pull/2 Merge SHA: 976bd5ad4172cf9fd79f0c6515f5006553ac6611
Update 25m49s 2m56s Succeeded Status: Success at: http://jenkins.jx..nip.io/job//job/environment-horsehelix-staging/job/master/3/display/redirect
Promoted 25m49s 2m56s Succeeded Application is at: http://rsvpapp.jx-staging..nip.io
Clean up 22m40s 0s Succeeded
Hier erhalten Sie die Jenkins X-Aktivität für die RSVP-Anwendung, indem Sie einen Filter mit "+ -f rsvpapp +" anwenden.
Listen Sie als Nächstes die Pods auf, die im Namespace + jx-staging +
ausgeführt werden, und geben Sie den folgenden Befehl ein:
kubectl get pod -n jx-staging
Sie erhalten eine Ausgabe ähnlich der folgenden:
NAME READY STATUS RESTARTS AGE
jx-staging-mongodb-replicaset-0 1/1 Running 0 6m
jx-staging-mongodb-replicaset-1 1/1 Running 0 6m
jx-staging-mongodb-replicaset-2 1/1 Running 0 5m
jx-staging-rsvpapp-c864c4844-4fw5z 1/1 Running 0 6m
Diese Ausgabe zeigt, dass Ihre Anwendung im Namespace "+ jx-staging +" ausgeführt wird, zusammen mit drei Pods der Back-End-MongoDB-Datenbank, wobei die zuvor an den YAML-Dateien vorgenommenen Änderungen berücksichtigt wurden.
Nachdem Sie eine Testanwendung über die Jenkins X-Pipeline ausgeführt haben, können Sie versuchen, diese Anwendung für die Produktionsumgebung zu promoten.
Schritt 6 - Heraufstufen Ihrer Testanwendung in einen anderen Namespace
Um diese Demonstration abzuschließen, schließen Sie den CI / CD-Prozess ab, indem Sie die RSVP-Beispielanwendung in Ihren Namespace "+ jx-production +" hochstufen.
Verwenden Sie zuerst + jx promot +
im folgenden Befehl:
jx promote rsvpapp --version=0.0.2 --env=production
Dadurch wird die Anwendung "+ rsvpapp ", die mit " version = 0.0.2 +" ausgeführt wird, in die Produktionsumgebung verschoben. Während des Erstellungsprozesses werden Sie von Jenkins X aufgefordert, Ihre GitHub-Kontoinformationen einzugeben. Beantworten Sie diese Eingabeaufforderungen mit Ihren individuellen Antworten.
Überprüfen Sie nach erfolgreicher Promotion die Liste der Anwendungen:
jx get app
Sie erhalten eine Ausgabe ähnlich der folgenden:
OutputAPPLICATION STAGING PODS URL PRODUCTION PODS URL
rsvpapp 0.0.2 1/1 http://rsvpapp.jx-staging..nip.io 0.0.2 1/1 http://rsvpapp.jx-production..nip.io
Mit diesen "+ PRODUCTION" -Informationen können Sie bestätigen, dass Jenkins X die "+ rsvp app" in die Produktionsumgebung befördert hat. Besuchen Sie zur weiteren Überprüfung die Produktions-URL "+ http: // rsvpapp.jx-production..nip.io +" in Ihrem Browser. Sie sollten die funktionierende Anwendung sehen, die nicht aus der „Produktion“ läuft:
image: https://assets.digitalocean.com/articles/cart_64885/Sample_App_jx-production.png [RSVP-Beispielanwendung in der Produktionsumgebung]
Listen Sie abschließend Ihre Pods im Namespace "+ jx-production +" auf.
kubectl get pod -n jx-production
Sie werden feststellen, dass + rsvpapp +
und die MongoDB-Backend-Pods in diesem Namespace ausgeführt werden:
NAME READY STATUS RESTARTS AGE
jx-production-mongodb-replicaset-0 1/1 Running 0 1m
jx-production-mongodb-replicaset-1 1/1 Running 0 1m
jx-production-mongodb-replicaset-2 1/1 Running 0 55s
jx-production-rsvpapp-54748d68bd-zjgv7 1/1 Running 0 1m
Dies zeigt, dass Sie die RSVP-Beispielanwendung erfolgreich in Ihre Produktionsumgebung hochgestuft haben und die produktionsbereite Bereitstellung einer Anwendung am Ende einer CI / CD-Pipeline simulieren.
Fazit
In diesem Lernprogramm haben Sie mit Helm Pakete in einem simulierten Kubernetes-Cluster verwaltet und ein Helm-Diagramm angepasst, um Ihre eigene Anwendung zu packen und bereitzustellen. Sie richten auch eine Jenkins X-Umgebung in Ihrem Kubernetes-Cluster ein und führen eine Beispielanwendung von Anfang bis Ende über eine CI / CD-Pipeline aus.
Sie haben jetzt Erfahrung mit diesen Tools, die Sie beim Erstellen eines CI / CD-Systems auf Ihrem eigenen Kubernetes-Cluster verwenden können. Wenn Sie mehr über Helm erfahren möchten, lesen Sie unsere Eine Einführung in Helm , the Package Manager for Kubernetes und How To Install Software über Kubernetes-Cluster mit dem Helm Package Manager. Weitere Informationen zu CI / CD-Tools auf Kubernetes finden Sie im nächsten Tutorial in dieser Webinar-Reihe.