TECHSTEP

ITインフラ関連の記事を公開してます。

Rook-Cephクラスターを削除する際の手順

はじめに

Rook-Cephの検証をすると、何度かクラスターを構築することになるかと思うのですが、その際にノードに残ったデータ等を完全に削除する必要があります。削除手順自体は公式ドキュメントにも記載されていますが、ここに残しておきます。

作業対象

作業内容

Rook-Cephクラスターの削除は、以下の流れで行います。

  1. ストレージを利用するアプリケーションPodの削除
  2. CephClusterを利用するストレージプール等の削除
  3. CephClusterリソースの削除
  4. Operator Commonリソースの削除
  5. 各ノードに残ったデータの削除

1-4に関しては、デプロイ時に利用したyamlファイルを用いてkubectl deleteコマンドを実行すればよいですが、5に関してはいくつか操作が必要になります。

5の削除作業はstoreTypeによって内容が変わります。

共通作業

上述した1-4の作業を行います。今回はブロックストレージを利用した場合を載せます。

# ストレージを利用するアプリケーションの削除
[root@vm0 ceph]# kubectl delete -f pod.yaml


# CephBlockPool / StorageClassの削除
[root@vm0 rbd]# kubectl delete -f storageclass.yaml


# CephClusterリソースの削除
[root@vm0 ceph]# kubectl delete -f cluster.yaml


# 削除後の確認
[root@vm0 ceph]# kubectl get all -n rook-ceph


# Operator, Commonリソースの削除
[root@vm0 ceph]# kubectl delete -f operator.yaml
[root@vm0 ceph]# kubectl delete -f common.yaml


# 削除後の確認
[root@vm0 ceph]# kubectl get all -n rook-ceph

上記作業時、一部リソース(OSD Pod、CSI-Plugin Podなど)が削除されずに残る場合があります。そのため、削除後の確認作業は行ったほうがよいです。場合によってはこちらの手順を参照して残存したリソースを削除する必要もあります。

storeType: filestoreの場合

storeType: filestoreの場合、OSDのデータをディレクトリに保存します。保存場所はCephClusterリソースを定義するyamlファイル内のspec.storage.directories spec.storage.node.directoriesに記載されています。またMONのデータ保存場所はdataDirHostPathになります。

以下のyamlファイルでは、OSD・MONのデータ保存場所は共通で/dataにしています。

apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
  name: rook-ceph
  namespace: rook-ceph
spec:
  cephVersion:
    image: ceph/ceph:v14.2.5
    allowUnsupported: true
##### Rookで利用するディレクトリを指定 #####
  dataDirHostPath: /data
  skipUpgradeChecks: false
  continueUpgradeAfterChecksEvenIfNotHealthy: false
  mon:
    count: 1
    allowMultiplePerNode: true
  dashboard:
    enabled: true
    ssl: true
  storage:
    useAllNodes: true
    useAllDevices: false
    config:
      databaseSizeMB: "1024" # this value can be removed for environments with normal sized disks (100 GB or larger)
      journalSizeMB: "1024"  # this value can be removed for environments with normal sized disks (20 GB or larger)
      osdsPerDevice: "1" # this value can be overridden at the node or device level
##### OSDに利用するディレクトリを指定 #####
    directories:
    - path: /data

上記ファイルを利用した場合、上記指定場所に以下のようなデータが保存されています。

[root@vm2 ~]# ll /data
total 12
drwxr-xr-x 3 root root 4096 Feb  2 03:00 mon-a
drwxr--r-- 4  167  167 4096 Feb  2 03:00 osd0
drwxr-xr-x 4 root root 4096 Feb  2 03:00 rook-ceph


[root@vm2 ~]# ll /data/*
/data/mon-a:
total 4
drwxr-xr-x 3 167 167 4096 Feb  2 03:00 data

/data/osd0:
total 1048632
-rw------- 1 167 167         37 Feb  2 03:00 ceph_fsid
drwxr-xr-x 4 167 167       4096 Feb  2 03:00 current
-rw-r--r-- 1 167 167         37 Feb  2 03:00 fsid
-rw-r--r-- 1 167 167 1073741824 Feb  2 03:01 journal
-rw-r--r-- 1 167 167         56 Feb  2 03:00 keyring
-rw------- 1 167 167         21 Feb  2 03:00 magic
-rw------- 1 167 167          6 Feb  2 03:00 ready
-rw------- 1 167 167          3 Feb  2 03:00 require_osd_release
-rw-r--r-- 1 167 167       1088 Feb  2 03:00 rook-ceph.config
-rw------- 1 167 167          4 Feb  2 03:00 store_version
-rw------- 1 167 167         53 Feb  2 03:00 superblock
drwxr--r-- 2 167 167       4096 Feb  2 03:00 tmp
-rw------- 1 167 167         10 Feb  2 03:00 type
-rw------- 1 167 167          2 Feb  2 03:00 whoami

/data/rook-ceph:
total 16
-rw-r--r-- 1 root root  152 Feb  2 03:00 client.admin.keyring
drwxr-xr-x 3  167  167 4096 Feb  2 03:00 crash
drwxr-xr-x 2  167  167 4096 Feb  2 03:00 log
-rw-r--r-- 1 root root  882 Feb  2 03:00 rook-ceph.config
[root@vm2 ~]#

これらデータが残っている場合、次回クラスター構築時にエラーが発生します。例えばMON PodはdataDirHostPathにデータが残っている場合、クラスターの設定値を特定できず、クラスターと接続できない、OSD Podが作成されない、などの問題が発生します。

Rook v1.2時点では、これらデータはPod削除後も残るため、手動で削除する必要があります。

