Skalierbare Webanwendung unter Red Hat OpenShift on IBM Cloud

Für dieses Lernprogramm können Kosten anfallen. Mit dem Kostenschätzer können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung generieren.

In diesem Tutorial erfahren Sie, wie Sie eine Anwendung in einem Red Hat OpenShift on IBM Cloud cluster aus einem entfernten Git Repository bereitstellt, die Anwendung auf einer Route bereitstellt, den Zustand der Umgebung überwacht und die Anwendung skaliert. Darüber hinaus lernen Sie, wie Sie eine private Container-Registry verwenden, eine Anwendung aus einem privaten Git-Repository bereitstellen und eine benutzerdefinierte Domain an die Anwendung binden.

Mit Red Hat OpenShift on IBM Cloudkönnen Sie Kubernetes-Cluster mit Workerknoten erstellen, die mit der OpenShift Container Platforminstalliert werden. Weitere Informationen über die Architektur von OpenShift Container Platform finden Sie in den Dokumenten von Red Hat OpenShift. Sie erhalten alle Vorteile eines verwalteten Service für Ihren Cluster.

Ziele

  • Anwendung im Red Hat OpenShift on IBM Cloud-Cluster bereitstellen
  • Angepasste Domäne binden
  • Protokolle und Status des Clusters überwachen
  • Red Hat OpenShift on IBM Cloud-Pods skalieren

des

  1. Der Entwickler implementiert eine Webanwendung mit dem Code aus einem fernen Git-Repository. Optional kann der Entwickler den Code auch in ein privates Git Repository auf IBM Cloud stellen.
  2. Aus dem Code wird ein Container-Image erstellt.
  3. Das Image wird in eine lokale Container-Registry, die mit dem Cluster geliefert wird, oder in einen Namespace im IBM Cloud Container Registry übertragen.
  4. Die Anwendung wird auf einem Red Hat OpenShift on IBM Cloud-Cluster bereitgestellt, indem das Image gezogen wird.
  5. Benutzer greifen über eine öffentliche Route auf die Anwendung zu.

Vorbereitende Schritte

Für dieses Lernprogramm ist Folgendes erforderlich:

  • IBM Cloud CLI,
    • IBM Cloud Kubernetes Service-Plug-in (kubernetes-service)
    • (Optional) Container Registry-Plug-in (container-registry)
  • Docker-Engine
  • oc für die Interaktion mit Red Hat OpenShift on IBM Cloud,
  • git , um das Quellcode-Repository zu klonen,
  • (optional) IBM Cloud GitLab konfiguriert mit Ihrem SSH-Schlüssel. Lesen Sie die Anweisungen in den Abschnitten Generate an SSH key pair und Add an SSH key to your GitLab account der -Dokumentation hier.

Anweisungen zum Herunterladen und Installieren dieser Tools für Ihre Betriebsumgebung finden Sie in der Anleitung zur Einführung in die Lernprogramme.

Um die Installation dieser Tools zu vermeiden, können Sie Cloud Shell über die IBM Cloud-Konsole verwenden. Verwenden Sie oc version, um sicherzustellen, dass die Version der Red Hat OpenShift on IBM Cloud-CLI Ihrer Clusterversion entspricht (4.13.x). Wenn diese nicht übereinstimmt, installieren Sie die übereinstimmende Version, indem Sie diese Anweisungen befolgen.

Darüber hinaus muss ein Registry-Namensbereich eingerichtet werden.

Red Hat OpenShift on IBM Cloud-Cluster erstellen

Mit Red Hat OpenShift on IBM Cloud haben Sie eine schnelle und sichere Möglichkeit zur Containerisierung und Bereitstellung von Unternehmens-Workloads auf Kubernetes Clustern. Red Hat OpenShift on IBM Cloud clusters baut auf Kubernetes Container-Orchestrierung auf, die Konsistenz und Flexibilität für Ihren Entwicklungslebenszyklus bietet.

