GNU/Linux >> Tutoriels Linux >  >> Linux

Trouver le contenu de l'application OCP de bloc et de fichier dans ODF :Création du projet

Comme indiqué dans la première partie de cette série d'articles, il peut être difficile de mapper les emplacements des objets d'application dans les clusters OpenShift Data Foundation (ODF). Mon objectif est de vous faciliter ce processus en vous montrant comment établir un conteneur de dépannage, puis comment l'utiliser pour le mappage de stockage de blocs et de fichiers.

Assurez-vous de lire d'abord la première partie pour comprendre l'environnement et la boîte à outils nécessaire. Il est temps de commencer par créer le projet de démonstration.

Créer le projet

Ensuite, créez deux applications de test simples, l'une qui utilise le bloc SC et l'autre qui utilise le fichier SC, pour effectuer les tâches de mappage où les données de ces applications sont stockées dans le cluster ODF.

Tout d'abord, créez un projet nommé ocs-block-app pour héberger l'application :

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

Vous pouvez ajouter des applications à ce projet avec le new-app commande. Par exemple, pour créer un nouvel exemple d'application en Ruby, essayez :

oc new-app rails-postgresql-example

Ou utilisez kubectl pour déployer une application Kubernetes simple :

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

Ensuite, utilisez l'un des modèles mis à disposition par OCP qui utilise le bloc. C'est une bonne idée d'utiliser le modèle rails-pgsql-persistent :

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

rails-pgsql-persistent

Dans les paramètres disponibles dans le modèle, il est possible de voir que la taille de la demande de volume est personnalisable :

[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

Exécutez cette nouvelle application et ajustez la taille de la demande de volume à 5 Go :

[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.

Après quelques instants, vérifiez que l'application est fonctionnelle :

[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

Vérifiez que le PVC créé par l'application utilise le bloc ODF SC, qui dans ce cas est 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

Dans les spécifications PV utilisées par le PVC, dans le champ CSI, il y a un attribut qui fournit le nom de l'image créée pour l'application dans le pool de blocs Ceph. Vous pouvez extraire le nom de cette image comme suit :

[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

Avec le nom de l'image en main, accédez à nouveau à la boîte à outils et listez les pools existants :

[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 

Rappelez-vous que j'ai mentionné que le ocs-storagecluster-cephblockpool la piscine est utilisée pour les blocs ? Voyez si vous pouvez trouver votre image à l'intérieur :

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

Voilà votre image. Affichez quelques informations supplémentaires à son sujet :

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

Voir qu'il a la même taille précédemment définie pour la création de PVC. Et que se passe-t-il si vous augmentez la capacité du PVC ? Passer de 5 Go à 10 Go :

[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

Accédez à nouveau au module de la boîte à outils. La taille de l'image a également été modifiée, reflétant le redimensionnement du PVC :

[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

Et si vous voulez savoir sur quel appareil et hôte l'image est mappée ? Le client Ceph récupère la dernière carte de cluster. L'algorithme CRUSH calcule comment mapper l'objet à un groupe de placement, puis calcule comment affecter dynamiquement le groupe de placement à un OSD. Pour trouver l'emplacement de l'objet, tout ce dont vous avez besoin est le nom de l'objet et le nom du pool :

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)

Maintenant, je sais que mon objet se trouve dans un PG qui a l'OSD ID 1 comme périphérique principal, ainsi que des répliques dans les OSD ID 0 et 2. Sur quel nœud de mon cluster se trouve le démon OSD 1 ? Voir ci-dessous :

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 |
+----+------------------------------+-------+-------+--------+---------+--------+---------+-----------+

Vous pouvez voir ci-dessus qu'il réside dans le nœud ip-10-0-143-192.ec2.internal . Et quel appareil est utilisé sur ce nœud ? Voir ci-dessous :

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 

Maintenant, je sais quel nœud et périphérique (hôte ocs-deviceset-gp2-csi-1-data-085b8h ) mon image est allumée. Mais je ne sais toujours pas de quel chemin il s'agit dans ce nœud. Pour cela, vous verrez un autre attribut du PV qui vous donnera cette information :

[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

Ainsi, avec le nom du nœud, le périphérique et les informations de gestion du volume en main, accédez au nœud et obtenez votre image. Vous pouvez le faire soit en recherchant le nom de l'image sur les points de montage actuels du nœud, soit le nom du descripteur de volume :

[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)

Vous pouvez voir que l'image est montée sur le chemin suivant avec un système de fichiers EXT4 par le périphérique /dev/rbd2 :

/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

Regardez le contenu de ce répertoire :

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

Et comme vous pouvez le voir ci-dessus, il s'agit du contenu de votre base de données de l'application de bloc que vous avez créée.

[ Apprenez les bases de l'utilisation de Kubernetes dans cet aide-mémoire gratuit. ]

Récapitulez

Au début de cet article (deuxième partie de la série), vous avez créé un projet de démonstration avec lequel travailler. Vous avez également examiné le mappage d'application de bloc dans un cluster ODF à l'aide de la boîte à outils Rook et des commandes OpenShift.

Assurez-vous de lire la troisième partie, car elle contient des idées de mappage et de dépannage supplémentaires centrées sur le stockage et le mappage de fichiers.


Linux
  1. Méthode la plus efficace pour vider le contenu d'un fichier ?

  2. La différence entre les liens symboliques et les liens matériels ?

  3. Comment trouver le type d'un fichier Img et le monter ?

  4. lsinitramfs :liste le contenu du système de fichiers initrd.

  5. Avertissement libpng :version libpng incompatible dans l'application et la bibliothèque

Comment utiliser Sudo et le fichier Sudoers

Comment enregistrer un fichier dans Vim / Vi et quitter l'éditeur

Comment afficher le contenu d'une archive ou d'un fichier compressé sous Linux

Trouver le contenu de l'application OCP en mode bloc et fichier dans ODF :création d'un projet de stockage de fichiers

Afficher le contenu d'un fichier dans la ligne de commande Linux

Affichage du contenu du disque dur en binaire