GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Finden von Block- und Datei-OCP-Anwendungsinhalten in ODF:Erstellen des Projekts

Wie in Teil 1 dieser Artikelserie behandelt, kann es schwierig sein, die Speicherorte von Anwendungsobjekten in OpenShift Data Foundation (ODF)-Clustern zuzuordnen. Mein Ziel ist es, diesen Prozess für Sie zu vereinfachen, indem ich Ihnen zeige, wie Sie einen Fehlerbehebungscontainer einrichten und ihn dann sowohl für die Block- als auch für die Dateispeicherzuordnung verwenden.

Lesen Sie unbedingt zuerst Teil 1, um die Umgebung und das erforderliche Toolkit zu verstehen. Es ist an der Zeit, mit der Erstellung des Demonstrationsprojekts zu beginnen.

Projekt erstellen

Erstellen Sie als Nächstes zwei einfache Testanwendungen, eine, die den Block-SC verwendet, und die andere, die den Datei-SC verwendet, um die Aufgaben der Zuordnung durchzuführen, wo die Daten dieser Anwendungen im ODF-Cluster gespeichert werden.

Erstellen Sie zunächst ein Projekt mit dem Namen ocs-block-app um die Anwendung zu hosten:

[alexon@bastion ~]$ oc new-project ocs-block-app
Now using project "ocs-block-app" on server "https://api.example.com:6443".

Sie können diesem Projekt mit new-app Anwendungen hinzufügen Befehl. Um beispielsweise eine neue Beispielanwendung in Ruby zu erstellen, versuchen Sie Folgendes:

oc new-app rails-postgresql-example

Oder verwenden Sie kubectl So stellen Sie eine einfache Kubernetes-Anwendung bereit:

kubectl create deployment hello-node --image=k8s.gcr.io/serve_hostname

Verwenden Sie dann eine der von OCP bereitgestellten Vorlagen, die Block verwendet. Es ist eine gute Idee, das Template rails-pgsql-persistent zu verwenden :

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

rails-pgsql-persistent

In den in der Vorlage verfügbaren Parametern ist ersichtlich, dass die Größe der Volumenanforderung anpassbar ist:

[alexon@bastion ~]$ oc process --parameters -n openshift rails-pgsql-persistent | grep -i volume

VOLUME_CAPACITY             
Volume space available for data, e.g. 512Mi, 2Gi                                                                               
1Gi

Führen Sie diese neue Anwendung aus und passen Sie die Volumenanforderungsgröße auf 5 GB an:

[alexon@bastion ~]$ oc new-app rails-pgsql-persistent -p VOLUME_CAPACITY=5Gi

--> Deploying template "openshift/rails-pgsql-persistent" to project ocs-block-app

     Rails + PostgreSQL
     ---------
     An example Rails application with a PostgreSQL database. For more information about using this template, including OpenShift considerations, see https://github.com/sclorg/rails-ex/blob/master/README.md.

     The following service(s) have been created in your project: rails-pgsql-persistent, postgresql.
     
     For more information about using this template, including OpenShift considerations, see https://github.com/sclorg/rails-ex/blob/master/README.md.

     * With parameters:
        * 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=
        * Context Directory=
        * Application Hostname=
        * GitHub Webhook Secret=ahNYBvvbrEFhRjFEX28XdXn04CvMgkbQuABBKruJ # generated
        * Secret Key=m2aq81igaa74gh1shh8vawcywvsxjqjqubywwkcadymj0b1va0krkgsog000ksdusf7h6gyyhoxyh6dcfhw2swsen85o8sq43vod1hvlbtvu7n6x14sn7k4vcs0uwxr # generated
        * Application Username=openshift
        * Application Password=secret
        * Rails Environment=production
        * Database Service Name=postgresql
        * Database Username=userWXH # generated
        * Database Password=pOxlVrav # generated
        * Database Name=root
        * Maximum Database Connections=100
        * Shared Buffer Amount=12MB
        * Custom RubyGems Mirror URL=

--> Creating resources ...
    secret "rails-pgsql-persistent" created
    service "rails-pgsql-persistent" created
   
route.route.openshift.io "rails-pgsql-persistent" created
   
imagestream.image.openshift.io "rails-pgsql-persistent" created
   
buildconfig.build.openshift.io "rails-pgsql-persistent" created
    deploymentconfig.apps.openshift.io "rails-pgsql-persistent" created
   
persistentvolumeclaim "postgresql" created
    service "postgresql" created
   