In diesem Abschnitt stellen Sie einen Red Hat OpenShift on IBM Cloud-Cluster in einer (1) Zone mit zwei (2) Workerknoten bereit:

  1. Erstellen Sie einen Red Hat OpenShift on IBM Cloud-Cluster aus dem IBM Cloud®-Katalog.
  2. Wählen Sie unter Infrastruktur VPC oder Klassisch aus.
    • Für Red Hat OpenShift on IBM Cloud auf einer VPC-Infrastruktur müssen Sie vor der Erstellung des Clusters eine VPC und ein Subnetz erstellen. Erstellen oder verwenden Sie eine vorhandene VPC unter Berücksichtigung der folgenden Anforderungen:
      • Ein Teilnetz, das für dieses Lernprogramm verwendet werden kann. Notieren Sie die Zone und den Namen des Teilnetzes.
      • Dem Teilnetz ist ein öffentliches Gateway zugeordnet. Weitere Informationen finden Sie unter VPC-Cluster erstellen.
  3. Gehen Sie unter Standort wie folgt vor:
    • Für die Red Hat OpenShift on IBM Cloud on VPC-Infrastruktur:
      • Inaktivieren Sie die nicht zutreffenden Zonen und Teilnetze.
      • Überprüfen Sie in der gewünschten Zone den gewünschten Teilnetznamen; falls dieser nicht vorhanden ist, klicken Sie auf das Bearbeitungssymbol (Stiftsymbol), um den gewünschten Teilnetznamen auszuwählen.
    • Für Red Hat OpenShift on IBM Cloud in der klassischen Infrastruktur:
      • Wählen Sie eine Ressourcengruppe aus.
      • Wählen Sie eine Geographie aus.
      • Wählen Sie Einzelzone für die Verfügbarkeit aus.
      • Wählen Sie eine Worker-Zone.
      • Weitere Details finden Sie in den Anweisungen zum Erstellen klassischer Cluster.
  4. Legen Sie die OpenShift-Version auf 4.13.x fest (Hinweis: Wenn Sie eine Version von 4.15.xx und höher verwenden, müssen Sie den Schutz ausgehender Datenverkehr inaktivieren).
  5. Wählen Sie Ihre Lizenz fürOpenShift Container Platform (OCP) aus.
  6. Unter Worker-Pool:
    • Wählen Sie 4 vCPUs 16 GB Arbeitsspeicher als Variante aus.
    • Wählen Sie für dieses Tutorial 2 Worker-Knoten pro Rechenzentrum aus (wenn Sie die klassische Infrastruktur gewählt haben: Verschlüsseln der lokalen Festplatte lassen).
  7. Gehen Sie unter Clusterdetails wie folgt vor:
    • Setzen Sie den Clusternamen auf myopenshiftcluster.
    • Wählen Sie eine Ressourcengruppe aus (wenn Sie die VPC-Infrastruktur ausgewählt haben).
  8. Klicken Sie auf Erstellen, um einen Red Hat OpenShift on IBM Cloud-Cluster bereitzustellen.

Notieren Sie sich die oben ausgewählte Ressourcengruppe. Dieselbe Ressourcengruppe wird für alle Ressourcen in diesem Lab verwendet.

CLI konfigurieren

In diesem Schritt konfigurieren Sie oc so, dass auf Ihren neu erstellten Cluster verwiesen wird. Die Red Hat OpenShift on IBM Cloud Container Platform CLI bietet Befehle für die Verwaltung Ihrer Anwendungen sowie Tools auf niedrigerer Ebene für die Interaktion mit den einzelnen Komponenten Ihres Systems. Die Befehlszeilenschnittstelle bzw. CLI kann über den Befehl oc aufgerufen werden.

  1. Wenn der Cluster bereit ist, klicken Sie auf OpenShift web console, um die Konsole zu öffnen.
  2. Klicken Sie in der Webkonsole im Dropdown-Menü oben rechts auf der Seite auf Anmeldebefehl kopieren und klicken Sie dann auf den Link Token anzeigen.
  3. Kopieren Sie den Text, den Sie unter Mit diesem Token anmelden finden.
  4. Nachdem Sie sich mit dem Befehl oc login angemeldet haben, führen Sie den folgenden Befehl aus, um alle Namespaces in Ihrem Cluster anzuzeigen.
    oc get ns
    

Neue Red Hat OpenShift on IBM Cloud-Anwendung erstellen

In diesem Abschnitt werden Sie ein Red Hat OpenShift on IBM Cloud-Projekt erstellen und dann eine Anwendung aus einem GitHub-Repositorybereitstellen. Der Code für diese Anwendung ist eine einfache Node.js-Landing-Page und zwei API-Endpunkte als Einstieg. Sie können diese Anwendung immer auf der Basis Ihrer eigenen Explorationsanforderungen erweitern.

Projekt erstellen

Ein Kubernetes-Namensbereich stellt einen Mechanismus bereit, um den Geltungsbereich von Ressourcen in einem Cluster zu definieren. In Red Hat OpenShift on IBM Cloud ist ein Projekt ein Kubernetes-Namensbereich mit zusätzlichen Annotationen.

  1. Definieren Sie eine Umgebungsvariable mit dem Namen MYPROJECT und legen Sie den Anwendungsnamen fest, indem Sie <your-initials> durch Ihre eigenen Initialen ersetzen:
    export MYPROJECT=<your-initials>-openshiftapp
    
  2. Erstellen Sie ein neues Projekt.
    oc new-project $MYPROJECT
    
    Nach der Erstellung eines Projekts mit dem obigen Befehl werden Sie automatisch zu diesem Projekt gewechselt und alle nachfolgenden Befehle werden im Kontext dieses Projekts ausgeführt. Wenn Sie zu einem späteren Zeitpunkt zwischen Projekten wechseln oder zu diesem Projekt zurückkehren müssen, verwenden Sie den Befehl oc project $MYPROJECT.

Stellt eine Anwendung bereit

Mit dem Befehl oc new-app können Sie Anwendungen aus dem Quellcode in einem lokalen oder fernen Git-Repository erstellen.

  1. Erstellen Sie mithilfe der Buildstrategie docker eine Anwendung, um ein Containerbild aus einer Dockerfile im Repository zu erstellen. Zur Vereinfachung stellen Sie den Anwendungsnamen auf den Projektnamen.

    oc new-app https://github.com/IBM-Cloud/openshift-node-app --name=$MYPROJECT --strategy=docker --as-deployment-config
    

    Wenn eine Jenkins-Datei im Stammverzeichnis oder im angegebenen Kontextverzeichnis des Quellenrepositorys vorhanden ist, wenn Sie eine neue Anwendung erstellen, generiert Red Hat OpenShift on IBM Cloud eine Buildstrategie pipeline. Andernfalls wird eine source-Erstellungsstrategie generiert. Sie können die Buildstrategie jederzeit überschreiben, indem Sie das Flag --strategy setzen.

  2. Führen Sie den folgenden Befehl aus, um die Erstellung des Builder-Container-Images und das Pushen auf die interne Red Hat OpenShift on IBM Cloud Container Registry (OCR) zu überprüfen.

    oc logs -f buildconfig/$MYPROJECT
    

    Für Ihren Cluster ist die interne Red Hat OpenShift on IBM Cloud Container Registry eingerichtet, d. h. Red Hat OpenShift on IBM Cloud kann den Anwendungslebenszyklus aus dem Cluster heraus automatisch erstellen, bereitstellen und verwalten.

  3. Warten Sie, bis die Erstellung erfolgreich war und das Image übertragen wurde. Sie können den Status der Implementierung und des Service mit dem folgenden Befehl überprüfen.

    oc status
    

Zugriff auf die Anwendung über die von IBM bereitgestellte Domain

Um auf die Anwendung zuzugreifen, müssen Sie eine Route erstellen. Eine Route kündigt Ihren Service der Welt an.

  1. Erstellen Sie eine Route, indem Sie den folgenden Befehl in einem Terminal ausführen.

    oc expose service/$MYPROJECT
    
  2. Sie können auf die Anwendung über eine von IBM bereitgestellte Domain zugreifen. Führen Sie den folgenden Befehl aus, um URL zu erhalten.

    oc get route/$MYPROJECT
    
  3. Kopieren Sie den Wert für den Hostnamen unter HOST/PORT-Wert und fügen Sie URL in einen Browser ein, um Ihre Anwendung unter http://<hostname> in Aktion zu sehen. Achten Sie darauf, http in URL zu verwenden.

  4. Setzen Sie eine Umgebungsvariable, die auf den Hostnamen zeigt.

    export HOST=<hostname>
    

Standardroute für die von IBM bereitgestellte Domäne sichern

  1. Zum Erstellen einer geschützten HTTPS-Route, die mit dem Standardzertifikat für Red Hat OpenShift on IBM Cloud verschlüsselt ist, können Sie den Befehl create route verwenden.
    oc create route edge $MYPROJECT-https --service=$MYPROJECT --port=3000
    
  2. Führen Sie für die HTTPS-Host-URL den Befehl oc get routes aus. Kopieren Sie die URL unter Angabe von HTTPS (https://<HOST>) neben der Route $MYPROJECT-https und fügen Sie sie in die Adresszeile eines Browsers ein. Dieses Mal können Sie https in URL verwenden.

App überwachen

In diesem Abschnitt erfahren Sie, wie Sie den Zustand und die Leistung Ihrer Anwendung überwachen. OpenShift Container Platform wird mit einem vorkonfigurierten und sich selbst aktualisierenden Überwachungs-und Alertingstack ausgeliefert.

  1. Führen Sie den Befehl mit URL von einem Terminal aus, um eine Last zu erzeugen. Der Befehl sendet endlos Anforderungen an die Anwendung.
    while sleep 1; do curl --max-time 2 -s http://$HOST/load/50; done
    
  2. Wechseln Sie in der OpenShift-Webkonsole zur Ansicht Administrator.
  3. Wählen Sie unter Beobachten Metriken aus.
  4. Geben Sie im Ausdrucksfeld den folgenden Ausdruck ein, ersetzen Sie <MYPROJECT> durch Ihren Projektnamen und klicken Sie auf Abfragen ausführen, um die gesamte Container-CPU-Auslastung in Sekunden in einem Diagramm anzuzeigen.
    sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{namespace="<MYPROJECT>"}) by (container)
    
  5. Wählen Sie unter Beobachten Dashboards aus.
  6. Klicken Sie auf die Dropdown-Liste Dashboard und wählen Sie Kubernetes /Compute Resources/Namespace (Workloads) aus.
  7. Ändern Sie Namensbereich in Ihr Projekt.
  8. Setzen Sie Zeitbereich auf Letzte 5 Minuten.
  9. Prüfen Sie die CPU-Auslastung und die Hauptspeicherbelegung.
  10. Stoppen Sie das obige Script mit control+C.
  11. Zum Protokollieren können Sie den integrierten Befehl oc logs verwenden. Überprüfen Sie die Anzeigeprotokolle für eine Ressource, um mehr über die Verwendung von oc logs zu erfahren.

Sie können auch IBM Cloud Logs- und IBM Cloud Monitoring-Services bereitstellen und verwenden, um Ihre Red Hat OpenShift on IBM Cloud-Anwendung zu protokollieren und zu überwachen. Folgen Sie den Anweisungen unter diesem Link, um die Protokollierungs- und Überwachungs-Add-ons zur Überwachung des Clusterzustands einzurichten.