削除作業では、このデータをディレクトリごと削除します。これは利用するすべてのノード上で実行します。

# すべてのノード上で実行

[root@vm1 ~]# rm -rf /data/*

[root@vm1 ~]# ll /data
total 0

※参考リンク:

Rook Doc - Ceph Common Issues

storeType: bluestoreの場合

bluestoreを利用する場合、OSDのデータ保存には特定のデバイスを利用します。上述したdataDirHostPathの削除に加え、利用したデバイスの初期化が必要になります。

以下のyamlファイルでは、3つのノード上にある/dev/sddバイスを利用します。

apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
  name: rook-ceph
  namespace: rook-ceph
spec:
  cephVersion:
    image: ceph/ceph:v14.2.5
    allowUnsupported: true
##### Rookで利用するディレクトリを指定 #####
  dataDirHostPath: /data
  skipUpgradeChecks: false
  continueUpgradeAfterChecksEvenIfNotHealthy: false
  mon:
    count: 1
    allowMultiplePerNode: true
  dashboard:
    enabled: true
    ssl: true
  storage:
    useAllNodes: true
    useAllDevices: false
    config:
      databaseSizeMB: "1024" # this value can be removed for environments with normal sized disks (100 GB or larger)
      journalSizeMB: "1024"  # this value can be removed for environments with normal sized disks (20 GB or larger)
      osdsPerDevice: "1" # this value can be overridden at the node or device level
##### デバイスを指定 #####
    devices:
    - name: "sdd"

まず削除前は以下のような状態になっています。CephClusterをデプロイしOSDが作成されると、指定したデバイス上に論理ボリュームが作成されます。

# デバイスの利用状況確認

[root@vm3 ~]# lsblk
NAME                                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0                                         2:0    1    4K  0 disk
sda                                         8:0    0   30G  0 disk
|-sda1                                      8:1    0  500M  0 part /boot
|-sda2                                      8:2    0 29.5G  0 part /
sdb                                         8:16   0   16G  0 disk
|-sdb1                                      8:17   0   16G  0 part /mnt/resource
sdc                                         8:32   0  100G  0 disk
|-sdc1                                      8:33   0  100G  0 part /data
sdd                                         8:48   0   64G  0 disk
|-ceph--6dc8fa64--5f15--41d7--b291--8524ccc20416-osd--data--d58cf1ec--99c9--4e08--8367--10b78426a883
                                          253:0    0   63G  0 lvm


[root@vm3 ~]# ll /dev/ceph-*
total 0
lrwxrwxrwx 1 root root 7 Feb  1 03:53 osd-data-d58cf1ec-99c9-4e08-8367-10b78426a883 -> ../dm-0


[root@vm3 ~]# ll /dev/mapper/ceph-*
lrwxrwxrwx 1 root root 7 Feb  1 03:53 /dev/mapper/ceph--6dc8fa64--5f15--41d7--b291--8524ccc20416-osd--data--d58cf1ec--99c9--4e08--8367--10b78426a883 -> ../dm-0


[root@vm3 ~]# dmsetup info /dev/dm-0
Name:              ceph--6dc8fa64--5f15--41d7--b291--8524ccc20416-osd--data--d58cf1ec--99c9--4e08--8367--10b78426a883
State:             ACTIVE
Read Ahead:        8192
Tables present:    LIVE
Open count:        0
Event number:      0
Major, minor:      253, 0
Number of targets: 1
UUID: LVM-AjO1z5wu5PnoF8xfLMMDpDFqHb2MdgFj0TIe8JIWhst6l0Gt5VQ070JQFbNJvYji


# dataDirHostPathの確認

[root@vm3 ~]# ll /data
total 4
drwxr-xr-x 4 root root 4096 Jan 31 04:18 rook-ceph
[root@vm3 ~]#

上記ボリューム等を削除するため、以下のような手順を実施します。

# すべてのノード上で実行

# sgdiskコマンドがない場合はインストール

[root@vm1 ~]# yum install gdisk -y
[root@vm1 ~]# sgdisk --version
GPT fdisk (sgdisk) version 0.8.10


# GPT/MBR構成を削除し、利用可能な状態にする

[root@vm1 ~]# sgdisk --zap-all /dev/sdd
Creating new GPT entries.
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.


# ceph-volumeにマッピングされたデバイスを削除

[root@vm1 ~]# ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %
[root@vm1 ~]# 


# ceph-volume情報の削除(必要に応じて)

[root@vm1 ~]# rm -rf /dev/ceph-*


# dataDirHostPath配下のデータを削除

[root@vm1 ~]# rm -rf /data/*


# 削除後の確認

[root@vm1 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0      2:0    1    4K  0 disk
sda      8:0    0   30G  0 disk
|-sda1   8:1    0  500M  0 part /boot
|-sda2   8:2    0 29.5G  0 part /
sdb      8:16   0   16G  0 disk
|-sdb1   8:17   0   16G  0 part /mnt/resource
sdc      8:32   0  100G  0 disk
|-sdc1   8:33   0  100G  0 part /data
sdd      8:48   0   64G  0 disk


[root@vm1 ~]# ll /dev/mapper/ceph-*
ls: cannot access /dev/mapper/ceph-*: No such file or directory


[root@vm1 ~]# ll /dev/ceph-*
ls: cannot access /dev/ceph-*: No such file or directory


[root@vm1 ~]# ll /data
total 0


[root@vm1 ~]# dmsetup info /dev/dm-0
Device /dev/dm-0 not found
Command failed.

参考ドキュメント

Rook Doc - Cleaning up a Cluster