ウェブサイト検索

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 を設定する方法

関連記事: