GNU/Linux >> Linux Esercitazione >  >> Linux

Trovare il contenuto dell'applicazione OCP di blocchi e file in ODF:creazione del progetto

Come illustrato nella prima parte di questa serie di articoli, può essere difficile mappare le posizioni degli oggetti dell'applicazione nei cluster OpenShift Data Foundation (ODF). Il mio obiettivo è semplificare questo processo dimostrando come stabilire un contenitore per la risoluzione dei problemi e quindi come utilizzarlo per la mappatura dell'archiviazione di file e blocchi.

Assicurati di leggere prima la prima parte per comprendere l'ambiente e il kit di strumenti necessario. È ora di iniziare creando il progetto dimostrativo.

Crea il progetto

Successivamente, crea due semplici applicazioni di test, una che utilizza il blocco SC e l'altra che utilizza il file SC, per eseguire le attività di mappatura in cui i dati di queste applicazioni vengono archiviati nel cluster ODF.

Innanzitutto, crea un progetto denominato ocs-block-app per ospitare l'applicazione:

[alexon@bastion ~]$ oc new-project ocs-block-appNow utilizzando il progetto "ocs-block-app" sul server "https://api.example.com:6443". 

Puoi aggiungere applicazioni a questo progetto con new-app comando. Ad esempio, per creare una nuova applicazione di esempio in Ruby, prova:

oc new-app rails-postgresql-example 

Oppure usa kubectl per distribuire una semplice applicazione Kubernetes:

kubectl crea distribuzione hello-node --image=k8s.gcr.io/serve_hostname 

Quindi, utilizzare uno dei modelli messi a disposizione da OCP che utilizza il blocco. È una buona idea utilizzare il modello rails-pgsql-persistent :

[alexon@bastion ~]$ oc get templates -n openshift -o custom-columns=NAME:.metadata.name | grep ^rotaie | head -1rails-pgsql-persistent 

Nei parametri disponibili nel template è possibile vedere che la dimensione della richiesta di volume è personalizzabile:

[alexon@bastion ~]$ oc process --parameters -n openshift rails-pgsql-persistent | grep -i volumeVOLUME_CAPACITY             Spazio in volume disponibile per i dati, ad es. 512Mi, 2Gi                                                                               1Gi 

Esegui questa nuova applicazione e regola la dimensione della richiesta di volume a 5 GB:

[alexon@bastion ~]$ oc new-app rails-pgsql-persistent -p VOLUME_CAPACITY=5Gi--> Distribuzione del modello "openshift/rails-pgsql-persistent" per il progetto ocs-block-app     Rails + PostgreSQL     ---------     Un esempio di applicazione Rails con un database PostgreSQL. Per ulteriori informazioni sull'utilizzo di questo modello, incluse le considerazioni su OpenShift, vedere https://github.com/sclorg/rails-ex/blob/master/README.md. I seguenti servizi sono stati creati nel tuo progetto:rails-pgsql-persistent, postgresql. Per ulteriori informazioni sull'utilizzo di questo modello, incluse le considerazioni su OpenShift, vedere https://github.com/sclorg/rails-ex/blob/master/README.md. * Con parametri:        * Name=rails-pgsql-persistent        * Namespace=openshift        * Memory Limit=512Mi        * Memory Limit (PostgreSQL)=512Mi        * Volume Capacity=5Gi        * Git Repository URL=https://github.com/sclorg/rails -ex.git * Git Reference =* contesto della directory =* L'applicazione host =* GitHub Webhook segreto =ahNYBvvbrEFhRjFEX28XdXn04CvMgkbQuABBKruJ # generato * chiave segreta =m2aq81igaa74gh1shh8vawcywvsxjqjqubywwkcadymj0b1va0krkgsog000ksdusf7h6gyyhoxyh6dcfhw2swsen85o8sq43vod1hvlbtvu7n6x14sn7k4vcs0uwxr # generato * Applicazione Nome utente =OpenShift * Applicazione password =* segreto Rotaie Ambiente =produzione * database del servizio nomi =postgresql        * Nome utente database=userWXH # generato        * Password database=pOxlVrav # generato        * Nome database=root        * Connessioni database massime=100        * Ammontare buffer condiviso=12 MB        * URL mirror RubyGems personalizzato=--> Creazione risorse ...   segreto "rails-pgsql-persistent" creato   servizio "rails-pgsql-persistent" creato  route.route.openshift.io "rails-pgsql-persistent" creato   imagestream.image.openshift.io "rails-pgsql-persistent" creato   buildconfig. build.openshift.io "rails-pgsql-persistent" creato    deploymentconfig.apps.openshift.io "rails-pgsql-persistent" creato   persistentvolumeclaim "postgresql" creato    servizio "postgresql" creato   deploymentconfig.apps.openshift.io "postgresql" creato- -> Successo    Accedi all'applicazione tramite il percorso 'rails-pgsql-persistent-ocs-block-app.apps.example.com'     Compilazione pianificata, utilizza 'oc logs -f buildconfig/rails-pgsql-persistent' per monitorare l'avanzamento. Esegui 'oc status' per visualizzare la tua app. 

