Kubernetes/OpenShift で Rook 用 Ceph ツールボックスを実行する |
Kubernetes/OpenShift で実行されている Rook Ceph クラスターで Ceph コマンドを実行するにはどうすればよいですか? rook で Kubernetes 上の Ceph を使用する場合、問題が発生したときにトラブルシューティングを行うために ceph コマンド ライン ツールにアクセスする方法が必要になります。 Rook は CNCF 認定を取得しており、本番環境に対応したオープンソースの Kubernetes 用クラウドネイティブ ストレージ ソリューションです。ファイル、ブロック、オブジェクト ストレージの管理が容易になります。
rook-ceph ツールボックスは、Ceph のデバッグとテストに使用される一般的なツールを備えたポッドです。 Kubernetes 上で Rook を実行する場合、Ceph を直接構成できます。これは、Rook-Ceph ツールボックス ポッドから Ceph の CLI を使用して実現されます。ツールボックス コンテナから、Ceph 構成の変更、マネージャー モジュールの有効化、ユーザーやプールの作成などを行うことができます。
Kubernetes で Ceph Toolbox を実行する
rook ツールボックスは、Kubernetes クラスター内のデプロイメントとして実行できます。 rook がデプロイされた Kubernetes クラスターが実行されていることを確認したら、 rook-ceph-tools ポッドを起動します。
ツールボックス展開ファイルを作成します。
vim toolbox.yaml
以下のデータをファイルに追加します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: rook-ceph-tools
namespace: rook-ceph # namespace:cluster
labels:
app: rook-ceph-tools
spec:
replicas: 1
selector:
matchLabels:
app: rook-ceph-tools
template:
metadata:
labels:
app: rook-ceph-tools
spec:
dnsPolicy: ClusterFirstWithHostNet
containers:
- name: rook-ceph-tools
image: rook/ceph:master
command: ["/bin/bash"]
args: ["-m", "-c", "/usr/local/bin/toolbox.sh"]
imagePullPolicy: IfNotPresent
tty: true
env:
- name: ROOK_CEPH_USERNAME
valueFrom:
secretKeyRef:
name: rook-ceph-mon
key: ceph-username
- name: ROOK_CEPH_SECRET
valueFrom:
secretKeyRef:
name: rook-ceph-mon
key: ceph-secret
volumeMounts:
- mountPath: /etc/ceph
name: ceph-config
- name: mon-endpoint-volume
mountPath: /etc/rook
volumes:
- name: mon-endpoint-volume
configMap:
name: rook-ceph-mon-endpoints
items:
- key: data
path: mon-endpoints
- name: ceph-config
emptyDir: {}
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 5
ファイルを保存したら、rook-ceph-tools ポッドを起動します。
kubectl create -f toolbox.yaml
ツールボックス ポッドがコンテナーをダウンロードし、実行状態になるまで待ちます。
kubectl -n rook-ceph get pod -l "app=rook-ceph-tools"
rook-ceph-tools ポッドが実行されたら、次のように接続できます。
kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash
ツールボックスの使用が完了したら、デプロイメントを削除できます。
kubectl -n rook-ceph delete deployment rook-ceph-tools
OpenShift Container Storage (OCS) v4.2+ で Ceph Toolbox を実行する
Rook を使用する OpenShift Container Storage を実行している場合。まず、以下のコマンドを実行して Ceph ツールを有効にします。
oc patch OCSInitialization ocsinit -n openshift-storage --type json --patch '[{ "op": "replace", "path": "/spec/enableCephTools", "value": true }]'
新しいファイルを作成します。
vim toolbox.yaml
作成したファイルに以下の内容を追加します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: rook-ceph-tools
namespace: openshift-storage
labels:
app: rook-ceph-tools
spec:
replicas: 1
selector:
matchLabels:
app: rook-ceph-tools
template:
metadata:
labels:
app: rook-ceph-tools
spec:
dnsPolicy: ClusterFirstWithHostNet
containers:
- name: rook-ceph-tools
image: registry.redhat.io/ocs4/rook-ceph-rhel8-operator:latest
command: ["/tini"]
args: ["-g", "--", "/usr/local/bin/toolbox.sh"]
imagePullPolicy: IfNotPresent
env:
- name: ROOK_ADMIN_SECRET
valueFrom:
secretKeyRef:
name: rook-ceph-mon
key: admin-secret
securityContext:
privileged: true
volumeMounts:
- mountPath: /dev
name: dev
- mountPath: /sys/bus
name: sysbus
- mountPath: /lib/modules
name: libmodules
- name: mon-endpoint-volume
mountPath: /etc/rook
# if hostNetwork: false, the "rbd map" command hangs, see https://github.com/rook/rook/issues/2021
hostNetwork: true
volumes:
- name: dev
hostPath:
path: /dev
- name: sysbus
hostPath:
path: /sys/bus
- name: libmodules
hostPath:
path: /lib/modules
- name: mon-endpoint-volume
configMap:
name: rook-ceph-mon-endpoints
items:
- key: data
path: mon-endpoints
rook-ceph ツールボックス ポッドを起動した後、
oc create -f toolbox.yaml
ツールボックス ポッドがコンテナーをダウンロードし、実行状態になるまで待ちます。
$ oc -n openshift-storage get pod -l "app=rook-ceph-tools"
NAME READY STATUS RESTARTS AGE
rook-ceph-tools-86cbb6dddb-vnht9 1/1 Running 0 6m49s
rook-ceph ツールボックス ポッドが実行されたら、次のように接続できます。
oc -n openshift-storage exec -it $(oc -n openshift-storage get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash
トラブルシューティング用の一般的な Ceph コマンド
Ceph クラスターのトラブルシューティングを行うための一般的なコマンドをいくつか示します。
ceph status
ceph osd status
ceph osd df
ceph osd utilization
ceph osd pool stats
ceph osd tree
ceph pg stat
すべてのコマンドはツールボックス コンテナ上で実行できます。以下の例を参照してください。
# ceph -s
cluster:
id: 58a41eac-5550-42a2-b7b2-b97c7909a833
health: HEALTH_WARN
1 osds down
1 host (1 osds) down
1 rack (1 osds) down
Degraded data redundancy: 91080/273240 objects degraded (33.333%), 80 pgs degraded, 104 pgs undersized
services:
mon: 3 daemons, quorum a,b,c (age 2h)
mgr: a(active, since 2h)
mds: ocs-storagecluster-cephfilesystem:1 {0=ocs-storagecluster-cephfilesystem-a=up:active} 1 up:standby-replay
osd: 3 osds: 2 up (since 2h), 3 in (since 4w)
rgw: 1 daemon active (ocs.storagecluster.cephobjectstore.a)
task status:
data:
pools: 10 pools, 104 pgs
objects: 91.08k objects, 335 GiB
usage: 670 GiB used, 3.3 TiB / 4.0 TiB avail
pgs: 91080/273240 objects degraded (33.333%)
80 active+undersized+degraded
24 active+undersized
io:
client: 7.7 KiB/s rd, 24 MiB/s wr, 3 op/s rd, 236 op/s wr
OSDツリーを確認してください。
# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 5.99698 root default
-4 1.99899 rack rack0
-3 1.99899 host ocs-deviceset-0-0-prf65
0 ssd 1.99899 osd.0 down 1.00000 1.00000
-12 1.99899 rack rack1
-11 1.99899 host ocs-deviceset-1-0-mfgmx
2 ssd 1.99899 osd.2 up 1.00000 1.00000
-8 1.99899 rack rack2
-7 1.99899 host ocs-deviceset-2-0-b96pk
1 ssd 1.99899 osd.1 up 1.00000 1.00000
プールのリストを取得します。
# ceph osd lspools
1 ocs-storagecluster-cephblockpool
2 ocs-storagecluster-cephobjectstore.rgw.control
3 ocs-storagecluster-cephfilesystem-metadata
4 ocs-storagecluster-cephobjectstore.rgw.meta
5 ocs-storagecluster-cephfilesystem-data0
6 ocs-storagecluster-cephobjectstore.rgw.log
7 .rgw.root
8 ocs-storagecluster-cephobjectstore.rgw.buckets.index
9 ocs-storagecluster-cephobjectstore.rgw.buckets.non-ec
10 ocs-storagecluster-cephobjectstore.rgw.buckets.data
参照:
- ルークツールボックス
Ceph と Kubernetes の詳細:
- Ceph Storage Cluster でのプールの作成
- Cephfs を使用した Kubernetes 用 Ceph 永続ストレージ
- Ceph RBD を使用した Kubernetes の永続ストレージ
- Ceph Object Gateway ストレージ用に AWS S3 CLI を設定する方法