App skalieren

In diesem Abschnitt erfahren Sie, wie Sie Ihre Anwendung manuell und automatisch skalieren.

Manuelle Skalierung

  1. Sie können die manuelle Skalierung Ihrer Pods mit dem Befehl oc scale erzielen. Durch den Befehl wird eine neue Größe für eine Bereitstellungskonfiguration oder einen Replikationscontroller festgelegt.
    oc scale dc/$MYPROJECT --replicas=2
    
  2. Durch Ausführen des Befehls oc get pods können Sie sehen, dass ein neuer Pod eingerichtet wird.
  3. Führen Sie den Schritt Überwachung erneut aus, um die aktualisierten Metriken anzuzeigen.

Automatische Skalierung

Sie können einen horizontalen Pod-Autoscaler (HPA, Horizontal Pod Autoscaler) verwenden, um anzugeben, wie Red Hat OpenShift on IBM Cloud die Skalierung einer Bereitstellungskonfiguration (dc, deployment configuration) oder eines Replikationscontrollers (rc, replication controller) auf Grundlage der von den Pods, die zu dieser dc oder diesem rc gehören, erfassten Metriken erhöhen oder verringern soll.

  1. Bevor Sie die automatische Skalierung für Ihre Pods einrichten können, müssen Sie zunächst Ressourcenbegrenzungen für die Pods festlegen, die im Cluster ausgeführt werden. Begrenzungen ermöglichen es Ihnen, die Mindest- und Höchstwerte für CPU und Speicherbelegung für einen Pod auszuwählen. Sie können die Begrenzungen und Anforderungen für einen Container mit dem Befehl oc set resources festlegen.
    oc set resources dc/$MYPROJECT --limits=cpu=250m,memory=512Mi --requests=cpu=100m,memory=256Mi
    
    Führen Sie zur Überprüfung den Befehl oc describe dc/$MYPROJECT aus und suchen Sie nach Limits (Begrenzungen) und Requests (Anforderungen).
  2. Um einen Autoscaler zu erstellen, müssen Sie den Befehl oc autoscale sowohl mit den oberen (max) und unteren (min) Begrenzungen für die Anzahl der Pods ausführen, die vom Autoscaler festgelegt werden können, als auch mit dem Ziel für die durchschnittliche CPU-Auslastung über alle Pods (dargestellt als Prozentsatz der angeforderten CPU) ausführen. Legen Sie zum Testen --cpu-percent auf 5 % fest.
    oc autoscale dc/$MYPROJECT \
     --min=1 \
     --max=5 \
     --cpu-percent=5
    
  3. Führen Sie den Schritt Überwachung erneut aus, um die Arbeitslast für die Anwendung zu generieren.
  4. Sie können sehen, dass neue Pods bereitgestellt werden, indem Sie den Befehl oc get pods --watch ausführen oder indem Sie die Anwendung in der Webkonsole anzeigen.
  5. Entfernen Sie den Autoscaler:
    oc delete hpa/$MYPROJECT
    

(Optional) Containerbild erstellen und per Push-Operation in Container Registry übertragen

In diesem Abschnitt erfahren Sie, wie Sie eine ferne private Container Registry verwenden, um die erstellten Container-Images zu speichern.

Von IBM Cloud Container Registry wird ein hoch verfügbares, skalierbares und verschlüsseltes Multi-Tenant-Registry für private Images bereitgestellt, das von IBM gehostet und verwaltet wird. Sie können IBM Cloud Container Registry verwenden, indem Sie Ihren eigenen Imagenamensbereich einrichten und Container-Images per Push-Operation in Ihren Namensbereich übertragen.

  1. Um Ihre Container Registry zu identifizieren, führen Sie URL aus:

    ibmcloud cr region
    
  2. Definieren Sie eine Umgebungsvariable namens MYREGISTRY, die auf die Registrierung verweist, z. B:

    export MYREGISTRY=us.icr.io
    
  3. Wählen Sie einen Ihrer vorhandenen Namensbereiche der Registry aus oder erstellen Sie einen neuen Namensbereich der Registry. Geben Sie Folgendes ein, um bereits vorhandene Namensbereiche aufzulisten:

    ibmcloud cr namespaces
    

    Geben Sie Folgendes ein, um einen neuen Namensbereich zu erstellen:

    ibmcloud cr namespace-add <REGISTRY_NAMESPACE>
    
  4. Definieren Sie eine Umgebungsvariable mit dem Namen MYNAMESPACE, die auf den Namensbereich der Registry verweist:

    export MYNAMESPACE=<REGISTRY_NAMESPACE>
    
  5. Definieren Sie eine Umgebungsvariable namens API_KEY, die auf einen IBM Cloud IAM-API-Schlüssel verweist:

    export API_KEY=<YOUR_API_KEY>
    

    Informationen zum Erstellen eines API-Schlüssels finden Sie in diesem Link.

  6. Erstellen Sie einen geheimen Schlüssel, um den Zugriff auf Ihre Registry-Namensbereiche zu automatisieren und das generierte Container-Image des Builders per Push-Operation in Container Registry zu laden:

    oc create secret docker-registry push-secret --docker-username=iamapikey --docker-password=$API_KEY --docker-server=$MYREGISTRY
    
  7. Kopieren Sie das Image-Pull-Geheimnis aus dem Projekt default und fügen Sie es in Ihr Projekt ein:

    oc get secret all-icr-io -n default -o yaml | sed 's/default/'$MYPROJECT'/g' | oc -n $MYPROJECT create -f -
    
  8. Damit das Geheimnis der Bildabrufe wirksam wird, müssen Sie es im Dienstkonto default hinzufügen:

    oc secrets link serviceaccount/default secrets/all-icr-io --for=pull
    

