GNU/Linux >> Belajar Linux >  >> Linux

Menemukan konten aplikasi OCP blok dan file di ODF:Membuat proyek penyimpanan file

Seri artikel ini membantu Anda lebih memahami cara memetakan data aplikasi dalam kluster ODF dengan menggunakan toolkit Rook dan perintah OpenShift. Pengetahuan ini dan alat terkait dapat sangat berguna untuk pemecahan masalah serta pemahaman yang lebih dalam tentang penyimpanan data di ODF. Pastikan Anda telah membaca bagian satu dan dua sebelum membaca yang ini (bagian ketiga dari seri ini).

Buat proyek penyimpanan file

Anda akan mengikuti prinsip yang sama yang telah Anda gunakan sejauh ini untuk melakukan sesuatu yang mirip dengan proyek penyimpanan blok sebelumnya dengan aplikasi yang menggunakan CephFS dari ODF untuk penyimpanan bersama. Buat proyek baru bernama ocs-file-app :

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

Anda dapat menambahkan aplikasi ke proyek ini dengan new-app memerintah. Misalnya, untuk membuat aplikasi contoh baru di Ruby, coba:

oc new-app rails-postgresql-example 

Atau gunakan kubectl untuk menerapkan aplikasi Kubernetes sederhana:

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

Untuk contoh ini, gunakan Demo Unggah File PHP OpenShift aplikasi (yang saya ambil dari proyek Christian Hernandez—kredit jatuh tempo) yang akan melayani minat Anda dengan baik:

[alexon@bastion ~]$ oc new-app openshift/php:7.2-ubi8~https://github.com/AlexonOliveiraRH/openshift-php-upload-demo.git --name=file-uploader
--> Found image 67520c7 (5 weeks old) in image stream "openshift/php" under tag "7.2-ubi8" for "openshift/php:7.2-ubi8"

    Apache 2.4 with PHP 7.2 
   
----------------------- 
    PHP 7.2 available as container is a base platform for building and running various PHP 7.2 applications and frameworks. PHP is an HTML-embedded scripting language. PHP attempts to make it easy for developers to write dynamically generated web pages. PHP also offers built-in database integration for several commercial and non-commercial database management systems, so writing a database-enabled webpage with PHP is fairly simple. The most common use of PHP coding is probably as a replacement for CGI scripts.

    Tags: builder, php, php72, php-72

    * A source build using source code from https://github.com/AlexonOliveiraRH/openshift-php-upload-demo.git will be created
      * The resulting image will be pushed to image stream tag "file-uploader:latest"
      * Use 'oc start-build' to trigger a new build

--> Creating resources ...
   
imagestream.image.openshift.io "file-uploader" created
   
buildconfig.build.openshift.io "file-uploader" created
    deployment.apps "file-uploader" created
    service "file-uploader" created
--> Success
    Build scheduled, use 'oc logs -f buildconfig/file-uploader' to track its progress.
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose service/file-uploader' 
    Run' oc status' to view your app.

[alexon@bastion ~]$ oc expose svc/file-uploader -n ocs-file-app

route.route.openshift.io/file-uploader exposed

[alexon@bastion ~]$ oc scale --replicas=3 deploy/file-uploader -n ocs-file-app

deployment.apps/file-uploader scaled

[alexon@bastion ~]$ oc get pods -n ocs-file-app

NAME READY STATUS     
RESTARTS AGE
file-uploader-1-build 0/1 Completed  
0 79s
file-uploader-764468fb46-6vlxg 1/1    
Running 0 11s
file-uploader-764468fb46-cr4mc 1/1    
Running 0 7s
file-uploader-764468fb46-vtsq5 1/1    
Running 0 15s 

Aplikasi baru ini menggunakan ocs-storagecluster-cephfs SC:

[alexon@bastion ~]$ oc set volume deploy/file-uploader --add --name=ocs-file-app \
> -t pvc --claim-mode=ReadWriteMany --claim-size=1Gi \
> --claim-name=ocs-file-app --claim-class=ocs-storagecluster-cephfs \
> --mount-path=/opt/app-root/src/uploaded \
> -n ocs-file-app

deployment.apps/file-uploader volume updated
NAME READY STATUS     
RESTARTS AGE
file-uploader-1-build 0/1 Completed  
0 2m7s
file-uploader-69b547dfd6-gvhfk 1/1    
Running 0 33s
file-uploader-69b547dfd6-nzhl8 1/1    
Running 0 26s
file-uploader-69b547dfd6-qbj28 1/1    
Running 0 15s

[alexon@bastion ~]$ oc get pvc

NAME          
STATUS VOLUME                                    
CAPACITY ACCESS MODES STORAGECLASS AGE
ocs-file-app  
Bound   
pvc-73c1bda0-2256-407d-885d-e5bcfd221b27 1Gi       
RWX           
ocs-storagecluster-cephfs 44m 

Sebagai pengujian sederhana, buat file bernama testfile.txt dengan "Halo dunia!" konten dan unggah ke aplikasi Anda melalui UI aplikasi:

