Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts 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 spezifische Werte für Ihre Cloud-Umgebung.
Longhorn für Kubernetes auf OKE bereitstellen
Einführung
Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) ist ein vollständig verwalteter, skalierbarer und hoch verfügbarer Service, mit dem Sie Ihre Containeranwendungen in der Cloud bereitstellen können. Sie geben die Compute-Ressourcen an, die Ihre Anwendungen benötigen, und OKE stellt sie in Oracle Cloud Infrastructure (OCI) in einem vorhandenen OCI-Mandanten bereit. Container Engine for Kubernetes verwendet Kubernetes - das Open-Source-System zur Automatisierung von Deployment, Skalierung und Verwaltung containerisierter Anwendungen auf mehreren Hostclustern.
Der OCI Block Volume-Service bietet persistenten, dauerhaften und leistungsstarken Blockspeicher für Ihre Daten. OKE kann die Block-Volumes als persistente Datenträger für Ihre Kubernetes-Umgebung verwenden und wird vollständig von OKE verwaltet. Wenn Sie die vollständige Kontrolle über die Persistent Storage-Lösung haben möchten, können Sie Longhorn auf OKE bereitstellen und als Speicherklasse verwenden. Sie erhalten vollständige Kontrolle über persistente Volumes, Skalierung, Backups und Planung.
Zielsetzung
- Verwenden Sie Longhorn als Speicherlösung auf OKE.
Voraussetzungen
-
Zugriff auf einen Oracle Cloud-Mandanten.
-
Ein in Ihrem Mandanten eingerichtetes virtuelles Cloud-Netzwerk.
-
Alle erforderlichen Policys für OKE eingerichtet.
Aufgabe 1: OKE-Cluster erstellen
-
Melden Sie sich bei der OCI-Konsole an, navigieren Sie zu Oracle Container Engine for Kubernetes, und klicken Sie auf Erstellen.
-
Klicken Sie im Assistenten Cluster erstellen auf Benutzerdefinierte Erstellung.
-
Geben Sie den Clusternamen an, wählen Sie die zu verwendende Kubernetes-Version aus, und klicken Sie unten im Assistenten auf Weiter.
Hinweis: Sie müssen VCN, Subnetze und Routen einrichten, bevor Sie mit der Clustererstellung beginnen.
-
Sie können einen der Networkingtypen auswählen. Das native VCN-Netzwerk bietet eine bessere Performance. Wenn Sie VCN-natives Networking auswählen, stellen Sie sicher, dass in Ihrem Subnetz genügend IP-Adressen verfügbar sind.
-
Konfigurieren Sie den Knotenpool, und wählen Sie die gewünschten Compute-Ressourcen aus. Fügen Sie unter Erweiterte Optionen das unten angezeigte benutzerdefinierte Skript
cloud-init
ein. -
OKE bietet keine Option zum Ändern der Knotenvorlage. Um also ein Block-Volume anzuhängen, müssen Sie bei der Knoteninitialisierung ein
cloud-init
-Skript ausführen. Das Skript erstellt ein Block-Volume mit der angegebenen Größe und Performance und hängt es bei der Initialisierung an den Knoten an. -
Ändern Sie die Variablen
size_in_gbs
(Größe des Blockspeichers, der beim Initialisieren angehängt werden soll),vpus_per_gb
(vpu pro GB für den Blockspeicheranhang) undmode
(Anhangsmodus, PARA oder ISCSI) im Skript entsprechend Ihren Anforderungen.
Sie müssen eine dynamische Gruppe erstellen und dieser Gruppe Verwaltungszugriff auf Blockspeicher erteilen. Dadurch können wir die Instanz-Principal-Authentifizierung in unserem Skript verwenden.
cloud-init
-Skript:#!/bin/bash curl --fail -H "Authorization: Bearer Oracle" -L0 http://169.254.169.254/opc/v2/instance/metadata/oke_init_script | base64 --decode >/var/run/oke-init.sh bash /var/run/oke-init.sh echo "installing python3-pip , oci sdk\n" sudo yum install python3 -y sudo yum install python3-pip -y pip3 install oci pip3 install requests cat << EOF > pyscript.py #!/usr/bin/python import oci import requests size_in_gbs = 200 vpus_per_gb = 10 mode = 'PARA' device_path = "/dev/oracleoci/oraclevdb" signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner() compute_client = oci.core.ComputeClient({}, signer = signer) block_storage_client = oci.core.BlockstorageClient({}, signer = signer) def get_current_instance_details(): r = requests.get(url= 'http://169.254.169.254/opc/v1/instance') return r.json() def create_volume(block_storage, compartment_id, availability_domain, display_name: str): print("--- creating block volume ---") result = block_storage.create_volume( oci.core.models.CreateVolumeDetails( compartment_id=compartment_id, availability_domain=availability_domain, display_name=display_name, size_in_gbs = size_in_gbs, vpus_per_gb = vpus_per_gb ) ) volume = oci.wait_until( block_storage, block_storage.get_volume(result.data.id), 'lifecycle_state', 'AVAILABLE' ).data print('--- Created Volume ocid: {} ---'.format(result.data.id)) return volume def attach_volume(instance_id, volume_id,device_path): volume_attachment_response = "" if mode == 'ISCSI': print("--- Attaching block volume {} to instance {}---".format(volume_id,instance_id)) volume_attachment_response = compute_client.attach_volume( oci.core.models.AttachIScsiVolumeDetails( display_name='IscsiVolAttachment', instance_id=instance_id, volume_id=volume_id, device= device_path ) ) elif mode == 'PARA': volume_attachment_response = compute_client.attach_volume( oci.core.models.AttachParavirtualizedVolumeDetails( display_name='ParavirtualizedVolAttachment', instance_id=instance_id, volume_id=volume_id, device= device_path ) ) oci.wait_until( compute_client, compute_client.get_volume_attachment(volume_attachment_response.data.id), 'lifecycle_state', 'ATTACHED' ) print("--- Attaching complete block volume {} to instance {}---".format(volume_id,instance_id)) print(volume_attachment_response.data) # Call instance metadata uri to get current instace details instanceDetails = get_current_instance_details() print(instanceDetails) volume = create_volume(block_storage= block_storage_client, compartment_id= instanceDetails['compartmentId'], availability_domain=instanceDetails['availabilityDomain'], display_name= instanceDetails['displayName']) attach_volume(instance_id=instanceDetails['id'], volume_id=volume.id, device_path= device_path) EOF echo "running python script\n" chmod 755 pyscript.py ./pyscript.py echo "creating file system on volume\n" sudo /sbin/mkfs.ext4 /dev/oracleoci/oraclevdb echo "mounting volume\n" sudo mkdir /mnt/volume sudo mount /dev/oracleoci/oraclevdb /mnt/volume echo "adding entry to fstab\n" echo "/dev/oracleoci/oraclevdb /mnt/volume ext4 defaults,_netdev,nofail 0 2" | sudo tee -a /etc/fstab
-
-
Prüfen und klicken Sie auf Cluster erstellen, und warten Sie, bis das Cluster verfügbar ist.
-
Sobald das Cluster verfügbar ist, gehen Sie zu Knotenpools und dann zu Knoten. Sie können sehen, dass sich die Knoten im Status "Bereit" befinden, auf einen beliebigen Knoten klicken, die Seite Instanzdetails öffnen, zu angehängten Block-Volumes gehen und prüfen, ob ein Block-Volume (Größe und vpu wie im Skript
cloud-init
angegeben) an die Instanz angehängt ist.
Aufgabe 2: Longhorn einrichten
-
Sobald das Cluster verfügbar ist, können Sie mit der cloud shell auf das Cluster zugreifen, auf Auf Cluster zugreifen klicken und den Befehl in der cloud shell kopieren und ausführen.
-
Führen Sie
kubectl get node
aus, um die Liste der planbaren Knoten abzurufen. -
Damit Longhorn die angehängte Festplatte erkennt, müssen Sie den Knoten Labels und Annotationen hinzufügen, wie unter Longhorn-Standarddatenträgersetup beschrieben. Dazu erstellen Sie eine
patch.yaml
-Datei, um die Knoten zu patchen.metadata: labels: node.longhorn.io/create-default-disk: "config" annotations: node.longhorn.io/default-disks-config: '[ { "path":"/var/lib/longhorn", "allowScheduling":true }, { "path":"/mnt/volume", "allowScheduling":true } ]'
-
Führen Sie den folgenden Befehl für jeden Knoten aus.
kubectl patch node <node name> --patch-file patch.yaml
-
Führen Sie den Befehl "Description node" aus, um zu prüfen, ob die Knoten gepatcht sind.
kubectl describe node <node name>
Aufgabe 3: Longhorn installieren
-
In diesem Tutorial verwenden wir Helm, um Longhorn auf dem OKE-Cluster bereitzustellen. Befolgen Sie die Anweisungen in diesem Dokument: Mit Helm installieren.
-
Führen Sie den folgenden Befehl aus, um Longhorn bereitzustellen.
helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace --version 1.3.2 --set defaultSettings.createDefaultDiskLabeledNodes=true
Hinweis: Setzen Sie die Eigenschaft
defaultSettings.createDefaultDiskLabeledNodes
beim Deployment auf "true". Dadurch wird longhorn angewiesen, die zuvor bereitgestellte Anhängenblock-Volume-Konfiguration zu verwenden. -
Prüfen Sie, ob die Pods erstellt und ausgeführt werden.
-
Um die Benutzeroberfläche für eine bessere Ansicht von Longhorn und dessen Administration zu aktivieren, installieren Sie den Ingress-Controller wie in diesem Dokument angegeben: Beispiel: Ingress-Controller in einem Cluster einrichten.
-
Erstellen Sie eine
ingress.yaml
-Datei, um die Longhorn-UI verfügbar zu machen.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: longhorn-ingress namespace: longhorn-system annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: longhorn-frontend port: number: 80
-
Führen Sie
kubectl apply -f ingress.yaml
aus, um die Longhorn-UI mit dem Ingress-Gateway verfügbar zu machen. -
Rufen Sie die Gateway-URL ab, indem Sie den folgenden Befehl ausführen.
kubectl get ingress -n longhorn-system
. -
Öffnen Sie die IP-Adresse in einem Browser, um auf die Longhorn-Konsole zuzugreifen und zu bestätigen, dass sie live ist.
Sie können sehen, dass der Speicher verfügbar und einsatzbereit ist.
Aufgabe 4: Langhorn skalieren
Longhorn gibt Ihnen die vollständige Kontrolle über die Speicherlösung für Ihre Kubernetes-Bereitstellungen, aber die Skalierung von Longhorn ist immer noch ein manueller Prozess. Es gibt 3 Möglichkeiten, wie Sie das Longhorn-Setup skalieren können.
-
Vergrößern Sie die Größe oder die Performanceeinheiten der angehängten Block-Volumes: Bei diesem manuellen Prozess müssen Sie jedes Block-Volume einzeln skalieren und einige Skripte auf den Knoten ausführen, um den Speicher zu erweitern. Weitere Informationen finden Sie unter Volume-Größe ändern.
-
Mehr Volumes anhängen: Sie müssen Volumes manuell erstellen und an die Knoten anhängen.
-
Skalieren Sie das Cluster, indem Sie die Knoten erhöhen: Da wir bereits ein
cloud-init
-Skript bereitgestellt haben, wird das Block-Volume erstellt und an den Knoten angehängt. Der Knoten muss gepatcht werden, nachdem er bereit ist, wie in Aufgabe 2.3 beschrieben, damit Longhorn den angeschlossenen Speicher erkennt.
Hinweis: Sie können das Skript ändern, um die gewünschte Anzahl von Block-Volumes an einen einzelnen Knoten anzuhängen.
Verwandte Links
Bestätigungen
- Autor - Mayank Kakani (OCI Cloud Architect)
Weitere Lernressourcen
Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Deploy Longhorn for Kubernetes on OKE
F76576-02
December 2023
Copyright © 2023, Oracle and/or its affiliates.