deploymentconfig.apps.openshift.io "postgresql" created
--> Success
    Access your application via route 'rails-pgsql-persistent-ocs-block-app.apps.example.com' 
    Build scheduled, use 'oc logs -f buildconfig/rails-pgsql-persistent' to track its progress.
    Run' oc status' to view your app.

Überprüfen Sie nach einigen Augenblicken, ob die Anwendung funktioniert:

[alexon@bastion ~]$ oc status

In project ocs-block-app on server https://api.example.com:6443

svc/postgresql - 172.30.176.29:5432
  dc/postgresql deploys openshift/postgresql:12-el8 
    deployment #1 deployed 4 minutes ago - 1 pod

http://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 source builds https://github.com/sclorg/rails-ex.git on openshift/ruby:2.6-ubi8 
    deployment #1 deployed 3 minutes ago - 1 pod

View details with 'oc describe <resource>/<name>' or list resources with 'oc get all'.

[alexon@bastion ~]$ oc get pods

NAME READY STATUS     
RESTARTS AGE
postgresql-1-deploy 0/1 Completed  
0 4m49s
postgresql-1-k6t47 1/1 Running    
0 4m46s
rails-pgsql-persistent-1-build 0/1    
Completed 0 4m50s
rails-pgsql-persistent-1-deploy 0/1    
Completed 0 3m9s
rails-pgsql-persistent-1-dgfkq 1/1    
Running 0 2m57s
rails-pgsql-persistent-1-hook-pre 0/1    
Completed 0 3m6s

Prüfen Sie, ob der von der Anwendung erstellte PVC den ODF-Block SC verwendet, in diesem Fall Ceph RBD:

[alexon@bastion ~]$ oc get pvc

NAME STATUS  
VOLUME                                    
CAPACITY ACCESS MODES STORAGECLASS AGE
postgresql  
Bound   
pvc-371faec8-2017-43b4-8416-7003a0d539a9 5Gi       
RWO           
ocs-storagecluster-ceph-rbd  
8m35s

In den PV-Spezifikationen, die vom PVC verwendet werden, gibt es im CSI-Feld ein Attribut, das den Image-Namen bereitstellt, der für die Anwendung im Ceph-Blockpool erstellt wurde. Sie können den Namen wie folgt aus diesem Bild extrahieren:

