Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Distribuisci Longhorn per Kubernetes su OKE
Introduzione
Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) è un servizio completamente gestito, scalabile e ad alta disponibilità che puoi utilizzare per distribuire le tue applicazioni containerizzate nel cloud. Puoi specificare le risorse di computazione richieste dalle tue applicazioni e OKE le esegue sul provisioning di Oracle Cloud Infrastructure (OCI) in una tenancy OCI esistente. Container Engine for Kubernetes utilizza Kubernetes, il sistema open source per automatizzare l'implementazione, la scalabilità e la gestione di applicazioni containerizzate tra cluster di host.
Il servizio OCI per volumi a blocchi fornisce storage a blocchi persistente, durevole e ad alte prestazioni per i dati e OKE può utilizzare i volumi a blocchi come dischi persistenti per l'ambiente Kubernetes ed è completamente gestito da OKE. Se si desidera avere il controllo completo della soluzione di storage persistente, è possibile distribuire Longhorn su OKE e utilizzarla come classe di storage. Ti offre il controllo completo sui volumi persistenti, il ridimensionamento, i backup e la pianificazione.
Obiettivo
- Distribuire e utilizzare Longhorn come soluzione di storage su OKE.
Prerequisiti
-
Accesso a una tenancy Oracle Cloud.
-
Una rete cloud virtuale impostata nella tenancy.
-
Tutti i criteri obbligatori impostati per OKE.
Task 1: creare un cluster OKE
-
Eseguire il login a OCI Console, passare a Oracle Container Engine for Kubernetes e fare clic su Crea.
-
Nella procedura guidata Crea cluster fare clic su Creazione personalizzata.
-
Specificare il nome cluster, selezionare la versione di Kubernetes che si desidera utilizzare e fare clic su Avanti nella parte inferiore della procedura guidata.
Nota: è necessario impostare la VCN, le subnet e gli instradamenti prima di iniziare con la creazione del cluster
-
È possibile scegliere uno dei tipi di rete. Il networking nativo VCN offre prestazioni migliori. Se scegli la rete nativa VCN, assicurati che la tua subnet disponga di un numero sufficiente di indirizzi IP disponibili.
-
Configurare il pool di nodi, scegliere le risorse di calcolo desiderate. In Opzioni avanzate incollare lo script
cloud-init
personalizzato riportato di seguito. -
OKE non fornisce un'opzione per modificare il modello di nodo. Pertanto, per collegare un volume a blocchi, è necessario eseguire uno script
cloud-init
all'inizializzazione del nodo. Lo script creerà un volume a blocchi della dimensione e delle prestazioni specificate e lo collegherà al nodo al momento dell'inizializzazione. -
Assicurarsi di modificare le variabili
size_in_gbs
(dimensione dello storage a blocchi da collegare all'inizializzazione),vpus_per_gb
(vpu per gb per il collegamento allo storage a blocchi) emode
(modalità collegamento, PARA o ISCSI) nello script in base alle proprie esigenze.
È necessario creare un gruppo dinamico e fornire a questo gruppo l'accesso di gestione allo storage a blocchi. Ciò ci consente di utilizzare l'autenticazione del principal dell'istanza nel nostro script.
script
cloud-init
:#!/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
-
-
Rivedere e fare clic su Crea cluster, quindi attendere che il cluster diventi disponibile.
-
Una volta che il cluster è disponibile, andare a Pool di nodi, quindi a Nodi. È possibile vedere che i nodi sono in stato pronto, fare clic su qualsiasi nodo, aprirà la pagina Dettagli istanza, passerà ai volumi a blocchi collegati ed è possibile verificare che all'istanza sia collegato un volume a blocchi (di dimensioni e vpu come indicato nello script
cloud-init
).
Task 2: Impostare Longhorn
-
Una volta che il cluster è disponibile, è possibile accedervi utilizzando la cloud shell, fare clic su Accedi al cluster e copiare ed eseguire il comando in cloud shell.
-
Eseguire
kubectl get node
per ottenere l'elenco dei nodi programmabili. -
Per consentire a Longhorn di riconoscere il disco collegato, è necessario aggiungere etichette e annotazioni ai nodi come indicato nell'impostazione predefinita del disco Longhorn. A tale scopo, verrà creato un file
patch.yaml
per applicare le patch ai nodi.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 } ]'
-
Eseguire il comando seguente per ogni nodo.
kubectl patch node <node name> --patch-file patch.yaml
-
Eseguire il comando di descrizione del nodo per verificare che ai nodi vengano applicate le patch.
kubectl describe node <node name>
Task 3: Installa Longhorn
-
In questa esercitazione viene utilizzato Helm per distribuire Longhorn nel cluster OKE. Seguire le istruzioni riportate in questo documento: Installa con Helm.
-
Eseguire il comando seguente per distribuire Longhorn.
helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace --version 1.3.2 --set defaultSettings.createDefaultDiskLabeledNodes=true
Nota: impostare la proprietà
defaultSettings.createDefaultDiskLabeledNodes
su true durante la distribuzione. In questo modo, Longhorn dovrà utilizzare la configurazione del volume a blocchi di collegamento fornita in precedenza. -
Verificare che i pod siano stati creati e in esecuzione.
-
Per abilitare l'interfaccia utente per una migliore visualizzazione di Longhorn e della relativa amministrazione, installare Ingress Controller come indicato nel presente documento: Esempio: impostazione di un controller in entrata in un cluster.
-
Creare un file
ingress.yaml
per esporre l'interfaccia utente Longhorn.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
-
Eseguire
kubectl apply -f ingress.yaml
per esporre l'interfaccia utente Longhorn utilizzando il gateway in entrata. -
Ottenere l'URL del gateway eseguendo il comando seguente.
kubectl get ingress -n longhorn-system
. -
Aprire l'indirizzo IP da un browser per accedere alla Console Longhorn e confermare che è attiva.
Puoi vedere che abbiamo lo storage disponibile e pronto per l'uso.
Task 4: scala Longhorn
Longhorn ti offre il controllo completo della soluzione di storage per le implementazioni kubernetes, ma il ridimensionamento del longhorn è ancora un processo manuale, ci sono 3 modi in cui puoi ridimensionare la configurazione Longhorn.
-
Aumenta le dimensioni o le unità di prestazioni dei volumi a blocchi collegati: questo è un processo manuale, devi ridimensionare ciascun volume a blocchi singolarmente ed eseguire alcuni script sui nodi per estendere lo storage. Per ulteriori informazioni, vedere Ridimensionamento di un volume.
-
Collega più volumi: devi creare e collegare manualmente i volumi ai nodi.
-
Ridimensionare il cluster aumentando i nodi: poiché è già stato fornito uno script
cloud-init
, il volume a blocchi verrà creato e collegato al nodo. È necessario applicare le patch al nodo dopo che è pronto, come indicato nel task 2.3, affinché Longhorn riconosca lo storage collegato.
Nota: è possibile modificare lo script per collegare il numero desiderato di volumi a blocchi a un singolo nodo.
Collegamenti correlati
Conferme
- Autore - Mayank Kakani (architetto cloud OCI)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare Oracle Help Center.
Deploy Longhorn for Kubernetes on OKE
F76576-02
December 2023
Copyright © 2023, Oracle and/or its affiliates.