GNU/Linux >> Linux の 問題 >  >> Linux

ODFでのブロックおよびファイルOCPアプリケーションの内容の検索:プロジェクトの作成

このシリーズのパート1で説明したように、OpenShift Data Foundation(ODF)クラスターでアプリケーションオブジェクトの場所をマッピングするのは難しい場合があります。私の目標は、トラブルシューティングコンテナを確立する方法と、それをブロックストレージとファイルストレージの両方のマッピングに使用する方法を示すことで、このプロセスを簡単にすることです。

最初にパート1を読んで、環境と必要なツールキットを理解してください。デモプロジェクトを作成することから始めましょう。

プロジェクトを作成する

次に、2つの簡単なテストアプリケーションを作成します。1つはブロックSCを使用し、もう1つはファイルSCを使用して、これらのアプリケーションのデータがODFクラスターに保存されている場所をマッピングするタスクを実行します。

まず、 ocs-block-appという名前のプロジェクトを作成します アプリケーションをホストするには:

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

new-appを使用して、このプロジェクトにアプリケーションを追加できます 指図。たとえば、Rubyで新しいサンプルアプリケーションを作成するには、次のことを試してください。

 oc new-app rails-postgresql-example 

または、kubectlを使用します 単純なKubernetesアプリケーションをデプロイするには:

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

次に、ブロックを利用するOCPによって利用可能になったテンプレートの1つを使用します。テンプレートrails-pgsql-persistentを使用することをお勧めします :

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

rails-pgsql-persistent 

テンプレートで使用可能なパラメーターでは、ボリュームリクエストのサイズがカスタマイズ可能であることがわかります。

 [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 

この新しいアプリケーションを実行し、ボリュームリクエストのサイズを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. 

しばらくして、アプリケーションが機能していることを確認します。

 [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 

アプリケーションによって作成されたPVCが、ODFブロックSC(この場合は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

PVCで使用されるPV仕様では、CSIフィールド内に、Cephブロックプール内のアプリケーション用に作成されたイメージ名を提供する属性があります。この画像から次のように名前を抽出できます:

 [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 

画像の名前を手元に置いて、ツールボックスに再度アクセスし、既存のプールを一覧表示します。

 [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  

ocs-storagecluster-cephblockpool プールはブロックに使用されますか?中に画像が見つかるかどうかを確認してください:

 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 

あなたのイメージがあります。それに関するいくつかの詳細情報を表示します:

 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 

PVCの作成用に以前に定義されたものと同じサイズであることを確認してください。そして、PVCの容量を増やすとどうなりますか? 5GBから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

ツールボックスポッドに再度アクセスします。 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 

イメージがマップされているデバイスとホストを知りたい場合はどうなりますか? Cephクライアントは、最新のクラスターマップを取得します。 CRUSHアルゴリズムは、オブジェクトを配置グループにマップする方法を計算してから、配置グループをOSDに動的に割り当てる方法を計算します。オブジェクトの場所を見つけるために必要なのは、オブジェクト名とプール名だけです。

 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) 

これで、オブジェクトがプライマリデバイスとしてOSD ID 1を持ち、OSD ID0および2のレプリカを持つPGにあることがわかりました。クラスター内のどのノードにOSD1デーモンがありますか?以下を参照してください:

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

上記で、ノード ip-10-0-143-192.ec2.internalに存在することがわかります。 。そして、そのノードでどのデバイスが使用されていますか?以下を参照してください:

 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 の最大0.50000 osd.0をSSD 

これで、どのノードとデバイス( host ocs-deviceset-gp2-csi-1-data-085b8h )がわかりました。 )私の画像はオンです。しかし、それがそのノード内のどのパスであるかはまだわかりません。このために、この情報を提供するPVの別の属性が表示されます:

 [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 

したがって、ノード名、デバイス、およびボリュームハンドル情報を手元に置いて、ノードにアクセスし、イメージを取得します。これを行うには、ノードの現在のマウントポイントのイメージ名またはボリュームハンドルの名前をgrepします。

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

デバイス/dev/rbd2によって、EXT4ファイルシステムを使用してイメージが次のパスにマウントされていることがわかります。 :

 /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 

このディレクトリの内容を見てください:

 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 

上記のように、これらは作成したブロックアプリケーションのデータベースの内容です。

[この無料のチートシートでKubernetesの使用の基本を学びます。 ]

まとめ

この記事の冒頭(シリーズのパート2)で、使用するデモプロジェクトを作成しました。また、RookツールボックスとOpenShiftコマンドを使用して、ODFクラスター内のブロックアプリケーションマッピングについても確認しました。

パート3には、ファイルの保存とマッピングを中心とした追加のマッピングとトラブルシューティングのアイデアが含まれているので、必ずお読みください。


Linux
  1. ファイルの内容を空にする最も効率的な方法は?

  2. シンボリックリンクとハードリンクの違いは?

  3. Imgファイルのタイプを見つけてマウントする方法は?

  1. ODFでのブロックおよびファイルOCPアプリケーションの内容の検索:インフラストラクチャ

  2. テキストファイルで最も長い単語を見つける

  3. ファイルの内容を再帰的に表示するには?

  1. .exrcと.vimrcの違いは?

  2. イオリダイレクションとヘッドコマンド?

  3. lsinitramfs:initrd ファイル システムの内容を一覧表示します。