Rook Ceph
Rook Cephは、Kubernetes上で動作する分散ストレージシステムです。PersistentVolumeを提供し、StatefulSetなどの永続化が必要なアプリケーションに対応します。
Rook Cephを使用すると、Kubernetes内で自己管理型の分散ストレージを構築できます。
概要
Rook Cephの主な特徴:
- Kubernetes-native な分散ストレージ
- 自動的なストレージのプロビジョニング
- Block、File、Object ストレージのサポート
- 高可用性とデータの冗長性
- スナップショット機能
前提条件
- Kubernetes 1.22以上
- 各ワーカーノードに未使用のディスク(推奨)
- 最低3つのワーカーノード(高可用性のため)
インストール
1. Rook Operatorのインストール
# クローン
git clone --single-branch --branch v1.13.0 https://github.com/rook/rook.git
cd rook/deploy/examples
# CRDとOperatorをデプロイ
kubectl create -f crds.yaml
kubectl create -f common.yaml
kubectl create -f operator.yaml
2. Cephクラスターの作成
# Cephクラスターの作成
kubectl create -f cluster.yaml
3. デプロイの確認
# Podの確認
kubectl get pods -n rook-ceph
# Cephクラスターの状態確認
kubectl get cephcluster -n rook-ceph
StorageClassの作成
Block Storage(RBD)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: rook-ceph
pool: replicapool
imageFormat: "2"
imageFeatures: layering
csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner
csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph
csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
csi.storage.k8s.io/fstype: ext4
allowVolumeExpansion: true
reclaimPolicy: Delete
File Storage(CephFS)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-cephfs
provisioner: rook-ceph.cephfs.csi.ceph.com
parameters:
clusterID: rook-ceph
fsName: myfs
pool: myfs-data0
csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner
csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph
csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
allowVolumeExpansion: true
reclaimPolicy: Delete
PVCの作成と使用
PersistentVolumeClaimの作成
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: rook-ceph-block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Podでの使用
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- name: my-volume
mountPath: /data
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-pvc
Cephダッシュボード
ダッシュボードへのアクセス
# Port Forward
kubectl port-forward -n rook-ceph svc/rook-ceph-mgr-dashboard 7000:7000
# パスワードの取得
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode
ブラウザで https://localhost:7000 を開き、ユーザー名
admin と取得したパスワードでログインします。
モニタリング
クラスターの状態確認
# Cephツールを使用
kubectl exec -n rook-ceph -it deploy/rook-ceph-tools -- bash
# Cephステータス
ceph status
# OSDの状態
ceph osd status
# 容量確認
ceph df
トラブルシューティング
一般的な問題
Podが起動しない場合:ノードにディスクが正しく認識されているか確認してください。
# ログの確認
kubectl logs -n rook-ceph deploy/rook-ceph-operator
# OSDの状態確認
kubectl get pods -n rook-ceph -l app=rook-ceph-osd
クリーンアップ
# Rook Cephの完全削除
kubectl delete -f cluster.yaml
kubectl delete -f operator.yaml
kubectl delete -f common.yaml
kubectl delete -f crds.yaml
# データの削除(各ノードで実行)
sudo rm -rf /var/lib/rook