はじめに
Rook-Cephの検証をすると、何度かクラスターを構築することになるかと思うのですが、その際にノードに残ったデータ等を完全に削除する必要があります。削除手順自体は公式ドキュメントにも記載されていますが、ここに残しておきます。
作業対象
- Rook version: ver 1.2
- Kubernetes version: 1.17.0
- Masterノード: 1台
- Workerノード: 3台
- Kubernetes環境: Azure上に仮想マシンを構築し、Kubeadmを用いてクラスターを作成
作業内容
Rook-Cephクラスターの削除は、以下の流れで行います。
- ストレージを利用するアプリケーションPodの削除
CephCluster
を利用するストレージプール等の削除CephCluster
リソースの削除Operator
Common
リソースの削除- 各ノードに残ったデータの削除
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
※参考リンク:
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.