Hinweis:

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

Aufgabe 1: Go-Login-Code untersuchen

Hinweis
Der Code wurde bereits in früheren Schritten dieser Übung in das OCI-Repository mit dem Namen go-login hochgeladen.

T1_1

Aufgabe 2: Go-Microservices-Code kennenlernen

Hinweis
Der Code wurde bereits in früheren Schritten dieser Übung in Ihr OCI-Repository mit dem Namen go-microservice hochgeladen.

T2_1

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.

  1. Gehen Sie zu der OCI-Registry, die Sie für dieses Tutorial erstellt haben.

    T3_1

  2. Klicken Sie unter dem Projekt DevOps auf die Artefakte, klicken Sie auf Artefakt hinzufügen, und geben Sie Containerimage-Repository ein.

    T3_2

    Wichtiger Hinweis zur Registry-URL:

    T3_2

    • 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.

    T3_2

  3. Wiederholen Sie Schritt 2, und fügen Sie das go-microservice-Artefakt hinzu.

    T3_2

  4. 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.

    T3_4

  5. 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.

    T3_5

  6. Erstellen Sie ein neues Helm-Diagrammartefakt für das Go-Login. Sie müssen den richtigen Namespace und Regionscode in der Diagramm-URL festlegen.

    T3_6

  7. Erstellen Sie ein neues Helm-Diagrammartefakt für den Go-Microservice. Sie müssen den richtigen Namespace und Regionscode in der Diagramm-URL festlegen.

    T3_7

An diesem Punkt müssen die folgenden Artefakte im Projekt DevOps vorhanden sein.

T3_7

Aufgabe 4: Devops-Build-Pipeline für Go-Login erstellen

  1. Gehen Sie zur Konsolenseite für das DevOps-Projekt, und wählen Sie das von Ihnen erstellte DevOps-Projekt aus.

  2. 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.

    T4_2

  3. Klicken Sie auf Phase hinzufügen, und wählen Sie Verwalteter Build aus.

    T4_2

    T4_2

  4. Wählen Sie unter Primäres Code-Repository Ihr OCI-Repository für Go-login aus.

    T4_4

    • Bestätigen Sie das Repository, wählen Sie es aus, und klicken Sie auf Hinzufügen.
  5. 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.

    T4_5

    T4_5

Ihre Pipeline sollte so aussehen.

T4_5

Aufgabe 5: Build-Pipeline DevOps für Go-Microservice erstellen

  1. Gehen Sie zur Konsolenseite für das DevOps-Projekt, und wählen Sie das von Ihnen erstellte DevOps-Projekt aus.

  2. 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.

    T4_2

  3. Klicken Sie auf Phase hinzufügen, und wählen Sie Verwalteter Build aus.

    T4_2

    T4_2

  4. Wählen Sie im Primäres Code-Repository Ihr OCI-Repository für go-microservice aus.

    T4_4

    • Bestätigen Sie das Repository, wählen Sie es aus, und klicken Sie auf Hinzufügen.
  5. 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.

    T4_5

    T4_5

Ihre Pipeline sollte so aussehen.

T4_5

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.

  1. Gehen Sie zu Ihren Vault-Secrets, und rufen Sie die OCID für jedes Secret ab.

    T6_1

  2. Gehen Sie zu Ihren Projekt-Repositorys, und rufen Sie ssh url für die Go-Login ab.

    T6_2

    • Aktualisieren Sie die Datei build_spec.yaml, ersetzen Sie Werte durch die kopierten OCID-Secrets, und schreiben Sie die Änderungen am Code.

      T6_2

  3. 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
    

    T6_3

    T6_3

  4. 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.

    T6_4

  5. Klicken Sie auf die Registerkarte Pipeline erstellen und dann auf Manuelle Ausführung starten.

    T6_5

    T6_5

    • Wie wir sehen können, wurde der Build zusammen mit dem Image-Push an die OCI-Registry erfolgreich abgeschlossen.

      T6_5

  6. Gehen Sie zur OCI Container Registry, und prüfen Sie, ob dort ein Image vorhanden ist.

    T6_5

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.