Beispielanwendung klonen

In diesem Abschnitt werden Sie ein GitHub-Repository klonen, das mit einer Vorlagendatei und einem Shell-Script geliefert wird, um eine yaml-Datei aus Ihren zuvor erstellten Umgebungsvariablen zu erstellen. Die generierte Datei wird verwendet, um ein Container-Image zu erstellen, das Image in die private Container-Registry zu übertragen und eine neue Anwendung bereitzustellen.

  1. Führen Sie in einem Terminal den folgenden Befehl aus, um das Repository GitHub auf Ihren Rechner zu klonen:
    git clone https://github.com/IBM-Cloud/openshift-node-app
    
  2. Wechseln Sie in das Anwendungsverzeichnis:
    cd openshift-node-app
    

'BuildConfig' aktualisieren und Builder-Image mit einer Push-Operation an Container Registry übertragen

In diesem Schritt führen Sie ein Script aus, um die Abschnitte der Datei openshift.template.yaml zu aktualisieren und eine neue yaml-Datei zu generieren, die auf Ihren Namensbereich Container Registry verweist.

  1. Führen Sie das folgende bash-Script aus, um die Platzhalter in der Datei openshift.template.yaml zu aktualisieren und um die Datei openshift_private_registry.yaml zu generieren.

    ./generate_yaml.sh use_private_registry
    
  2. Führen Sie den Exportbefehl aus der Ausgabe aus, um die vorhandene Umgebungsvariable MYPROJECT mit dem neuen Anwendungsnamen zu definieren. Führen Sie echo $MYPROJECT aus, um den neuen Anwendungsnamen anzuzeigen.

  3. Überprüfen Sie optional die generierte Datei openshift_private_registry.yaml, um festzustellen, ob alle Platzhalter mit den entsprechenden Umgebungsvariablen aktualisiert werden. Nachstehend finden Sie 3 Stellen, an denen Sie eine schnelle Überprüfung vornehmen können. Sie können zum nächsten Abschnitt springen.

  4. Optional Suchen Sie das ImageStream objekt, dessen Namensattribut auf Ihr Projekt gesetzt ist ($MYPROJECT), und prüfen Sie, ob die Platzhalter $MYREGISTRY,$MYNAMESPACE und $MYPROJECT unter der dockerImageRepository Definition von spec aktualisiert werden

    -
    apiVersion: image.openshift.io/v1
    kind: ImageStream
    metadata:
      annotations:
        openshift.io/generated-by: OpenShiftNewApp
      creationTimestamp: null
      labels:
        app: $MYPROJECT
        app.kubernetes.io/component: $MYPROJECT
        app.kubernetes.io/instance: $MYPROJECT
      name: $MYPROJECT
    spec:
      dockerImageRepository: $MYREGISTRY/$MYNAMESPACE/$MYPROJECT
      lookupPolicy:
        local: false
    status:
        dockerImageRepository: ""
    

    Ein Image-Stream und die ihm zugeordneten Tags liefern eine Abstraktion zum Verweisen auf Container-Images aus Red Hat OpenShift on IBM Cloud Container Platform.

  5. Optional Überprüfen Sie, ob unter spec im Abschnitt BuildConfig für den Wert für die Ausgabe (output) als 'kind' DockerImage angegeben ist und die Platzhalter unter name aktualisiert sind.

    spec:
      nodeSelector: null
      output:
        to:
          kind: DockerImage
          name: $MYREGISTRY/$MYNAMESPACE/$MYPROJECT:latest
        pushSecret:
          name: push-secret
    

    Ein 'Build' bezeichnet den Prozess, bei dem Eingabeparameter in ein daraus resultierendes Objekt umgewandelt werden. Meistens wird dieser Prozess verwendet, um Eingabeparameter oder Quellcode in ein ausführbares Image umzuwandeln. Ein BuildConfig-Objekt ist die Definition des gesamten Erstellungsprozesses (Buildvorgangs).

  6. Optional Suchen Sie nach containers und überprüfen Sie die Werte für image und name

    containers:
    - image: $MYREGISTRY/$MYNAMESPACE/$MYPROJECT:latest
      name: $MYPROJECT
    
  7. Falls Sie Aktualisierungen vorgenommen haben, speichern Sie die YAML-Datei.

Anwendung mit IBM Cloud Container Registry implementieren

