3 Cephストレージの使用
この章では、Rookモジュールを使用して、Oracle Cloud Native EnvironmentのKubernetesアプリケーションにCephを使用して動的にプロビジョニングされる永続ストレージを設定する方法について説明します。
CephClusterの作成
この項では、CephClusterの作成方法に関する基本的な例を示します。
Rook構成ファイルを使用してCephクラスタを作成しない場合は、Rookモジュールのデプロイ後に1つ以上のクラスタを作成できます。 これを行うには、kubectl
コマンドを使用して、CephCluster CRDをデプロイします。
たとえば、YAMLファイルで次のCephCluster CRDを使用する場合:
---
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: rook-ceph
namespace: rook
spec:
cephVersion:
image: container-registry.oracle.com/olcne/ceph:v17.2.5
imagePullPolicy: Always
dataDirHostPath: /var/lib/rook
mon:
count: 3
allowMultiplePerNode: false
dashboard:
enabled: false
storage:
useAllNodes: true
useAllDevices: false
deviceFilter: sdb
コントロール・プレーン・ノードで、kubectl apply
コマンドを使用して、ファイルとともにCephClusterを作成します:
kubectl apply -f filename.yaml
CephClusterが作成されます。 CephClusterが作成されたことを確認するには、次を使用します:
kubectl get cephcluster --namespace rook
出力は次のようになります:
NAME DATADIRHOSTPATH MONCOUNT AGE PHASE MESSAGE HEALTH ...
rook-ceph /var/lib/rook 3 4m29s Ready Cluster created successfully HEALTH ...
CephBlockPoolストレージの作成
この項では、CephBlockPoolストレージを作成して使用し、Kubernetesで実行されているアプリケーションに永続ブロック・ストレージを提供できることを確認するための基本的なテストについて説明します。
Rook構成ファイルを使用してCephBlockPoolを作成しない場合は、Rookモジュールのデプロイ後に1つ以上作成できます。 これを行うには、kubectl
コマンドを使用して、CephBlockPool CRDをデプロイします。
たとえば、YAMLファイルで次のCephBlockPool CRDを使用する場合:
---
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replicapool
namespace: rook
spec:
failureDomain: host
replicated:
size: 3
requireSafeReplicaSize: true
コントロール・プレーン・ノードで、kubectl apply
コマンドを使用して、ファイルとともにCephBlockPoolを作成します:
kubectl apply -f filename.yaml
CephBlockPoolが作成されます。 CephBlockPoolが作成されたことを確認するには、次を使用します:
kubectl get cephblockpool --namespace rook
出力は次のようになります:
NAME PHASE
replicapool Ready
Rook構成ファイルを使用してCephBlockPoolのStorageClassを作成しない場合は、Rookモジュールのデプロイ後に作成できます。
たとえば、YAMLファイルで次のStorageClass CRDを使用する場合:
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: rook.rbd.csi.ceph.com
parameters:
clusterID: rook
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
csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner
csi.storage.k8s.io/controller-expand-secret-namespace: rook
csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
csi.storage.k8s.io/node-stage-secret-namespace: rook
csi.storage.k8s.io/fstype: ext4
allowVolumeExpansion: true
reclaimPolicy: Delete
コントロール・プレーン・ノードで、kubectl apply
コマンドを使用して、ファイルとともにStorageClassを作成します:
kubectl apply -f filename.yaml
StorageClassが作成されます。 StorageClassが作成されたことを確認するには、次を使用します:
kubectl get sc
出力は次のようになります:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ...
rook-ceph-block (default) rook.rbd.csi.ceph.com Delete Immediate ...
CephBlockPoolストレージを使用するテスト・アプリケーションを作成するには:
-
Kubernetes PersistentVolumeClaimファイルを作成します。 コントロール・プレーン・ノードで、
pvc-cephblock.yaml
という名前のファイルを作成します。 ファイルに次の内容をコピーします。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myrook-block-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
-
Kubernetes PersistentVolumeClaimを作成します。
kubectl apply -f pvc-cephblock.yaml
-
kubectl get pvc
コマンドを使用してPersistentVolumeClaimが作成されていることがわかります:kubectl get pvc
出力は次のようになります:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myrook-block-pvc Bound pvc-72da7... 1Gi RWO rook-ceph-block 1h
kubectl describe pvc
コマンドを使用して、PersistentVolumeClaimの詳細を取得できます。 たとえば:kubectl describe pvc myrook-block-pvc
出力は次のようになります:
Name: myrook-block-pvc Namespace: default StorageClass: rook-ceph-block Status: Bound Volume: pvc-72da7cbf-9e4e-49c9-92cf-65047e3780dd Labels: <none> Annotations: pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes volume.beta.kubernetes.io/storage-provisioner: rook.rbd.csi.ceph.com volume.kubernetes.io/storage-provisioner: rook.rbd.csi.ceph.com Finalizers: [kubernetes.io/pvc-protection] Capacity: 1Gi Access Modes: RWO VolumeMode: Filesystem Used By: <none> Events: ...
-
PersistentVolumeClaimを使用するKubernetesアプリケーションを作成します。
nginx-block.yaml
という名前のファイルを作成し、次のファイルをファイルにコピーします。apiVersion: apps/v1 kind: Deployment metadata: labels: run: mynginx name: mynginx-block spec: replicas: 1 selector: matchLabels: run: mynginx template: metadata: labels: run: mynginx spec: containers: - image: container-registry.oracle.com/olcne/nginx:1.17.7 name: mynginx ports: - containerPort: 80 volumeMounts: - name: nginx-pvc mountPath: /usr/share/nginx/html volumes: - name: nginx-pvc persistentVolumeClaim: claimName: myrook-block-pvc
-
アプリケーションを起動します:
kubectl apply -f nginx-block.yaml
-
kubectl get deployment
コマンドを使用して、アプリケーションが実行されていることを確認できます:kubectl get deployment
出力は次のようになります:
NAME READY UP-TO-DATE AVAILABLE AGE mynginx-block 1/1 1 1 65s
-
アプリケーションがPersistentVolumeClaimを使用して、
kubectl describe deployment
コマンドを使用してCephBlockPoolストレージに永続ストレージを提供していることがわかります:kubectl describe deployment mynginx-block
出力は次のようになります:
... Pod Template: Labels: run=mynginx Containers: mynginx: Image: container-registry.oracle.com/olcne/nginx:1.17.7 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: /usr/share/nginx/html from nginx-pvc (rw) Volumes: nginx-pvc: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: myrook-block-pvc ReadOnly: false ...
-
次を使用して、テスト・アプリケーションを削除できます:
kubectl delete deployment mynginx-block
-
次を使用して、PersistentVolumeClaimを削除できます:
kubectl delete pvc myrook-block-pvc
CephFilesystemストレージの作成
この項では、CephFilesystemストレージを使用して、Kubernetesで実行されているアプリケーションに永続ストレージを提供できることを確認するための基本的なテストについて説明します。
Rook構成ファイルを使用してCephFilesystemを作成しない場合は、Rookモジュールのデプロイ後に1つ以上作成できます。 これを行うには、kubectl
コマンドを使用して、CephFilesystem CRDをデプロイします。
たとえば、YAMLファイルで次のCephFilesystem CRDを使用する場合:
---
apiVersion: ceph.rook.io/v1
kind: CephFilesystem
metadata:
name: myfs
namespace: rook
spec:
metadataPool:
replicated:
size: 3
dataPools:
- name: replicated
replicated:
size: 3
preserveFilesystemOnDelete: true
metadataServer:
activeCount: 1
activeStandby: true
コントロール・プレーン・ノードで、kubectl apply
コマンドを使用して、ファイルとともにCephFilesystemを作成します:
kubectl apply -f filename.yaml
CephFilesystemが作成されます。 CephFilesystemが作成されたことを確認するには、次を使用します:
kubectl get cephfilesystem --namespace rook
出力は次のようになります:
NAME ACTIVEMDS AGE PHASE
myfs 1 18s Ready
Rook構成ファイルを使用してCephFilesystemのStorageClassを作成しない場合は、Rookモジュールのデプロイ後に作成できます。
たとえば、YAMLファイルで次のStorageClass CRDを使用する場合:
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-cephfs
provisioner: rook.cephfs.csi.ceph.com
parameters:
clusterID: rook
fsName: myfs
pool: myfs-replicated
csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
csi.storage.k8s.io/provisioner-secret-namespace: rook
csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner
csi.storage.k8s.io/controller-expand-secret-namespace: rook
csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
csi.storage.k8s.io/node-stage-secret-namespace: rook
reclaimPolicy: Delete
コントロール・プレーン・ノードで、kubectl apply
コマンドを使用して、ファイルとともにStorageClassを作成します:
kubectl apply -f filename.yaml
StorageClassが作成されます。 StorageClassが作成されたことを確認するには、次を使用します:
kubectl get sc
出力は次のようになります:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ...
rook-ceph-block (default) rook.rbd.csi.ceph.com Delete Immediate ...
rook-cephfs rook.cephfs.csi.ceph.com Delete Immediate ...
CephFilesystemストレージを使用するテスト・アプリケーションを作成するには:
-
Kubernetes PersistentVolumeClaimファイルを作成します。 コントロール・プレーン・ノードで、
pvc-cephfs.yaml
という名前のファイルを作成します。 ファイルに次の内容をコピーします。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myrook-pvc-fs spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: rook-cephfs
-
Kubernetes PersistentVolumeClaimを作成します。
kubectl apply -f pvc-cephfs.yaml
-
kubectl get pvc
コマンドを使用してPersistentVolumeClaimが作成されていることがわかります:kubectl get pvc
出力は次のようになります:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myrook-pvc-fs Bound pvc-... 1Gi RWX rook-cephfs 18s
kubectl describe pvc
コマンドを使用して、PersistentVolumeClaimの詳細を取得できます。 たとえば:kubectl describe pvc myrook-pvc-fs
出力は次のようになります:
Name: myrook-pvc-fs Namespace: default StorageClass: rook-cephfs Status: Bound Volume: pvc-b98f9230-03d9-401d-9e19-81491eb785f9 Labels: <none> Annotations: pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes volume.beta.kubernetes.io/storage-provisioner: rook.cephfs.csi.ceph.com volume.kubernetes.io/storage-provisioner: rook.cephfs.csi.ceph.com Finalizers: [kubernetes.io/pvc-protection] Capacity: 1Gi Access Modes: RWX VolumeMode: Filesystem Used By: <none> Events: Type Reason Age From ... ---- ------ ---- ---- ... Normal ExternalProvisioning 106s persistentvolume-controller ... Normal Provisioning 106s rook.cephfs.csi.ceph.com_csi-cephfsplugin-provisio... Normal ProvisioningSucceeded 106s rook.cephfs.csi.ceph.com_csi-cephfsplugin-provisio...
-
PersistentVolumeClaimを使用するKubernetesアプリケーションを作成します。
nginx-cephfs.yaml
という名前のファイルを作成し、次のファイルをファイルにコピーします。apiVersion: apps/v1 kind: Deployment metadata: labels: run: mynginx name: mynginx-cephfs spec: replicas: 1 selector: matchLabels: run: mynginx template: metadata: labels: run: mynginx spec: containers: - image: container-registry.oracle.com/olcne/nginx:1.17.7 name: mynginx ports: - containerPort: 80 volumeMounts: - name: nginx-pvc mountPath: /usr/share/nginx/html volumes: - name: nginx-pvc persistentVolumeClaim: claimName: myrook-pvc-fs
-
アプリケーションを起動します:
kubectl apply -f nginx-cephfs.yaml
-
kubectl get deployment
コマンドを使用して、アプリケーションが実行されていることを確認できます:kubectl get deployment
出力は次のようになります:
NAME READY UP-TO-DATE AVAILABLE AGE mynginx-cephfs 1/1 1 1 16s
-
kubectl describe deployment
コマンドを使用して、アプリケーションがPersistentVolumeClaimを使用してCephFilesystemに永続ストレージを提供していることがわかります:kubectl describe deployment mynginx-cephfs
出力は次のようになります:
... Pod Template: Labels: run=mynginx Containers: mynginx: Image: container-registry.oracle.com/olcne/nginx:1.17.7 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: /usr/share/nginx/html from nginx-pvc (rw) Volumes: nginx-pvc: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the ... ClaimName: myrook-pvc-fs ReadOnly: false ...
-
次を使用して、テスト・アプリケーションを削除できます:
kubectl delete deployment mynginx-cephfs
-
次を使用して、PersistentVolumeClaimを削除できます:
kubectl delete pvc myrook-pvc-fs
CephObjectStoreストレージの作成
この項では、CephObjectStoreストレージを使用して、Kubernetesで実行されているアプリケーションにオブジェクト・ストレージを提供できることを確認するための基本的なテストについて説明します。
この項の例は、アップストリームの「Rookドキュメント」の例に基づいており、CephObjectStoreを作成してテストします。 ここでのコンテンツは、rook
Kubernetesネームスペース(Oracle Cloud Native EnvironmentのRookのデフォルト・ネームスペース)を使用するように変更されますが、それ以外は同じです。 CephObjectStoreからオブジェクトをput
またはget
できるかどうかをテストするアプリケーションを作成するには、アップストリームのドキュメントを参照してください。 ここでは、CephObjectStoreの設定方法とObjectBucketClaimの作成方法を示しますが、テストするアプリケーションを作成する方法は示していません。
Rook構成ファイルを使用してCephObjectStoreを作成しない場合は、Rookモジュールのデプロイ後に1つ以上作成できます。 これを行うには、kubectl
コマンドを使用して、CephObjectStore CRDをデプロイします。
たとえば、YAMLファイルで次のCephObjectStore CRDを使用する場合:
---
apiVersion: ceph.rook.io/v1
kind: CephObjectStore
metadata:
name: my-store
namespace: rook
spec:
metadataPool:
failureDomain: host
replicated:
size: 3
dataPool:
failureDomain: host
erasureCoded:
dataChunks: 2
codingChunks: 1
preservePoolsOnDelete: true
gateway:
sslCertificateRef:
port: 80
instances: 1
healthCheck:
startupProbe:
disabled: false
readinessProbe:
disabled: false
periodSeconds: 5
failureThreshold: 2
コントロール・プレーン・ノードで、kubectl apply
コマンドを使用して、ファイルとともにCephObjectStoreを作成します:
kubectl apply -f filename.yaml
CephObjectStoreが作成されます。 CephObjectStoreが作成されたことを確認するには、次を使用します:
kubectl get cephobjectstore --namespace rook
出力は次のようになります:
NAME PHASE
my-store Ready
ポッドが開始されたことを示すことで、オブジェクト・ストアが構成されていることを確認できます:
kubectl get pod -l app=rook-ceph-rgw --namespace rook
出力は次のようになります:
NAME READY STATUS RESTARTS AGE
rook-ceph-rgw-my-store-a-... 1/1 Running 0 3m35s
Rook構成ファイルを使用してStorageClass (バケット) for CephObjectStoreを作成しない場合は、Rookモジュールのデプロイ後に作成できます。
たとえば、YAMLファイルで次のStorageClass CRDを使用する場合:
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-bucket
provisioner: rook-ceph.ceph.rook.io/bucket
reclaimPolicy: Delete
parameters:
objectStoreName: my-store
objectStoreNamespace: rook
コントロール・プレーン・ノードで、kubectl apply
コマンドを使用して、ファイルとともにStorageClassを作成します:
kubectl apply -f filename.yaml
StorageClassが作成されます。 StorageClassが作成されたことを確認するには、次を使用します:
kubectl get sc
出力は次のようになります:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBIND ...
rook-ceph-block (default) rook.rbd.csi.ceph.com Delete Immediate ...
rook-ceph-bucket rook-ceph.ceph.rook.io/bucket Delete Immediate ...
rook-cephfs rook.cephfs.csi.ceph.com Delete Immediate ...
CephObjectStoreストレージにアクセスするためのObjectBucketClaimを作成するには:
-
Kubernetes ObjectBucketClaimファイルを作成します。 コントロール・プレーン・ノードで、
obc.yaml
という名前のファイルを作成します。 ファイルに次の内容をコピーします。apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: ceph-bucket spec: generateBucketName: ceph-bkt storageClassName: rook-ceph-bucket
-
Kubernetes ObjectBucketClaimを作成します。
kubectl apply -f obc.yaml
-
ObjectBucketClaimは、
kubectl get obc
コマンドを使用して作成されます:kubectl get obc
出力は次のようになります:
NAME AGE ceph-bucket 31s
kubectl describe obc
コマンドを使用して、ObjectBucketClaimの詳細を取得できます。 たとえば:kubectl describe obc ceph-bucket
出力は次のようになります:
Name: ceph-bucket Namespace: default Labels: <none> Annotations: <none> API Version: objectbucket.io/v1alpha1 Kind: ObjectBucketClaim Metadata: Creation Timestamp: <date> Generation: 1 Managed Fields: API Version: objectbucket.io/v1alpha1 Fields Type: FieldsV1 fieldsV1: f:metadata: f:annotations: .: f:kubectl.kubernetes.io/last-applied-configuration: f:spec: .: f:generateBucketName: f:storageClassName: Manager: kubectl-client-side-apply Operation: Update Time: <date> Resource Version: 354339 UID: c53e5eb7-f460-435a-b31d-2eaab1bcddd3 Spec: Generate Bucket Name: ceph-bkt Storage Class Name: rook-ceph-bucket Events: <none>
-
ObjectBucketClaimを使用するKubernetesアプリケーションを作成するには、アップストリームの「Rookドキュメント」の残りの例に従います。
-
ObjectBucketClaimは、次を使用して削除できます:
kubectl delete obc ceph-bucket