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