In diesem Abschnitt implementieren Sie die Anwendung mit der generierten Datei openshift_private_registry.yaml in dem Cluster. Nach der erfolgten Bereitstellung greifen Sie auf die Anwendung zu, indem Sie eine Route erstellen.

  1. Erstellen Sie eine neue OpenShift Anwendung zusammen mit einer buildconfig(bc), deploymentconfig(dc), service(svc), imagestream(is) unter Verwendung der aktualisierten yaml.

    oc apply -f openshift_private_registry.yaml
    
  2. Um die Erstellung des Builder-Container-Images und die Übertragung auf Container Registry zu überprüfen, führen Sie den folgenden Befehl aus.

    oc logs -f bc/$PRIVREG
    

    In den Protokollen sollten Sie die folgende Meldung sehen, wenn das Container-Image in die private Container-Registrierung übertragen wurde.

    Pushing image us.icr.io/mods15/vmac-openshift-app-registry:latest ...
    Getting image source signatures
    Copying blob sha256:9d038e1c7afbe92c29313557c02110e8fb796818ebb78441c68929381103a94b
    Copying blob sha256:61c671f49591a059c9b6728a9f84c16f5b00126470112ee9c9f9e01dbbfcc3ea
    Copying blob sha256:e2787650308235c87eff7d2b88c3ab217e84b74a3fa9696103bd46bb99068c7a
    Copying blob sha256:dcef409117430ed9906a59ad0a3ea0752061fbf8a9e544f4edd77667a25d85ae
    Copying blob sha256:a1f889dd610c6510c7fc091a51c247463f3cc9a7c67bdc397c9632168808f7d2
    Copying blob sha256:bd278801acd18ada10f43b732113a6fffc163011862ea6cde729f8dc59e64222
    Copying blob sha256:2d6c03ed5d15be86cdef7d9c0c9fea40a3f6b89662bca59680d037074f52bb38
    Copying blob sha256:fa2ef7f80d6fc9543f6eb472846931ed1cec2b5f776d1b67bcb1b9942e1a947e
    Copying blob sha256:ff5a4e4d3690ccc931900b63714d326cc53a58e644f8d0a4f06bf8c62f11c5c7
    Copying config sha256:01aa1ebb7be74529867106100c4e699ca2ae87f8242460771527f772e6a3d174
    Writing manifest to image destination
    Storing signatures
    Successfully pushed us.icr.io/mods15/vmac-openshift-app-registry@sha256:6847b889397704b9fb8c3122c84b505c3dc5f99a0669fb69f534d3504eec385d
    Push successful
    
  3. Sie können den Status der Bereitstellung und des Dienstes überprüfen.

    oc status
    
  4. Importieren Sie den neuesten Image-Stream manuell, damit die Bereitstellung so schnell wie möglich erfolgt.

    oc import-image $PRIVREG
    

    Sie können den Befehl auch verwenden, wenn die Bereitstellung mehr Zeit in Anspruch nimmt. Weitere Informationen finden Sie unter diesem Link.

  5. Machen Sie den Service zugänglich, um eine neue Route zu erstellen.

    oc expose service/$PRIVREG
    
  6. Sie können auf die Anwendung über die von IBM bereitgestellte Domain zugreifen. Führen Sie den folgenden Befehl aus, um URL zu erhalten.

    oc get route/$PRIVREG
    
  7. Kopieren Sie den Wert für den Hostnamen unter HOST/PORT-Wert und fügen Sie URL in einen Browser ein, um Ihre Anwendung unter http://<hostname> in Aktion zu sehen. Achten Sie darauf, http in URL zu verwenden.

    Sie sollten dieselbe Anwendung sehen, die nun auf einer anderen Route verfügbar ist und mit dem in einer privaten Container-Registry gespeicherten Container-Image implementiert wurde.

(Optional) Übertragen Sie den Code mit einer Push-Operation in ein privates IBM Cloud-Git-Repository.

In diesem Schritt erstellen Sie ein privates Repository IBM Cloud Git und pushen den Code der Beispielanwendung. Sie werden auch lernen, wie Sie die Anwendung automatisch erstellen und erneut bereitstellen können, wenn sie aktualisiert wird.

Sie müssen einen SSH-Schlüssel konfigurieren, damit der Push erfolgreich ist. Lesen Sie die Anweisungen in den Abschnitten Generate an SSH key pair und Add an SSH key to your GitLab account der Dokumentation hier

  1. Öffnen Sie in einem Browser IBM Cloud Git.

    Der oben genannte Link gilt für die Region us-south. Führen Sie für andere Regionen den Befehl ibmcloud regions aus und ersetzen Sie in der URL die Regionsangabe us-south durch den Namen der gewünschten Region.

  2. Klicken Sie auf Neues Projekt und anschließend auf Leeres Projekt erstellen. Geben Sie dann openshiftapp als Projektnamen an.

  3. Setzen Sie Sichtbarkeitsebene auf Privat.

  4. Entfernen Sie unter Projektkonfiguration das Häkchen neben Repository mit einer Readme-Datei initialisieren.

  5. Klicken Sie auf Projekt erstellen,

  6. Befolgen Sie die Anweisungen in den Abschnitten Git global setup und Push an existing Git repository, um Git einzurichten und den Beispielanwendungscode zu pushen.

  7. Sobald Sie den Code in das private Repository übertragen haben, sollten Sie den Beispielcode im Projekt sehen.