Dopo qualche istante, verifica che l'applicazione sia funzionante:

[alexon@bastion ~]$ oc statusIn project ocs-block-app sul server https://api.example.com:6443svc/postgresql - 172.30.176.29:5432  dc/postgresql distribuisce openshift/postgresql:12-el8     deployment n. 1 distribuito 4 minuti fa - 1 podhttp://rails-pgsql-persistent-ocs-block-app.apps.example.com (svc/rails-pgsql-persistent) dc/rails-pgsql-persistent deploys istag/rails-pgsql-persistent:latest <-   bc/rails-pgsql-persistent build di sorgenti https://github.com/sclorg/rails-ex.git su openshift/ruby:2.6-ubi8     deployment n. 1 distribuito 3 minuti fa - 1 podVisualizza i dettagli con 'oc describe /' o elenca le risorse con 'oc get all'.[alexon@bastion ~]$ oc get podsNAME READY STATUS     RESTARTS AGEpostgresql-1-deploy 0/1 Completato  0 4m49spostgresql -1-k6t47 1/1 In esecuzione    0 4m46srails-pgsql-persistent-1-build 0/1    Completato 0 4m50srails-pgsql-persistent-1-deploy 0/1    Completato 0 3m9srails-pgsql-persistent-1-dgfkq 1/1    In esecuzione 0 2m57srails-pgsql-persistent-1-hook-pre 0/1    Compl eted 0 3m6s 

Controllare la PVC creata dall'applicazione che sta utilizzando il blocco ODF SC, che in questo caso è Ceph RBD:

  [Alexon@bastione ~] $ oc Get pvcName Volume di stato Modalità Accesso di accesso STORAGECLASS AGEPOSTGRESQL LOCT PVC-371FAEC8-2017-43B4-8416-7003A0D539A9 5GI RWO OCS-STORAGUTER-EPH-RBD 8M35S  

Nelle specifiche PV utilizzate dalla PVC, all'interno del campo CSI, è presente un attributo che fornisce il nome dell'immagine creato per l'applicazione all'interno del pool di blocchi Ceph. Puoi estrarre il nome da questa immagine come segue:

[alexon@bastion ~]$ oc get pv pvc-371faec8-2017-43b4-8416-7003a0d539a9 -o jsonpath="{.spec.csi.volumeAttributes.imageName}{'\n'}"csi -vol-24624906-bccb-11eb-9cab-0a580a81023f 

Con il nome dell'immagine in mano, accedi nuovamente alla casella degli strumenti ed elenca i pool esistenti:

