Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Anmelden für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Erstellen Sie OCI DevOps-Pipelines, um die Golang-Microservices zu erstellen und bereitzustellen
Einführung
Dies ist Teil vier einer sechsteiligen Tutorialreihe, die zeigt, wie Sie ein temporäres Set von Ressourcen in einem OKE-Cluster mit Golang-Microservices bereitstellen, das die Verwendung von OCI SDK, OCI-CLI, Resource Manager, OCI Devops und Helm darstellt, um Apache Airflow bereitzustellen und zu zerstören.
Zielsetzung
In diesem Tutorial erfahren Sie, wie Sie OCI DevOps-Pipelines zum Erstellen und Bereitstellen erstellen können.
Voraussetzungen
- Abschluss des vorherigen Tutorials in diesem Lernpfad, Teil 3/6 - OCI Devops-Projekt erstellen, Berechtigungen und Code-Repository für Microservices einrichten.
Aufgabe 1: Go-Login-Code untersuchen
-
Dieser Microservice ist ein Beispielcode in Golang, mit dem ein JWT-Token erstellt und an den Benutzer zurückgegeben wird. Dieses Token wird dann von den go-microservices zur Authentifizierung des Anrufs verwendet. Dies ist eine einfache Authentifizierungsmethode, mit der die Sicherheit für dieses Tutorial sichergestellt wird.
-
Das Repository enthält alle Dateien, die für das Deployment in OKE mit dem OCI DevOps-Service erforderlich sind, wie Helm-Diagramme, Dockerfile und
build_spec.yaml
.
Hinweis
Der Code wurde bereits in früheren Schritten dieser Übung in das OCI-Repository mit dem Namen go-login hochgeladen.
Aufgabe 2: Go-Microservices-Code kennenlernen
-
Dieser Microservice ist ein Beispielcode für die Ausführung der folgenden Aufgaben:
Methode Beschreibung /oci-init Diese Route führt einen Stack Apply-Job im OCI Resource Manager aus. Dadurch wird eine Terraform ausgeführt, um einen neuen Knotenpool im Cluster OKE zu erstellen. Außerdem wird die OCI Devops-Build-Pipeline gestartet, um den Luftstrom auf den neuen Knoten zu installieren. /oci-destroy Dadurch wird das Airflow-Deployment in OKE gelöscht, und anschließend wird "Stackzerstörung" im Ressourcenmanager ausgeführt, um den zusätzlichen Knotenpool zu entfernen -
Das Repository enthält alle erforderlichen Dateien für das Deployment in OKE mit dem OCI DevOps-Service, wie Helm-Diagramme, Dockerfile und
build_spec.yaml
.
Hinweis
Der Code wurde bereits in früheren Schritten dieser Übung in Ihr OCI-Repository mit dem Namen go-microservice hochgeladen.
Aufgabe 3: DevOps-Artefakte für go-login und go-microservice erstellen
Bevor Sie die Build-Pipeline DevOps erstellen, müssen wir die Artefakte erstellen, die mit den Build-Ergebnissen (Helm-Package und Containerimage) verbunden werden.
-
Gehen Sie zu der OCI-Registry, die Sie für dieses Tutorial erstellt haben.
-
Klicken Sie unter dem Projekt DevOps auf die Artefakte, klicken Sie auf Artefakt hinzufügen, und geben Sie Containerimage-Repository ein.
Wichtiger Hinweis zur Registry-URL:
-
Dies ist die Basis der Registry für die Region sa-saopaulo-1.
-
Prüfen Sie, ob der Regionscode anders ist, wenn Sie "sa-saopaulo-1" nicht verwenden. Weitere Informationen finden Sie unter Regionen und Availability-Domains.
-
-
Wiederholen Sie Schritt 2, und fügen Sie das go-microservice-Artefakt hinzu.
-
Erstellen Sie ein neues allgemeines Artefakt, um die Helm-Werte für go-login zu speichern, indem Sie den Inhalt der Datei
values.yaml
aus dem Code-Repository einfügen. -
Erstellen Sie ein neues allgemeines Artefakt, um die Helm-Werte für go-microservice zu speichern, indem Sie den Inhalt der Datei
values.yaml
aus dem Code-Repository einfügen. -
Erstellen Sie ein neues Helm-Diagrammartefakt für das Go-Login. Sie müssen den richtigen Namespace und Regionscode in der Diagramm-URL festlegen.
-
Erstellen Sie ein neues Helm-Diagrammartefakt für den Go-Microservice. Sie müssen den richtigen Namespace und Regionscode in der Diagramm-URL festlegen.
An diesem Punkt müssen die folgenden Artefakte im Projekt DevOps vorhanden sein.
Aufgabe 4: Devops-Build-Pipeline für Go-Login erstellen
-
Gehen Sie zur Konsolenseite für das DevOps-Projekt, und wählen Sie das von Ihnen erstellte DevOps-Projekt aus.
-
Wählen Sie Pipelines erstellen aus, klicken Sie auf Build-Pipeline erstellen, geben Sie den Namen und die Beschreibung ein, und klicken Sie auf Erstellen.
-
Klicken Sie auf Phase hinzufügen, und wählen Sie Verwalteter Build aus.
-
Wählen Sie unter Primäres Code-Repository Ihr OCI-Repository für Go-login aus.
- Bestätigen Sie das Repository, wählen Sie es aus, und klicken Sie auf Hinzufügen.
-
Fügen Sie eine neue Phase in der Build-Pipeline hinzu, um das Artefakt in der Registry zu veröffentlichen. Wählen Sie die Option Artefakte übermitteln und dann das Artefakt go-login-image aus, das in den vorherigen Schritten erstellt wurde.
Ihre Pipeline sollte so aussehen.
Aufgabe 5: Build-Pipeline DevOps für Go-Microservice erstellen
-
Gehen Sie zur Konsolenseite für das DevOps-Projekt, und wählen Sie das von Ihnen erstellte DevOps-Projekt aus.
-
Wählen Sie Pipelines erstellen aus, klicken Sie auf Build-Pipeline erstellen, geben Sie den Namen und die Beschreibung ein, und klicken Sie auf Erstellen.
-
Klicken Sie auf Phase hinzufügen, und wählen Sie Verwalteter Build aus.
-
Wählen Sie im Primäres Code-Repository Ihr OCI-Repository für go-microservice aus.
- Bestätigen Sie das Repository, wählen Sie es aus, und klicken Sie auf Hinzufügen.
-
Fügen Sie eine neue Phase in der Build-Pipeline hinzu, um das Artefakt in der Registry zu veröffentlichen. Wählen Sie die Option Artefakte übermitteln und dann das in den vorherigen Schritten erstellte Artefakt go-microservice-image aus.
Ihre Pipeline sollte so aussehen.
Aufgabe 6: Build-Pipeline {build_spec.yaml} - go-login
Die Datei build_spec
ist eine YAML-Datei, in der die Schritte beschrieben werden, die während der Ausführung der Build-Pipeline ausgeführt werden. Der Service wird auf einem Cloud-Build-Runner ausgeführt und unterstützt die meisten gängigen Sprachen in cloud-nativen Anwendungen. Die Datei befindet sich im Stammverzeichnis Ihres go-login-Repository-Codes auf OCI. Diese Datei verwendet einige Variablen aus dem VAULT, und wir müssen sie in unsere Tutorial Vault-OCIDs ändern.
Weitere Details zu Build-Spezifikationen finden Sie unter Build-Spezifikation.
Die folgenden beiden Variablen müssen festgelegt werden.
-
HELM_REPO_USER
: Der Benutzername, den Sie als Secret im Vault gespeichert haben. -
USER_AUTH_TOKEN
: Das Autorisierungstoken für den im Vault gespeicherten Benutzer.
-
Gehen Sie zu Ihren Vault-Secrets, und rufen Sie die OCID für jedes Secret ab.
-
Gehen Sie zu Ihren Projekt-Repositorys, und rufen Sie
ssh url
für die Go-Login ab.-
Aktualisieren Sie die Datei build_spec.yaml, ersetzen Sie Werte durch die kopierten OCID-Secrets, und schreiben Sie die Änderungen am Code.
-
-
Gehen Sie zu Ihrer Bastion Jump-Box Shell Konsole.
cd $HOME # If you still have the old go-login.git and go-microservices.git directory, delete it! rm -rf go-login.git rm -rf go-microservice.git git clone <your ssh url for the repo> cd go-login/ vi build_spec.yaml #perform the needed changes for your ocid variables and save the file. git add . git commit -m "fixed ocid variables" git push
-
Gehen Sie zur Build-Pipeline go-login unter dem Projekt DevOps, wählen Sie die Registerkarte "Parameter" aus, und fügen Sie die folgenden neuen Parameter hinzu.
HELM_REPO
: Die Basis Ihrer OCI-Registry xxx.ocir.io.HELM_REPO_URL
: Die OCI-Registry-URL für das zugehörige Helm-Diagramm.APP_HOST
: Der Host wird für den Zugriff auf Ihre Anwendung in Ingress Controller verwendet.IMAGE_URL
: Die OCI-Registry-Image-URL ohne das Tag.
-
Klicken Sie auf die Registerkarte Pipeline erstellen und dann auf Manuelle Ausführung starten.
-
Wie wir sehen können, wurde der Build zusammen mit dem Image-Push an die OCI-Registry erfolgreich abgeschlossen.
-
-
Gehen Sie zur OCI Container Registry, und prüfen Sie, ob dort ein Image vorhanden ist.
Aufgabe 7: OCI-Zugangsdaten für Go-Microservice einrichten
Die Go-Microservices interagieren mit OCI über SDK und müssen dazu die richtigen Zugangsdaten einrichten. Wir verwenden die ähnlichen Informationen, mit denen wir die OCI-CLI während des Bastion-Setups aus früheren Schritten dieses Tutorials eingerichtet haben.
Alle erforderlichen Zugangsdaten werden in der OKE-configmap gespeichert und in die Umgebungsvariablen im ausgeführten Container injiziert.
-
Gehen Sie zu Ihren OCI-Repositorys, und erhalten Sie
ssh url
für Ihr go-microservice-Repository. -
Gehen Sie zur Konsolenseite für das OKE-Cluster, kopieren Sie die ocid des Clusters, und ersetzen Sie im nächsten Schritt den Befehl für die Umgebungsvariable
ENV_CLUSTER_ID
. -
Öffnen Sie Ihr Bastion-Shell-Terminal. Stellen Sie sicher, dass der SSH-Schlüssel unter ~/.oci/oci_api_key.pem erstellt wurde. Mit Ausnahme der Variable ENV_CLUSTER_ID können alle anderen Variablen in der Datei ~/.OCI/config unter Ihrem Bastionhost gefunden werden, den Sie zuvor die OCI-CLI eingerichtet haben.
cat ~/.oci/config
-
Die folgende Shell-Befehlsliste erstellt eine neue configmap/values.yaml-Datei mit allen erforderlichen Variablen, die in den ausgeführten Container injiziert werden sollen, und überträgt sie dann in das Code-Repository auf OCI. Bevor Sie die Befehle auf Ihrem Bastionhost-Terminal ausführen, ersetzen Sie die Werte "PASTE IHR..." unten.
cd $HOME rm -rf go-microservice/ git clone <PAST YOUR ssh url> cd go-microservice/chart-go-microservice/configmap/ rm values.yaml pem=$(cat ~/.oci/oci_api_key.pem|base64 -w 0) echo 'ENV_PEM: "'$pem'"' > values.yaml echo 'ENV_TENANCY_OCID: "PASTE YOUR TENANCY OCID"' >> values.yaml echo 'ENV_USER_OCID: "PASTE YOUR USER OCID"' >> values.yaml echo 'ENV_REGION: "PASTE YOUR REGION NAME"' >> values.yaml echo 'ENV_FINGERPRINT: "PASTE YOUR FINGERPRINT"' >> values.yaml echo 'ENV_CLUSTER_ID: "PASTER YOUR CLUSTER OCID"' >> values.yaml cd $HOME/go-microservice git add . git commit -m "added correct values on configmap" git push
Jetzt kann der Go-Microservice mit OCI über das SDK kommunizieren.
Aufgabe 8: Build-Pipeline {build_spec.yaml} - go-microservices
Die Datei build_spec ist eine YAML-Datei, in der die Schritte beschrieben werden, die während der Ausführung der Build-Pipeline ausgeführt werden. Der Service wird auf einem Cloud-Build-Runner ausgeführt und unterstützt die meisten gängigen Sprachen in cloud-nativen Anwendungen. Die Datei befindet sich in der Root Ihres go-microservice-Repository-Codes auf OCI. Diese Datei verwendet einige Variablen aus dem VAULT, und wir müssen sie in unsere Tutorial Vault-OCIDs ändern.
Weitere Details zu Build-Spezifikationen finden Sie unter Build-Spezifikation.
Die folgenden beiden Variablen müssen festgelegt werden.
-
HELM_REPO_USER
: Der Benutzername, den Sie als Secret im Vault gespeichert haben. -
USER_AUTH_TOKEN
: Das Autorisierungstoken für den im Vault gespeicherten Benutzer.
-
Gehen Sie zu Ihren Vault-Secrets, und rufen Sie die OCID für jedes Secret ab.
-
Rufen Sie Ihre Projekt-Repositorys auf, und rufen Sie die SSH-URL für die Go-Login ab.
- Sie müssen die Datei build_spec.yaml aktualisieren, Werte durch die kopierten OCID-Secrets ersetzen und dann die Änderungen am Code festschreiben.
-
Gehen Sie zu Ihrer Bastion Jump-Box Shell Konsole.
cd $HOME # If you still have the old go-login.git and go-microservices.git directory, delete it! rm -rf go-login.git rm -rf go-microservice.git git clone <your ssh url for the repo> cd go-microservice/ vi build_spec.yaml #perform the needed changes for your ocid variables and save the file. git add . git commit -m "fixed ocid variables" git push
-
Gehen Sie zu Ihrer go-microservice-Build-Pipeline unter Ihrem Devops-Projekt, wählen Sie die Registerkarte "Parameter" aus, und fügen Sie neue Parameter hinzu.
HELM_REPO
: Die Basis Ihrer OCI-Registry xxx.ocir.io.HELM_REPO_URL
: Die OCI-Registry-URL für das zugehörige Helm-Diagramm.APP_HOST
: Der Host wird für den Zugriff auf Ihre Anwendung in Ingress Controller verwendet.IMAGE_URL
: Die OCI-Registry-Image-URL ohne das Tag.
-
Klicken Sie auf die Registerkarte Pipeline erstellen und dann auf Manuelle Ausführung starten.
-
Wie wir sehen können, wurde der Build zusammen mit dem Image-Push an die OCI-Registry erfolgreich abgeschlossen.
-
-
Gehen Sie zur OCI Container Registry, und prüfen Sie, ob dort ein Image vorhanden ist.
Aufgabe 9: OKE für den Empfang der Deployments vorbereiten
In diesem Tutorial erstellen wir die OKE-Namespaces für go-login und go-microservices manuell. Außerdem müssen die OCI Container Registry-Zugangsdaten in jedem Namespace mithilfe von Secrets eingerichtet werden. Dies ist erforderlich, da Ihr Deployment das Containerimage nicht aus der Registry abrufen kann.
-
Rufen Sie den Klartext TOKEN und den Benutzernamen aus der OCI-Registry ab, die Sie im Vault gespeichert haben.
-
Öffnen Sie die Bastion-Shell-Konsole, und führen Sie den folgenden Befehl aus.
Hinweis: Stellen Sie sicher, dass Sie die Variablen in den folgenden Befehlen mit den Zugangsdaten, die Sie im vorherigen Schritt erhalten haben, ersetzen. Prüfen Sie außerdem den richtigen Docker-Server in der Region gru.ocir.io.
cd $HOME kubectl get ns kubectl create ns go-login kubectl create ns go-microservices kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-login kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-microservices
-
Stellen Sie nun den Ingress-Controller bereit, um über das Internet auf die Microservices zugreifen zu können. Wir verwenden das offizielle Ingress-Image auf Version v1.4.0.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml kubectl scale --replicas=4 deployment ingress-nginx-controller -n ingress-nginx
-
Lassen Sie uns überprüfen, ob die Ingress-Services gut sind, es sollte so aussehen.
kubectl get svc -n ingress-nginx
-
Nach dem Erstellen des Ingress-nginx wird automatisch ein neuer Load Balancer auf OCI erstellt. Aktualisieren Sie jetzt die Load Balancer-Ausprägungen in eine billigere Ausprägungen, und vermeiden Sie zusätzliche Kosten.
-
-
Gehen Sie zur Konsole, wählen Sie unter Networking die Option Load Balancer aus, und wählen Sie dann den neu erstellten Load Balancer aus.
-
Klicken Sie auf diese Schaltfläche, um den SHAPE zu aktualisieren und das Kontrollkästchen Flexiblen Load Balancer verwenden zu aktivieren.
Aufgabe 10: Neue OCI DevOps-Umgebung erstellen
Um Ihre Apps bereitstellen zu können, müssen wir die Umgebung erstellen.
-
Wählen Sie Ihr DevOps-Projekt aus, klicken Sie auf Umgebungen und dann auf Umgebung erstellen.
Aufgabe 11: Go-Login mit Helm-Diagrammen in OCI DevOps bereitstellen
-
Gehen Sie zu Ihrem Devops-Projekt, klicken Sie auf Deployment Pipelines, und erstellen Sie eine neue Pipeline für Go-Login.
-
Klicken Sie auf diese Option, um eine neue bereitzustellende Phase hinzuzufügen. Wählen Sie "Helm-Diagramme in Kubernetes-Cluster installieren" aus, und wählen Sie das Helm-Artefakt und das Wertartefakt für Go-login aus. Stellen Sie sicher, dass Sie den Namespace-Namen go-login eingeben.
-
Erstellen Sie einen Trigger für die Build-Pipeline, um das Deployment nach Abschluss des Builds automatisch zu starten.
-
Gehen Sie zur Build-Pipeline go-login unter Ihrem Devops-Projekt, und klicken Sie auf Phase hinzufügen.
-
Wählen Sie Deployment auslösen aus, klicken Sie auf Deployment-Pipeline auswählen, und wählen Sie go-login-deploy aus.
-
-
Klicken Sie auf Manuelle Ausführung starten, um die Pipeline zu testen.
-
Klicken Sie auf der Seite Devops-Projekt auf Deployments, um den aktiven Deployment-Status zu prüfen.
Aufgabe 12: Go-log-Deployment prüfen
-
Gehen Sie zu Ihrem Bastionhostterminal, und prüfen Sie Folgendes:
-
Prüfen Sie die Podintegrität.
kubectl get pod -n go-login
-
Prüfen Sie den Ingress-Host und die Adresse für die App.
kubectl get ingress -n go-login
-
Dieses Deployment verwendet den Ingress-Kontrollrouting-Traffic über den Hostnamen. Das bedeutet, dass wir den Service mit dem richtigen Hostnamen als Teil der URL aufrufen müssen.
-
In diesem Tutorial haben wir keine SSL-Zertifikate verwendet. Um die Services aufrufen zu können, die wir in die lokale /etc/hosts-Datei Ihres Laptops aufnehmen müssen, wählen Sie die richtige DNS-Route aus. Dies wird für Production-Umgebungen nicht empfohlen.
-
Notieren Sie sich die externe IP-Adresse, und fügen Sie den Eintrag in /etc/hosts hinzu.
sudo vi /etc/hosts
-
Fügen Sie am Ende der Datei eine neue Zeile ein.
your.ip.aaa.xx go-login.superocilab.com
-
Führen Sie den folgenden Befehl aus.
cat /etc/hosts
-
Die /etc/hosts-Datei sollte wie folgt aussehen:
-
-
Jetzt können Sie den go-login-Service mit einer curl aufrufen und ein jwt TOKEN generieren, indem Sie den /login-Endpunkt aufrufen.
curl http://go-login.superocilab.com curl http://go-login.superocilab.com/login
Aufgabe 13: Go-Microservice für OCI-Devops mit Helm-Diagrammen bereitstellen
-
Gehen Sie zu Ihrem Devops-Projekt, klicken Sie auf Deployment-Pipelines, und erstellen Sie eine neue Pipeline für go-microservice.
-
Klicken Sie auf diese Schaltfläche, um eine neue Phase für das Deployment hinzuzufügen. Wählen Sie Helm-Diagramme in Kubernetes-Cluster installieren, das Helm-Artefakt und das Wertartefakt für go-microservice aus. Stellen Sie sicher, dass Sie den Namespace-Namen als go-microservices angeben.
-
Erstellen Sie einen Trigger für die Build-Pipeline, um das Deployment nach Abschluss des Builds automatisch zu starten.
-
Gehen Sie zur go-microservice-Build-Pipeline unter Ihrem Devops-Projekt, und klicken Sie auf Phase hinzufügen.
-
Wählen Sie Deployment auslösen aus, klicken Sie auf Deployment-Pipeline auswählen, und wählen Sie go-microservice-deploy aus.
-
-
Klicken Sie auf Manuelle Ausführung starten, um die Pipeline zu testen.
-
Klicken Sie auf der Seite Devops-Projekt auf Deployments, um den aktiven Deployment-Status zu prüfen.
Aufgabe 14: Go-Microservice-Deployment prüfen
-
Gehen Sie zu Ihrem Bastionhostterminal, und prüfen Sie die folgenden Details:
-
Prüfen Sie die Podintegrität.
kubectl get pod -n go-microservices
-
Prüfen Sie den Ingress-Host und die Adresse für die App.
kubectl get ingress -n go-microservices
-
Dieses Deployment verwendet den Ingress-Kontrollrouting-Traffic über den Hostnamen. Das bedeutet, dass wir den Service mit dem richtigen Hostnamen als Teil der URL aufrufen müssen.
-
In diesem Tutorial haben wir keine SSL-Zertifikate verwendet. Um die Services aufrufen zu können, die wir in die lokale /etc/hosts-Datei Ihres Laptops aufnehmen müssen, wählen Sie die richtige DNS-Route aus. Dies wird für Production-Umgebungen nicht empfohlen.
-
Notieren Sie sich Ihre externe IP-Adresse, und fügen Sie den Eintrag in /etc/hosts hinzu (Sie können ihn auch auf Ihrem lokalen Rechner hinzufügen!)
sudo vi /etc/hosts
-
Fügen Sie am Ende der Datei eine neue Zeile ein.
your.ip.aaa.xx go-microservice.superocilab.com
-
Führen Sie den folgenden Befehl aus.
cat /etc/hosts
-
Die /etc/hosts-Datei sollte wie folgt aussehen:
-
Jetzt können Sie den go-microservice-Service anrufen.
curl curl http://go-microservice.superocilab.com
Nächster Schritt
Um mit dem nächsten Tutorial in diesem Lernpfad fortzufahren, klicken Sie hier.
Verwandte Links
Danksagungen
- Autor - Joao Tarla (Oracle LAD A-Team Solution Engineer)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Create OCI DevOps pipelines to build and deploy the Golang microservices
F79787-01
April 2023
Copyright © 2023, Oracle and/or its affiliates.