GNU/Linux >> Tutoriales Linux >  >> Linux

Búsqueda de contenidos de aplicaciones OCP de bloques y archivos en ODF:creación del proyecto

Como se explica en la primera parte de esta serie de artículos, puede resultar difícil asignar ubicaciones de objetos de aplicación en clústeres de OpenShift Data Foundation (ODF). Mi objetivo es facilitarle este proceso mostrándole cómo establecer un contenedor de solución de problemas y luego cómo usarlo para la asignación de almacenamiento de archivos y bloques.

Asegúrese de leer la primera parte primero para comprender el entorno y el conjunto de herramientas necesario. Es hora de empezar creando el proyecto de demostración.

Crear el proyecto

A continuación, cree dos aplicaciones de prueba simples, una que use el bloque SC y la otra que use el archivo SC, para realizar las tareas de asignación de dónde se almacenan los datos de estas aplicaciones en el clúster ODF.

Primero, crea un proyecto llamado ocs-block-app para alojar la aplicación:

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

Puede agregar aplicaciones a este proyecto con new-app dominio. Por ejemplo, para crear una nueva aplicación de ejemplo en Ruby, intente:

oc new-app rails-postgresql-example

O usa kubectl para implementar una aplicación Kubernetes simple:

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

Luego, use una de las plantillas disponibles por OCP que hace uso de bloque. Una buena idea es usar la plantilla rails-pgsql-persistent :

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

rails-pgsql-persistent

En los parámetros disponibles en la plantilla, es posible ver que el tamaño de la solicitud de volumen es personalizable:

[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

Ejecute esta nueva aplicación y ajuste el tamaño de la solicitud de volumen a 5 GB:

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

Después de unos momentos, verifique que la aplicación sea funcional:

[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

Verifique que el PVC creado por la aplicación esté usando el bloque ODF SC, que en este caso es 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

En las especificaciones de PV utilizadas por el PVC, dentro del campo CSI, hay un atributo que proporciona el nombre de la imagen creada para la aplicación dentro del grupo de bloques de Ceph. Puede extraer el nombre de esta imagen de la siguiente manera:

[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 el nombre de la imagen en la mano, acceda nuevamente a la caja de herramientas y enumere los grupos existentes:

[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 

Recuerde que mencioné que el ocs-storagecluster-cephblockpool ¿La piscina se usa para bloques? Vea si puede encontrar su imagen dentro:

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

Ahí está tu imagen. Muestra más información al respecto:

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

Ver que tiene el mismo tamaño previamente definido para la creación de PVC. ¿Y qué pasa si aumentas la capacidad de PVC? Aumento de 5GB a 10GB:

[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

Vuelva a acceder al pod de la caja de herramientas. El tamaño de la imagen también se ha modificado, reflejando el cambio de tamaño del 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

¿Qué sucede si desea saber en qué dispositivo y host está asignada la imagen? El cliente de Ceph recupera el último mapa de clústeres. El algoritmo CRUSH calcula cómo asignar el objeto a un grupo de ubicación y luego calcula cómo asignar el grupo de ubicación a un OSD dinámicamente. Para encontrar la ubicación del objeto, todo lo que necesita es el nombre del objeto y el nombre del grupo:

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)

Ahora sé que mi objeto está en un PG que tiene OSD ID 1 como su dispositivo principal, así como réplicas en OSD ID 0 y 2. ¿En qué nodo de mi clúster está el demonio OSD 1? Ver a continuación:

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

Puede ver arriba que reside en el nodo ip-10-0-143-192.ec2.internal . ¿Y qué dispositivo se está utilizando en ese nodo? Ver a continuación:

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 

Ahora sé qué nodo y dispositivo (host ocs-deviceset-gp2-csi-1-data-085b8h ) mi imagen está encendida. Pero todavía no sé qué camino dentro de ese nodo es. Para ello verás otro atributo del PV que te dará esta información:

[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

Entonces, con el nombre del nodo, el dispositivo y la información del manejo del volumen en la mano, acceda al nodo y obtenga su imagen. Puede hacer esto buscando el nombre de la imagen en los puntos de montaje actuales del nodo o el nombre del controlador de volumen:

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

Puede ver que la imagen está montada en la siguiente ruta con un sistema de archivos EXT4 por el dispositivo /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

Mire el contenido de este directorio:

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

Y como puede ver arriba, estos son los contenidos de su base de datos de la aplicación de bloqueo que creó.

[ Aprenda los aspectos básicos del uso de Kubernetes en esta hoja de trucos gratuita. ]

Resumir

Al comienzo de este artículo (la segunda parte de la serie), creó un proyecto de demostración con el que trabajar. También observó el mapeo de aplicaciones de bloques dentro de un clúster ODF usando la caja de herramientas Rook y los comandos OpenShift.

Asegúrese de leer la tercera parte, ya que contiene ideas adicionales de mapeo y solución de problemas centradas en el almacenamiento y el mapeo de archivos.


Linux
  1. Encontrar contenidos de aplicaciones OCP de bloques y archivos en ODF:la infraestructura

  2. Advertencia de libpng:versión de libpng incompatible en la aplicación y la biblioteca

  3. Encontrar la palabra más larga en un archivo de texto

  4. Encontrar el contenido de un archivo en otro archivo

  5. ¿Cómo mostrar el contenido del archivo de forma recursiva?

Cómo usar Sudo y el archivo Sudoers

Cómo guardar un archivo en Vim/Vi y salir del editor

Cómo ver el contenido de un archivo o archivo comprimido en Linux

Búsqueda de contenidos de aplicaciones OCP de bloques y archivos en ODF:Creación de un proyecto de almacenamiento de archivos

Ver el contenido de un archivo en la línea de comandos de Linux

Ver el contenido del disco duro en binario