[alexon@bastion ~]$ oc rsh -n openshift-storage $toolboxsh-4.4$ ceph dfRAW STORAGE:    CLASS SIZE       AVAIL USED RAW USED % RAW USED     ssd 1.5 TiB 1.3 TiB    252 GiB 255 GiB 16.63     TOTALE 1.5 TIB 1.3 TIB 252 GIB 255 GIB 16.63 Pool:ID pool Oggetti memorizzati usati%usati Max disponibile OCS-StorageCluster-CephBlockpool 1 84 GIB 22.39K 252 GIB 19.37 350 Gib OCS-STORAGECLUSTER-CEPHISYSTEM-METADATA 2 1.4 MIB 25 4.2 MIB 0 350 Gib Gib 0 350 Gib Gib ocs-storagecluster-cephfilesystem-data0 3 0 B 0 0 B 0      350 GiB  

Ricorda che ho menzionato che il ocs-storagecluster-cephblockpool la piscina è usata per i blocchi? Vedi se riesci a trovare la tua immagine all'interno:

sh-4.4$ rados -p ocs-storagecluster-cephblockpool ls | grep csi-vol-24624906-bccb-11eb-9cab-0a580a81023frbd_id.csi-vol-24624906-bccb-11eb-9cab-0a580a81023f 

C'è la tua immagine. Mostra qualche informazione in più a riguardo:

sh-4.4$ rbd -p ocs-storagecluster-cephblockpool info csi-vol-24624906-bccb-11eb-9cab-0a580a81023frbd image 'csi-vol-24624906-bccb-11eb-9cab-0a580a81023f':           size 5 GB a 1280 oggetti ordine 22 (4 oggetti MIB) snapshot_count:0 id:926554e4aba49 block_name_prefix:formato rbd_data.926554e4aba49:2 caratteristiche:op_features stratificazione:flags:create_timestamp:lun 24 Mag 2021 20:03:43 access_timestamp:lun 24 Mag 20 :03:43 2021           modify_timestamp:lun 24 maggio 20:03:43 2021 

Vedi che ha le stesse dimensioni precedentemente definite per la creazione del PVC. E cosa succede se si aumenta la capacità del PVC? Aumento da 5 GB a 10 GB:

; ]$ oc patch pvc postgresql -n ocs-block-app --type json --patch '[{ "op":"replace", "path":"/spec/resources/requests/storage", "value":"10Gi"}] 'persistentvolumeclaim / PostgreSQL patch [Alexon @ bastione ~] $ oc get pvcNAME stato del volume capacità di accesso MODI Stoccaggio-AGEpostgresql Bound pvc-371faec8-2017-43b4-8416-7003a0d539a9 10Gi RWO 19m ocs-storagecluster-ceph-RBD

Accedi di nuovo al contenitore della casella degli strumenti. Anche la dimensione dell'immagine è stata modificata, riflettendo il ridimensionamento del PVC:

[alexon@bastion ~]$ oc rsh -n openshift-storage $toolboxsh-4.4$ ceph dfRAW STORAGE:    CLASS SIZE       AVAIL USED RAW USED % RAW USED     ssd 1.5 TiB 1.3 TiB    253 GiB 256 GiB 16.64     TOTALE 1.5 TIB 1.3 TIB 253 GIB 256 GIB 16.64 Pools:ID pool Oggetti memorizzati utilizzati %usati Max disponibile OCS-StorageCluster-CephBlockpool 1 84 GIB 22.41K 253 Gib 19.39 350 Gib OCS-STORAGECLUSTER-CEPHISYSYSTYSTEMSYSTEM-METADATA 2 1.4 MIB 25 4.2 MIB 0 350 Gib Gib 0 350 Gib Gib 0 350 Gib gib ocs-storagecluster-cephfilesystem-data0 3 0 B 0 0 B 0      350 GiB sh-4.4$ rbd -p ocs-storagecluster-cephblockpool info csi-vol-24624906-bccb-11eb-9cab-0a580a81023frbd image 'csi-vol-24624906- BCCB-11EB-9CAB-0A580A81023F ':dimensione 10 Gib in 2560 Oggetti Ordine 22 (4 oggetti MIB) Snapshot_Count:0 ID:926554E4E4ABA49 BLOCK_NAME_PREFIX:RBD_DATA.926554E4E4ABA49 FORMAT:2 FATTURA:Strappamento OP_FAGGIO:BLACKS_PREFIX:RBD_Data:RBD_DATA. 4 20:03:43 2021           access_timestamp:lun 24 maggio 20:03:43 2021           modify_timestamp:lun 24 maggio 20:03:43 2021 