[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

Greifen Sie mit dem Namen des Images in der Hand erneut auf die Toolbox zu und listen Sie die vorhandenen Pools auf:

[alexon@bastion ~]$ oc rsh -n openshift-storage $toolbox

sh-4.4$ ceph df

RAW STORAGE:
    CLASS SIZE       
AVAIL USED RAW USED %RAW USED 
    ssd 1.5 TiB 1.3 TiB    
252 GiB 255 GiB 16.63 
    TOTAL 1.5 TiB    
1.3 TiB 252 GiB 255 GiB 16.63 
 
POOLS:
    POOL                                          
ID STORED OBJECTS USED       
%USED MAX AVAIL 
   
ocs-storagecluster-cephblockpool 1 84 GiB 22.39k    
252 GiB 19.37 350 GiB 
   
ocs-storagecluster-cephfilesystem-metadata 2    
1.4 MiB 25 4.2 MiB 0      
350 GiB 
    ocs-storagecluster-cephfilesystem-data0 3 0 B 0 0 B 0      
350 GiB 

Denken Sie daran, dass ich erwähnt habe, dass der ocs-storagecluster-cephblockpool Pool wird für Blöcke verwendet? Sehen Sie, ob Sie Ihr Bild darin finden können:

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

rbd_id.csi-vol-24624906-bccb-11eb-9cab-0a580a81023f

Da ist dein Bild. Weitere Informationen darüber anzeigen:

sh-4.4$ rbd -p ocs-storagecluster-cephblockpool info csi-vol-24624906-bccb-11eb-9cab-0a580a81023f

rbd image 'csi-vol-24624906-bccb-11eb-9cab-0a580a81023f':
           size 5 GiB in 1280 objects
           order 22 (4 MiB objects)
           snapshot_count: 0
           id: 926554e4aba49
           block_name_prefix: rbd_data.926554e4aba49
           format: 2
           features: layering
           op_features: 
           flags: 
           create_timestamp: Mon May 24 20:03:43 2021
           access_timestamp: Mon May 24 20:03:43 2021
           modify_timestamp: Mon May 24 20:03:43 2021

Stellen Sie sicher, dass es dieselbe Größe hat, die zuvor für die Erstellung von PVC definiert wurde. Und was passiert, wenn Sie die Kapazität von PVC erhöhen? Erhöhung von 5 GB auf 10 GB:

[alexon@bastion ~]$ oc get pvc

NAME        
STATUS VOLUME                                    
CAPACITY ACCESS MODES STORAGECLASS AGE
postgresql  
Bound   
pvc-371faec8-2017-43b4-8416-7003a0d539a9 5Gi       
RWO           
ocs-storagecluster-ceph-rbd 17m

[alexon@bastion ~]$ oc patch pvc postgresql -n ocs-block-app --type json --patch '[{ "op": "replace", "path": "/spec/resources/requests/storage", "value": "10Gi" }]'

persistentvolumeclaim/postgresql patched

[alexon@bastion ~]$ oc get pvc

NAME        
STATUS VOLUME                                    
CAPACITY ACCESS MODES STORAGECLASS AGE
postgresql  
Bound   
pvc-371faec8-2017-43b4-8416-7003a0d539a9 10Gi      
RWO           
ocs-storagecluster-ceph-rbd 19m

Greifen Sie erneut auf den Toolbox-Pod zu. Die Bildgröße wurde ebenfalls geändert, um die Größenänderung des PVC widerzuspiegeln:

[alexon@bastion ~]$ oc rsh -n openshift-storage $toolbox

sh-4.4$ ceph df

RAW STORAGE:
    CLASS SIZE       
AVAIL USED RAW USED %RAW USED 
    ssd 1.5 TiB 1.3 TiB    
253 GiB 256 GiB 16.64 
    TOTAL 1.5 TiB    
1.3 TiB 253 GiB 256 GiB 16.64 
 
POOLS:
    POOL ID STORED     
OBJECTS USED %USED MAX AVAIL 
   
ocs-storagecluster-cephblockpool 1 84 GiB 22.41k    
253 GiB 19.39 350 GiB 
   
ocs-storagecluster-cephfilesystem-metadata 2    
1.4 MiB 25 4.2 MiB 0      
350 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-0a580a81023f

rbd image 'csi-vol-24624906-bccb-11eb-9cab-0a580a81023f':
           size 10 GiB in 2560 objects
           order 22 (4 MiB objects)
           snapshot_count: 0
           id: 926554e4aba49
           block_name_prefix: rbd_data.926554e4aba49
           format: 2
           features: layering
           op_features: 
           flags: 
           create_timestamp: Mon May 24 20:03:43 2021
           access_timestamp: Mon May 24 20:03:43 2021
           modify_timestamp: Mon May 24 20:03:43 2021

Was ist, wenn Sie wissen möchten, auf welchem ​​​​Gerät und Host das Image abgebildet ist? Der Ceph-Client ruft die neueste Cluster-Karte ab. Der CRUSH-Algorithmus berechnet, wie das Objekt einer Platzierungsgruppe zuzuordnen ist, und berechnet dann, wie die Platzierungsgruppe dynamisch einem OSD zugewiesen wird. Um den Objektstandort zu finden, benötigen Sie lediglich den Objektnamen und den Poolnamen:

sh-4.4$ ceph osd map ocs-storagecluster-cephblockpool csi-vol-24624906-bccb-11eb-9cab-0a580a81023f

osdmap e405 pool 'ocs-storagecluster-cephblockpool' (1) object 'csi-vol-24624906-bccb-11eb-9cab-0a580a81023f' -> pg 1.ecb58a2b (1.b) -> up ([1,0,2], p1) acting ([1,0,2], p1)

Jetzt weiß ich, dass sich mein Objekt in einem PG befindet, das die OSD-ID 1 als primäres Gerät hat, sowie Replikate in den OSD-IDs 0 und 2. Auf welchem ​​Knoten in meinem Cluster befindet sich der OSD 1-Daemon? Siehe unten:

sh-4.4$ ceph osd status
+----+------------------------------+-------+-------+--------+---------+--------+---------+-----------+
| id |            
host | used | avail | wr ops | wr data | rd ops | rd data | state |
+----+------------------------------+-------+-------+--------+---------+--------+---------+-----------+
| 0 | ip-10-0-171-63.ec2.internal | 86.7G | 425G | 50 | 517k 
| 0 |    
0 | exists,up |
| 1 | ip-10-0-143-192.ec2.internal | 86.7G | 425G | 109  
| 1224k |   
0 | 0  
| exists,up |
| 2 | ip-10-0-154-20.ec2.internal | 86.7G | 425G | 78 | 1048k 
| 2 |  
106 | exists,up |
+----+------------------------------+-------+-------+--------+---------+--------+---------+-----------+

Sie können oben sehen, dass es sich im Knoten ip-10-0-143-192.ec2.internal befindet . Und welches Gerät wird auf diesem Knoten verwendet? Siehe unten:

sh-4.4$ ceph osd tree

ID CLASS WEIGHT TYPE NAME                                           
STATUS REWEIGHT PRI-AFF 
 -1 1.50000 root default                                                                
 -5 1.50000 region us-east-1                                                         
 -4 0.50000 zone us-east-1a                                                     
 -3 0.50000 host ocs-deviceset-gp2-csi-1-data-085b8h                         
  1 ssd 0.50000 osd.1 up 1.00000 1.00000 
-10      
0.50000 zone us-east-1b                                                     
 -9 0.50000 host ocs-deviceset-gp2-csi-2-data-0n9lkb                         
  2 ssd 0.50000 osd.2 up 1.00000 1.00000 
-14      
0.50000 zone 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 

Jetzt weiß ich, welcher Knoten und welches Gerät (ocs-deviceset-gp2-csi-1-data-085b8h hosten ) mein Bild ist eingeschaltet. Aber ich weiß immer noch nicht, welcher Pfad innerhalb dieses Knotens es ist. Dazu sehen Sie ein weiteres Attribut des PV, das Ihnen diese Informationen liefert:

[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

Greifen Sie also mit den Informationen zu Knotenname, Gerät und Volume-Handle auf den Knoten zu und erhalten Sie Ihr Image. Sie können dies tun, indem Sie entweder nach dem Image-Namen auf den aktuellen Einhängepunkten des Knotens suchen oder nach dem Namen des Volume-Handles:

[alexon@bastion ~]$ oc debug node/ip-10-0-143-192.ec2.internal
Starting pod/ip-10-0-143-192ec2internal-debug ...
To use host binaries, run `chroot /host`
Pod IP: 10.0.143.192
If you don't see a command prompt, try pressing enter.

sh-4.4# mount | grep 24624906-bccb-11eb-9cab-0a580a81023f

/dev/rbd2 on /host/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-371faec8-2017-43b4-8416-7003a0d539a9/globalmount/0001-0011-openshift-storage-0000000000000001-24624906-bccb-11eb-9cab-0a580a81023f type ext4 (rw,relatime,seclabel,stripe=16)

Sie können sehen, dass das Image auf dem folgenden Pfad mit einem EXT4-Dateisystem durch das Gerät /dev/rbd2 gemountet wird :

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

Sehen Sie sich den Inhalt dieses Verzeichnisses an:

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-0a580a81023f

lost+found userdata

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-0a580a81023f/userdata/

PG_VERSION global pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_xact postmaster.opts
base log pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase postgresql.auto.conf postmaster.pid
current_logfiles 
pg_commit_ts pg_ident.conf pg_notify    
pg_snapshots pg_subtrans pg_wal postgresql.conf

Und wie Sie oben sehen können, sind dies die Inhalte Ihrer Datenbank der von Ihnen erstellten Blockanwendung.

[ Lernen Sie die Grundlagen der Verwendung von Kubernetes in diesem kostenlosen Spickzettel. ]

Abschluss

Zu Beginn dieses Artikels (Teil zwei der Reihe) haben Sie ein Demonstrationsprojekt erstellt, mit dem Sie arbeiten können. Sie haben sich auch die Zuordnung von Blockanwendungen innerhalb eines ODF-Clusters angesehen, indem Sie die Rook-Toolbox und OpenShift-Befehle verwendet haben.

Lesen Sie auf jeden Fall Teil drei, da er zusätzliche Ideen zur Zuordnung und Fehlerbehebung enthält, die sich auf Dateispeicherung und -zuordnung konzentrieren.


Linux
  1. Der Unterschied zwischen .exrc und .vimrc?

  2. Wie finde ich den Typ einer Img-Datei und mounte sie?

  3. lsinitramfs:Listet den Inhalt des initrd-Dateisystems auf.

  4. libpng-Warnung:Inkompatible libpng-Version in Anwendung und Bibliothek

  5. Wie kann ich den Dateiinhalt rekursiv anzeigen?

So verwenden Sie Sudo und die Sudoers-Datei

So speichern Sie eine Datei in Vim / Vi und beenden den Editor

So zeigen Sie den Inhalt eines Archivs oder einer komprimierten Datei unter Linux an

Finden von Block- und Datei-OCP-Anwendungsinhalten in ODF:Erstellen eines Dateispeicherprojekts

Zeigen Sie den Inhalt einer Datei in der Linux-Befehlszeile an

Anzeigen des Inhalts der Festplatte im Binärformat