[alexon@bastion ~]$ oc get route file-uploader -n ocs-file-app -o jsonpath --template="http://{.spec.host}{'\n'}"

http://file-uploader-ocs-file-app.apps.example.com

[alolivei@alolivei ~]$ echo 'Hello world!' >> testfile.txt

[alolivei@alolivei ~]$ cat testfile.txt 

Hello world! 

Unggah file:

Dan inilah hasilnya:

Untuk memetakan objek file, prosedurnya sedikit berbeda dari objek blok. Itu karena CephFS menggunakan alamat inode file yang dikonversi ke heksadesimal untuk menamainya di dalam kumpulan file. Oleh karena itu, perlu untuk menemukan objek menggunakan salah satu pod aplikasi di direktori yang dipasang di dalam pod oleh CephFS, mencari tahu inode-nya, dan kemudian mengubah nomor inode menjadi heksadesimal, seperti pada contoh di bawah ini:

[alexon@bastion ~]$ oc get pods

NAME READY STATUS RESTARTS  
AGE
file-uploader-1-build 0/1 Completed  
0 8m32s
file-uploader-69b547dfd6-gvhfk 1/1    
Running 0 6m58s
file-uploader-69b547dfd6-nzhl8 1/1    
Running 0 6m51s
file-uploader-69b547dfd6-qbj28 1/1    
Running 0 6m40s

[alexon@bastion ~]$ oc rsh file-uploader-69b547dfd6-gvhfk

sh-4.4$ mount | grep csi-vol

172.30.38.159:6789,172.30.136.12:6789,172.30.73.120:6789:/volumes/csi/csi-vol-8a803889-bcce-11eb-8d22-0a580a81023e/3910620a-e68c-424b-8982-8f2b21c26a8a on /opt/app-root/src/uploaded type ceph (rw,relatime,seclabel,name=csi-cephfs-node,secret=<hidden>,acl,mds_namespace=ocs-storagecluster-cephfilesystem)

sh-4.4$ ls /opt/app-root/src/uploaded

testfile.txt

sh-4.4$ stat -c %i /opt/app-root/src/uploaded/testfile.txt | xargs printf '%x\n'

1000000001a 

Sekarang setelah Anda memiliki informasi ini, ikuti langkah yang sama seperti sebelumnya, dengan beberapa perbedaan kecil, untuk menemukan objek di dalam ocs-storagecluster-cephfilesystem-data0 pool dan juga node yang terhubung dengannya, sebagai berikut:

sh-4.4$ ceph df RAW STORAGE:     CLASS SIZE        AVAIL USED RAW USED %RAW USED      ssd 1.5 TiB 1.2 TiB     253 GiB 256 GiB 16.68      TOTAL 1.5 TiB     1.2 TiB 253 GiB 256 GiB 16.68    POOLS:     POOL                                           ID STORED OBJECTS USED        %USED MAX AVAIL      ocs-storagecluster-cephblockpool 1 84 GiB 22.45k     253 GiB 19.43 350 GiB      ocs-storagecluster-cephfilesystem-metadata 2     1.5 MiB 26 4.5 MiB 0       350 GiB      ocs-storagecluster-cephfilesystem-data0 3       171 B 2 24 KiB 0       350 GiB  sh-4.4$ rados -p ocs-storagecluster-cephfilesystem-data0 ls | grep 1000000001a 1000000001a.00000000 sh-4.4$ rados -p ocs-storagecluster-cephfilesystem-data0 stat2 1000000001a.00000000 ocs-storagecluster-cephfilesystem-data0/1000000001a.00000000 mtime 2021-05-24T20:33:51.179464+0000, size 13

Sepertinya Anda menemukan objek Anda. Cara sederhana dan cepat untuk memvalidasi ini adalah dengan mengekspornya dari dalam kumpulan dan memeriksa isinya:

sh-4.4$ rados -p ocs-storagecluster-cephfilesystem-data0 get 1000000001a.00000000 

/tmp/output.txt

sh-4.4$ cat /tmp/output.txt 

Hello world! 

Sekarang selesaikan proses dan petakan di simpul mana file itu berada:

sh-4.4$ ceph osd map ocs-storagecluster-cephfilesystem-data0 1000000001a.00000000

osdmap e405 pool 'ocs-storagecluster-cephfilesystem-data0' (3) object '1000000001a.00000000' -> pg 3.a8154e0 (3.0) -> up ([2,1,0], p2) acting ([2,1,0], p2)

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 | 85.4G | 426G | 86 | 1221k 
| 0 |    
0 | exists,up |
| 1 | ip-10-0-143-192.ec2.internal | 85.4G | 
426G | 78 | 1678k |   
0 | 0  
| exists,up |
| 2 | ip-10-0-154-20.ec2.internal | 85.4G | 426G | 67 | 643k 
| 2 |  
106 | exists,up |
+----+------------------------------+-------+-------+--------+---------+--------+---------+-----------+

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  