Cosa succede se si desidera sapere su quale dispositivo e host è mappata l'immagine? Il client Ceph recupera l'ultima mappa del cluster. L'algoritmo CRUSH calcola come mappare l'oggetto a un gruppo di posizionamenti e quindi calcola come assegnare dinamicamente il gruppo di posizionamenti a un OSD. Per trovare la posizione dell'oggetto, tutto ciò che serve è il nome dell'oggetto e il nome del pool:

sh-4.4$ ceph osd map ocs-storagecluster-cephblockpool csi-vol-24624906-bccb-11eb-9cab-0a580a81023fosdmap e405 pool 'ocs-storagecluster-cephblockpool' (1) oggetto 'csi-vol-24624906 -bccb-11eb-9cab-0a580a81023f' -> pg 1.ecb58a2b (1.b) -> su ([1,0,2], p1) in azione ([1,0,2], p1) 

Ora so che il mio oggetto si trova in un PG che ha l'ID OSD 1 come dispositivo principale, nonché le repliche negli ID OSD 0 e 2. Su quale nodo nel mio cluster si trova il demone OSD 1? Vedi sotto:

sh-4.4$ ceph osd status+----+------------------------------+- ------+-------+--------+---------+---------+------- --+-----------+| id | ospite | usato | usufruire | operazioni | wr dati | rd operazioni | rd dati | stato |+----+------------------------------+--------+--- ----+--------+---------+---------+---------+------- ----+| 0 | ip-10-0-171-63.ec2.internal | 86.7G | 425G | 50 | 517k | 0 | 0 | esiste, su || 1 | ip-10-0-143-192.ec2.internal | 86.7G | 425G | 109  | 1224k | 0 | 0  | esiste, su || 2 | ip-10-0-154-20.ec2.internal | 86.7G | 425G | 78 | 1048k | 2 | 106 | esiste,su |+----+------------------------------+-------+- ------+--------+---------+--------+---------+----- ------+ 

Puoi vedere sopra che risiede nel nodo ip-10-0-143-192.ec2.internal . E quale dispositivo viene utilizzato su quel nodo? Vedi sotto:

  SH-4,4 $ CEPH OSD TreeID Classe TIPO DI PESPO DI PESO DEL NOME STATO REI-AFF -1 1.50000 ROOT PREFAULT -5 1.50000 Regione US-EAST-1 -4 0,50000 ZONA US-EAST-EAST-1A -3 0,50000 OCS host -Deviceset-GP2-CSI-1-DATA-085B8H 1 SSD 0,50000 OSD.1 UP 1.00000 1.00000 -10 0,50000 ZONA US-EAST-EAST-1B -9 0,50000 OCS-DEVIESET-GP2-CSI-2-Data-2LKB 2 SSD 0.50000 OSD.2 UP 1.00000 1.00000 -14 0.50000 ZONA US-EAST-1C -13 0.50000 Host OCS-Deviceset-GP2-CSI-0-DATA-0GVT22 0 SSD 0,50000 OSD.0 UP 1.00000 1.00000  

Ora so quale nodo e dispositivo (host ocs-deviceset-gp2-csi-1-data-085b8h ) la mia immagine è attiva. Ma ancora non so quale sia il percorso all'interno di quel nodo. Per questo, vedrai un altro attributo del PV che ti darà queste informazioni:

[alexon@bastion ~]$ oc get pv pvc-371faec8-2017-43b4-8416-7003a0d539a9 -o jsonpath="{.spec.csi.volumeHandle}{'\n'}"0001-0011 -openshift-storage-0000000000000001-24624906-bccb-11eb-9cab-0a580a81023f 

Quindi, con il nome del nodo, il dispositivo e le informazioni sull'handle del volume in mano, accedi al nodo e ottieni la tua immagine. Puoi farlo cercando il nome dell'immagine sui punti di montaggio correnti del nodo o il nome dell'handle del volume:

[alexon@bastion ~]$ oc debug node/ip-10-0-143-192.ec2.internalStarting pod/ip-10-0-143-192ec2internal-debug ...Per utilizzare i binari dell'host , esegui `chroot /host`Pod IP:10.0.143.192Se non vedi un prompt dei comandi, prova a premere enter.sh-4.4# mount | grep 24624906-bccb-11eb-9cab-0a580a81023f/dev/rbd2 su /host/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-371faec8-2017-43b4-8416-7003a0d539a9/globalmount/0001- 0011-openshift-storage-00000000000000001-24624906-bccb-11eb-9cab-0a580a81023f tipo ext4 (rw,relatime,seclabel,stripe=16) 

Puoi vedere che l'immagine è montata sul seguente percorso con un filesystem EXT4 dal dispositivo/dev/rbd2 :

/host/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-371faec8-2017-43b4-8416-7003a0d539a9/globalmount/0001-0011-openshift-storage-00000000000000001-24624906 -bccb-11eb-9cab-0a580a81023f 

Guarda il contenuto di questa directory:

sh-4.4# ls /host/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-371faec8-2017-43b4-8416-7003a0d539a9/globalmount/0001-0011-openshift- storage-000000000000001-24624906-bccb-11eb-9cab-0a580a81023flost+trovato userdatash-4.4# ls /host/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-371faec8-2017-43b4-8416-7003a90d533 / globalmount / 0001-0011-OpenShift-storage-000000000000001-24.624.906-BCCB-11eb-9cab-0a580a81023f / userdata / PG_VERSION globale pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_xact postmaster.optsbase accedere pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase postgresql.auto.conf postmaster .pidcurrent_logfiles pg_commit_ts pg_ident.conf pg_notify    pg_snapshots pg_subtrans pg_wal postgresql.conf 

E come puoi vedere sopra, questi sono i contenuti del tuo database dell'applicazione a blocchi che hai creato.

[ Impara le basi dell'uso di Kubernetes in questo cheat sheet gratuito. ]

Concludi

All'inizio di questo articolo (parte seconda della serie), hai creato un progetto dimostrativo con cui lavorare. Hai anche esaminato la mappatura delle applicazioni a blocchi all'interno di un cluster ODF utilizzando la casella degli strumenti Rook e i comandi OpenShift.

Assicurati di leggere la parte tre, poiché contiene ulteriori idee per la mappatura e la risoluzione dei problemi incentrate sull'archiviazione e la mappatura dei file.


Linux
  1. Trovare il contenuto dell'applicazione OCP di blocchi e file in ODF:l'infrastruttura

  2. La differenza tra collegamenti simbolici e hard?

  3. Come trovare il tipo di un file Img e montarlo?

  4. Trovare la parola più lunga in un file di testo

  5. Come visualizzare il contenuto del file in modo ricorsivo?

Come usare Sudo e il file Sudoers

Come salvare un file in Vim/Vi e uscire dall'editor

Come visualizzare il contenuto di un archivio o di un file compresso in Linux

Trovare il contenuto dell'applicazione OCP di blocchi e file in ODF:creazione di un progetto di archiviazione file

Visualizza il contenuto di un file nella riga di comando di Linux

Visualizzazione dei contenuti del disco rigido in binario