T7_0

  1. Gehen Sie zu Ihren OCI-Repositorys, und erhalten Sie ssh url für Ihr go-microservice-Repository.

    T7_1

  2. 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.

    T7_2

  3. Ö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
    

    T7_2

  4. 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
    

    T7_3

    T7_3

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.

  1. Gehen Sie zu Ihren Vault-Secrets, und rufen Sie die OCID für jedes Secret ab.

    T6_1

  2. Rufen Sie Ihre Projekt-Repositorys auf, und rufen Sie die SSH-URL für die Go-Login ab.

    T6_2

    • Sie müssen die Datei build_spec.yaml aktualisieren, Werte durch die kopierten OCID-Secrets ersetzen und dann die Änderungen am Code festschreiben.

    T6_2

  3. 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
    

    T8_3

    T8_3

  4. 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.

    T6_4

  5. Klicken Sie auf die Registerkarte Pipeline erstellen und dann auf Manuelle Ausführung starten.

    T8_5

    T8_5

    • Wie wir sehen können, wurde der Build zusammen mit dem Image-Push an die OCI-Registry erfolgreich abgeschlossen.

      T8_5

  6. Gehen Sie zur OCI Container Registry, und prüfen Sie, ob dort ein Image vorhanden ist.

    T8_5

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.

  1. Rufen Sie den Klartext TOKEN und den Benutzernamen aus der OCI-Registry ab, die Sie im Vault gespeichert haben.

    T9_1

  2. Ö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
      
      

      T9_2

      T9_2

    • Lassen Sie uns überprüfen, ob die Ingress-Services gut sind, es sollte so aussehen.

      kubectl get svc -n ingress-nginx
      

      T9_2

    • 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.

  3. 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.

    T9_3

  4. Klicken Sie auf diese Schaltfläche, um den SHAPE zu aktualisieren und das Kontrollkästchen Flexiblen Load Balancer verwenden zu aktivieren.

    T9_4

Aufgabe 10: Neue OCI DevOps-Umgebung erstellen

Um Ihre Apps bereitstellen zu können, müssen wir die Umgebung erstellen.

  1. Wählen Sie Ihr DevOps-Projekt aus, klicken Sie auf Umgebungen und dann auf Umgebung erstellen.

    T10_1

    T10_1

Aufgabe 11: Go-Login mit Helm-Diagrammen in OCI DevOps bereitstellen

  1. Gehen Sie zu Ihrem Devops-Projekt, klicken Sie auf Deployment Pipelines, und erstellen Sie eine neue Pipeline für Go-Login.

    T11_1

  2. 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.

    T11_2

  3. Erstellen Sie einen Trigger für die Build-Pipeline, um das Deployment nach Abschluss des Builds automatisch zu starten.

    1. Gehen Sie zur Build-Pipeline go-login unter Ihrem Devops-Projekt, und klicken Sie auf Phase hinzufügen.

    2. Wählen Sie Deployment auslösen aus, klicken Sie auf Deployment-Pipeline auswählen, und wählen Sie go-login-deploy aus.

      T11_3

  4. Klicken Sie auf Manuelle Ausführung starten, um die Pipeline zu testen.

    T11_4

    T11_4

  5. Klicken Sie auf der Seite Devops-Projekt auf Deployments, um den aktiven Deployment-Status zu prüfen.

    T11_5

Aufgabe 12: Go-log-Deployment prüfen

  1. 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
      

      T12_1

    • 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:

      T12_1

  2. 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
    

    T12_1

Aufgabe 13: Go-Microservice für OCI-Devops mit Helm-Diagrammen bereitstellen

  1. Gehen Sie zu Ihrem Devops-Projekt, klicken Sie auf Deployment-Pipelines, und erstellen Sie eine neue Pipeline für go-microservice.

    T13_1

  2. 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.

    T13_2

  3. Erstellen Sie einen Trigger für die Build-Pipeline, um das Deployment nach Abschluss des Builds automatisch zu starten.

    1. Gehen Sie zur go-microservice-Build-Pipeline unter Ihrem Devops-Projekt, und klicken Sie auf Phase hinzufügen.

    2. Wählen Sie Deployment auslösen aus, klicken Sie auf Deployment-Pipeline auswählen, und wählen Sie go-microservice-deploy aus.

    T13_3

    T13_3

  4. Klicken Sie auf Manuelle Ausführung starten, um die Pipeline zu testen.

    T13_4

    T13_4

  5. Klicken Sie auf der Seite Devops-Projekt auf Deployments, um den aktiven Deployment-Status zu prüfen.

    T11_5

Aufgabe 14: Go-Microservice-Deployment prüfen

  1. 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
      

      T14_1

    • 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:

      T14_1

Jetzt können Sie den go-microservice-Service anrufen.

curl curl http://go-microservice.superocilab.com

T14_1

Nächster Schritt

Um mit dem nächsten Tutorial in diesem Lernpfad fortzufahren, klicken Sie hier.

Danksagungen

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.