Sekali lagi, Anda mengetahui bahwa objek berada dalam PG dengan OSD ID 2 sebagai utamanya, dengan replikanya di OSD ID 1 dan 0, bahwa OSD ini menggunakan host perangkat ocs-deviceset-gp2-csi-2- data-0n9lkb di host ip-10-0-154-20.ec2.internal . Jika Anda ingin memastikan bahwa ini adalah simpul yang benar, periksa perangkat dengan lsblk atau dmsetup :

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

sh-4.4# lsblk | grep ocs-deviceset-gp2-csi-2-data-0n9lkb
`-ocs-deviceset-gp2-csi-2-data-0n9lkb-block-dmcrypt 253:0 0 512G 
0 crypt 

sh-4.4# dmsetup ls | grep ocs-deviceset-gp2-csi-2-data-0n9lkb
ocs-deviceset-gp2-csi-2-data-0n9lkb-block-dmcrypt (253:0) 

Menggunakan nama PV yang digunakan oleh PVC dari aplikasi yang Anda lihat sebelumnya, grep dan lihat di mana jalur yang tersedia untuk aplikasi dipasang:

sh-4.4# mount | grep pvc-73c1bda0-2256-407d-885d-e5bcfd221b27

172.30.38.159:6789,172.30.136.12:6789,172.30.73.120:6789:/volumes/csi/csi-vol-8a803889-bcce-11eb-8d22-0a580a81023e/3910620a-e68c-424b-8982-8f2b21c26a8a on /host/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-73c1bda0-2256-407d-885d-e5bcfd221b27/globalmount type ceph (rw,relatime,seclabel,name=csi-cephfs-node,secret=<hidden>,acl,mds_namespace=ocs-storagecluster-cephfilesystem)
172.30.38.159:6789,172.30.136.12:6789,172.30.73.120:6789:/volumes/csi/csi-vol-8a803889-bcce-11eb-8d22-0a580a81023e/3910620a-e68c-424b-8982-8f2b21c26a8a on /host/var/lib/kubelet/pods/ac40b1fa-a08d-46b5-8bb6-dc55a5638e9e/volumes/kubernetes.io~csi/pvc-73c1bda0-2256-407d-885d-e5bcfd221b27/mount type ceph (rw,relatime,seclabel,name=csi-cephfs-node,secret=<hidden>,acl,mds_namespace=ocs-storagecluster-cephfilesystem) 

Terakhir, lihat isi direktori, dan Anda akan menemukan objek Anda di dalamnya, siap untuk divisualisasikan:

sh-4.4# ls /host/var/lib/kubelet/pods/ac40b1fa-a08d-46b5-8bb6-dc55a5638e9e/volumes/kubernetes.io~csi/pvc-73c1bda0-2256-407d-885d-e5bcfd221b27/mount

testfile.txt

sh-4.4# cat /host/var/lib/kubelet/pods/ac40b1fa-a08d-46b5-8bb6-dc55a5638e9e/volumes/kubernetes.io~csi/pvc-73c1bda0-2256-407d-885d-e5bcfd221b27/mount/estfile.txt 

Hello world!
sh-4.4# ls /host/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-73c1bda0-2256-407d-885d-e5bcfd221b27/globalmount

testfile.txt

sh-4.4# cat /host/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-73c1bda0-2256-407d-885d-e5bcfd221b27/globalmount/testfile.txt 

Hello world! 

Anda sekarang tahu cara menemukan dan memetakan informasi objek file di cluster, seperti yang Anda lihat di artikel dua dengan informasi blok.

[ Dapatkan buku gratis ini dari Red Hat dan O'Reilly - Operator Kubernetes:Mengotomatiskan Platform Orkestrasi Kontainer. ]

Menutup

Pendekatan ODF untuk penyimpanan terdistribusi dan terukur sangat berbeda dari solusi penyimpanan lainnya. Mungkin sulit untuk memahami di mana objek aplikasi disimpan dalam cluster, yang menghadirkan tantangan saat memecahkan masalah (dan mendesain).

Seri artikel ini adalah demonstrasi dasar tentang cara kerja pemetaan objek aplikasi ODF. Di bagian pertama, Anda menetapkan lingkungan dan utilitas yang diperlukan. Bagian dua meliputi penyimpanan blok sementara bagian ketiga memeriksa struktur penyimpanan file. Sekarang setelah Anda tahu cara melakukannya, manfaatkan dengan baik.


Linux
  1. Komunikasi antar-proses di Linux:Penyimpanan bersama

  2. Membuat Dan Menjalankan Aplikasi Ruby On Rails

  3. Pedoman pengujian aplikasi dan beban

  1. Cara memblokir pengguna non-root dari membuat entri crontab di Linux

  2. Cara tar, untar file dan melihat isi file tar di Linux

  3. Utas dan deskriptor file

  1. unix - kepala DAN ekor file

  2. Mengapa tautan simbolis saya membuat file dan bukan folder?

  3. xauth tidak membuat file .Xauthority