Git-Bereitstellungstoken erstellen

In diesem Abschnitt erstellen Sie ein Git-Bereitstellungstoken, mit dem der Lesezugriff auf das Repository ermöglicht wird.

Bereitstellungstoken generieren:

  1. Klicken Sie im Navigationsbereich der Seite Git repo auf Einstellungen > Repository.
  2. Klicken Sie neben Bereitstellungstoken auf Erweitern.
    1. Geben Sie in das Feld Name foropenshift ein und wählen Sie dann read_repository unter Scopes aus. Klicken Sie abschließend auf Bereitstellungstoken erstellen.
    2. Speichern Sie die als Benutzername und Kennwort generierten Werte für zukünftige Referenzzwecke.
  3. Klicken Sie im Navigationsbereich auf Projektübersicht, dann auf Klonen und kopieren Sie Klonen mit HTTPS URL. Speichern Sie die URL als Referenz für zukünftige Bedarfsfälle.
  4. Definieren Sie Umgebungsvariablen für den Benutzernamen, das Kennwort und die URL für das private Git-Repository, die mit der YAML-Datei später im Lernprogramm verwendet werden sollen
    export GIT_TOKEN_USERNAME=<PRIVATE_GIT_DEPLOY_TOKEN_USERNAME>
    export GIT_TOKEN_PASSWORD=<PRIVATE_GIT_DEPLOY_TOKEN_PASSWORD>
    export REPO_URL=<PRIVATE_GIT_REPO_URL>
    

Implementieren Sie eine neue Anwendung mit der privaten Registry und dem Code aus dem privaten Repository.

  1. Führen Sie das folgende bash-Script aus, um die Platzhalter in der Datei openshift.template.yaml zu aktualisieren und um die Datei openshift_private_repository.yaml zu generieren.

    ./generate_yaml.sh use_private_repository
    
  2. Führen Sie den Exportbefehl aus der Ausgabe aus, um die vorhandene Umgebungsvariable MYPROJECT mit dem neuen Anwendungsnamen zu definieren.

  3. Zusätzlich zu den Platzhaltern der privaten Container-Registry ersetzt das Script auch die REPO_URL in der BuildConfig-Spezifikation durch die Umgebungsvariablen, die Sie in dem oben genannten Schritt festgelegt haben.

     source:
       git:
         uri: $REPO_URL
       type: Git
    
  4. Erstellen Sie eine neue openshift-Anwendung zusammen mit einer buildconfig(bc), deploymentconfig(dc), service(svc), imagestream(is) unter Verwendung der aktualisierten yaml

    oc apply -f openshift_private_repository.yaml
    
  5. Sie können die Builder-Protokolle überprüfen.

    oc logs -f bc/$PRIVREPO
    
  6. Sie können den Status der Bereitstellung und des Dienstes mit überprüfen.

    oc status
    
  7. Importieren Sie den neuesten Image-Stream manuell, damit die Bereitstellung so schnell wie möglich erfolgt.

    oc import-image $PRIVREPO
    
  8. Machen Sie den Service zugänglich, um eine neue Route zu erstellen.

    oc expose service/$PRIVREPO
    
  9. Sie können auf die Anwendung über die von IBM bereitgestellte Domain zugreifen. Führen Sie den folgenden Befehl aus, um URL zu erhalten.

    oc get route/$PRIVREPO
    
  10. Kopieren Sie den Wert für den Hostnamen unter HOST/PORT-Wert und fügen Sie URL in einen Browser ein, um Ihre Anwendung unter http://<hostname> in Aktion zu sehen. Achten Sie darauf, http in URL zu verwenden.

    Eine neue Anwendung wird mit dem Code aus dem privaten Git-Repository und dem Container-Image aus dem privaten Registry-Namespace implementiert.

Aktualisieren Sie die Anwendung und setzen Sie sie erneut ein

In diesem Schritt automatisieren Sie den Build- und den Bereitstellungsprozess. Wenn Sie die Anwendung aktualisieren und die Änderungen mit Push-Operation an das private Repository übertragen, wird ein neuer Build ausgeführt, der eine neue Version des Container-Image generiert. Dieses Image wird dann automatisch bereitgestellt.

  1. Sie erstellen einen neuen Webhook-Auslöser für GitLab. Mit Webhook-Auslösern können Sie durch Senden einer Anforderung an den API-Endpunkt von Red Hat OpenShift on IBM Cloud Container Platform die Erstellung eines neuen Builds auslösen. Sie können diese Auslöser mit GitHub-, GitLab-, Bitbucket- oder mit generischen Webhooks definieren.

    oc set triggers bc $PRIVREPO --from-gitlab
    
  2. Um einen Webhook auf dem GitLab-Repository hinzufügen zu können, benötigen Sie eine URL und einen geheimen Schlüssel.

    • Geben Sie für die GitLab-URL für den Webhook Folgendes ein:
      oc describe bc/$PRIVREPO | grep -A 1 "GitLab"
      
    • Geben Sie für den geheimen Schlüssel, der in der Webhook-URL übergeben werden soll, Folgendes ein:
      oc get bc/$PRIVREPO -o yaml | grep -A 3 "\- gitlab"
      
    • Ersetzen Sie <secret> in der GitLab-URL für den Webhook durch den Wert des geheimen Schlüssels unter gitlab aus der Befehlsausgabe oben.
  3. Öffnen Sie Ihr privates Git Repo in einem Browser über den Link Git repo HTTPS und klicken Sie auf Einstellungen und dann auf Webhooks.

  4. Fügen Sie URL ein, wählen Sie "Push-Ereignisse" als Auslöser und klicken Sie auf "Webhook hinzufügen ". Die Nachricht Webhook was created wird angezeigt.

  5. Aktualisieren Sie das Element 'ImagePolicy' des Image-Streams, um für Container Registry in geplanten Intervallen Abfragen zum Synchronisieren der Metadaten von Tags und Images durchzuführen. Dadurch wird die Definition von tags aktualisiert.

    oc tag $MYREGISTRY/$MYNAMESPACE/${PRIVREPO}:latest ${PRIVREPO}:latest --scheduled=true
    
  6. Öffnen Sie das geklonte Repository in einer IDE und aktualisieren Sie den Tag h1 der lokalen public/index.html datei zu aktualisieren und ihn in Congratulations! <insert your name> zu ändern.

  7. Speichern Sie den Code und übertragen Sie ihn in das Repository.

     git add public/index.html
    
     git commit -m "Updated with my name"
    
     git push -u origin master
    
  8. Sie können den Fortschritt des Builds und der Bereitstellung mit dem Befehl oc status prüfen. Nach der erfolgreichen Durchführung der Bereitstellung sollten Sie die Anzeige der HOST-Adresse für die Route aktualisieren, um die aktualisierte Web-App anzuzeigen.

    In manchen Fällen benötigt die Bereitstellung bis zu 15 Minuten für den Import des aktuellsten Image-Streams. Sie können entweder warten oder manuell mit dem Befehl oc import-image $PRIVREPO importieren. Unter diesem Link finden Sie weitere Informationen.

(Optional) Verwenden Sie Ihre eigene angepasste Domäne.

Für diesen Abschnitt ist es erforderlich, dass Sie Eigner einer angepassten Domäne sind und die DNS-Datensätze der Domäne ändern können. Sie müssen einen CNAME-Datensatz erstellen, der auf die von IBM bereitgestellte Domäne verweist.

Schritte zum Einrichten des CNAME-Datensatzes entsprechend dem verwendeten DNS-Provider. Fügen Sie unter der DNS-Verwaltung/Zone Ihrer Domäne einen neuen CNAME-Datensatz hinzu, setzen Sie Host(Name) auf eine beliebige Unterdomäne openshiftapp sowie Points to auf die von IBM bereitgestellte Domäne ohne HTTP oder HTTPS fest.

Mit HTTP

  1. Erstellen Sie eine Route, die den Service unter einem Hostnamen zugänglich macht, indem Sie <HOSTNAME> durch Ihren Hostnamen (z. B. www.example.com oder openshiftapp.example.com) ersetzen, sodass externe Clients anhand des Namens darauf zugreifen können.
    oc expose svc/$PRIVREPO --hostname=<HOSTNAME> --name=$PRIVREPO-domain --port=3000
    
  2. Greifen Sie unter http://<HOSTNAME>/ auf die Anwendung zu.

Mit HTTPS

  1. Zum Erstellen einer sicheren HTTPS-Route können Sie Ihre eigenen Zertifikats- und Schlüsseldateien von einer Zertifizierungsstelle wie Let's Encrypt verwenden oder diese über Secrets Manager bestellen. Übergeben Sie sie mit dem Befehl create route.
    oc create route edge $PRIVREPO-httpsca --service=$PRIVREPO --cert=example.pem --key=example.key --hostname=<www.HOSTNAME> --port=3000
    
    Hier wurde die Beendigung mit Edge verwendet. Informationen zu anderen Beendigungstypen wie Durchgriff und erneute Verschlüsselung erhalten Sie, wenn Sie den Befehl oc create route --help ausführen.

Ressourcen entfernen

  • Löschen Sie alle Ressourcenobjekte, die für eine Anwendung spezifisch sind:

    oc delete all --selector app=$PRIVREPO
    oc delete all --selector app=$PRIVREG
    oc delete all --selector app=$MYPROJECT
    

    Führen Sie zum Auflisten der Anwendungsnamen im Projekt den folgenden Befehl aus: oc get svc | awk '{print $1}'

  • Löschen Sie das Projekt:

    oc delete project $MYPROJECT
    
  • Löschen Sie das Anwendungsrepository:

    • Klicken Sie im Navigationsfenster der Repository-Seite Git auf Einstellungen > Allgemein.
    • Klicken Sie neben Erweitert auf Erweitern.
    • Klicken Sie auf Projekt löschen und bestätigen Sie das Löschen des Projekts.
  • Container-Image (s) aus Container Registrylöschen:

    • Navigieren Sie in Ihrem Browser zur Repository-Seite für Container Registry.
    • Wählen Sie die Images aus, die in diesem Lernprogramm erstellt wurden, und löschen Sie sie.
  • Löschen Sie den erstellten Cluster.

Zugehörige Inhalte