2 Rookモジュールの取り付け
この章では、Rookモジュールをインストールして、Oracle Cloud Native EnvironmentのCephを使用してKubernetesアプリケーションに動的にプロビジョニングされる永続ストレージを設定する方法について説明します。
前提条件
このセクションでは、Rookモジュールを取り付けるための前提条件について説明します。
ワーカー・ノードの設定
Rookモジュールは、CephをコンテナとしてKubernetesワーカー・ノードにデプロイします。 Kubernetesクラスタには、少なくとも3つのワーカー・ノードが必要です。
さらに、Kubernetesワーカー・ノードでは、次のローカル・ストレージ・オプションの少なくとも1つが使用可能である必要があります:
-
rawデバイス(パーティションまたはフォーマットされたファイルシステムなし)。
-
RAWパーティション(フォーマットされたファイル・システムなし)。
-
LVM論理ボリューム(フォーマット済ファイル・システムなし)。
-
block
モードでストレージ・クラスから使用可能な永続ボリューム。
ヒント:
lsblk -f
コマンドを使用して、デバイスまたはパーティションにファイル・システムがないことを確認します。 FSTYPE
フィールドが空の場合、ディスク上のファイル・システムはなく、Cephとともに使用できます。
Rook構成ファイルの作成
構成ファイルなしでRookモジュールをデプロイすると、Rookオペレータ・ポッド(rook-ceph-operator
)が作成されます。 その後、kubectl
コマンドを使用してCephクラスタおよびストレージを作成できます。 オプションで、Rook構成ファイルを指定して、Rookモジュールのデプロイ時に設定されるCephクラスタおよびストレージを設定できます。
YAML形式のオペレータ・ノードにRook構成ファイルを指定できます。 構成ファイルには、1つ以上のCephクラスタおよびストレージ・タイプを構成するための情報が含まれています。 設定を実行するには、構成ファイルでCeph関連のKubernetes CRDを使用します。 Cephクラスタ、ストレージ・オプションおよびストレージ・プロバイダの設定に必要な数のCRDを構成ファイルに含めます。 たとえば:
---
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: rook-ceph
namespace: rook
spec:
...
---
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replicapool
namespace: rook
spec:
...
---
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:
...
Platform API Serverは、Rookモジュールの作成時に構成ファイルに含まれる情報を使用します。 Rookは、このファイルに指定した情報を使用して、Cephのすべての設定と構成を実行します。
アップストリームのドキュメントを使用して、CRDを作成します。 構成ファイルで使用できるオプションの詳細は、Ceph CRDのアップストリーム「Rookドキュメント」を参照してください。
重要:
この項のCRDの例には、基本的なCephクラスタ、ストレージ・タイプおよびストレージ・クラス・プロバイダを設定するためのCRDが含まれています。 これらは単なる例であり、本番環境ではお薦めしません。
CephCluster CRD
CephCluster CRDは、Cephクラスタの作成に使用されます。 次の例では、RAWディスクが各ノードにsdb
としてアタッチされている3つのワーカー・ノードを持つKubernetesクラスタを使用します。 この例では、rook
ネームスペースでrook-ceph
というCephクラスタ名を使用します。 Cephイメージは、Oracle Container Registryからプルされることに注意してください。
---
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
CephBlockPool CRD
Cephストレージ・プールを作成するには、CephBlockPool CRDを使用します。 この例では、rook
ネームスペースのreplicapool
という名前のCephBlockPoolに3のレプリカ・セットを設定します。
---
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replicapool
namespace: rook
spec:
failureDomain: host
replicated:
size: 3
requireSafeReplicaSize: true
StorageClass CRD for CephBlockPool
ポッドがCephブロック・ストレージにアクセスできるようにするには、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
CephFilesystem CRD
CephFilesystemを設定することもできます。 これを行うには、CephFilesystem CRD情報を構成ファイルに含めます。 この例では、rook
ネームスペースにmyfs
という名前のCephFilesystemを作成し、レプリカ数は3です。
---
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
StorageClass CRD for CephFilesystem
ポッドがCephFilesystemストレージにアクセスできるようにするには、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
CephObjectStore CRD
CephObjectStoreを設定することもできます。 これを行うには、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
StorageClass (バケット) CRD for CephObjectStore
ポッドがCephObjectStorageストレージにアクセスできるようにするには、バケットを作成する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
Rookモジュールのデプロイ
単一のolcnectl module create
コマンドを使用して、KubernetesクラスタのCephストレージを設定するために必要なすべてのモジュールをデプロイできます。 このメソッドは、Kubernetesクラスタのデプロイと同時にRookモジュールをデプロイする場合に役立ちます。
Kubernetesモジュールの既存のデプロイメントがある場合は、Rookモジュールのデプロイ時にそのインスタンスを指定できます。
この項では、Rookモジュールのデプロイに必要な各コンポーネントのインストールについて説明します。
モジュールの作成時に使用可能なプラットフォームCLIコマンド・オプションの完全なリストについては、「プラットフォーム・コマンドライン・インタフェース」のolcnectl module create
コマンドを参照してください。
Rookモジュールをデプロイするには:
-
環境をまだ設定していない場合は、モジュールをデプロイできる環境を作成します。 環境の設定方法の詳細は、スタート・ガイドを参照してください。 この例の環境の名前は、
myenvironment
です。 -
Kubernetesモジュールをまだ設定またはデプロイしていない場合は、設定します。 Kubernetesモジュールを環境に追加する方法の詳細は、「Kubernetesモジュール」を参照してください。 この例のKubernetesモジュールの名前は、
mycluster
です。 -
Rookモジュールを作成し、
--rook-kubernetes-module
オプションを使用してmycluster
という名前のKubernetesモジュールに関連付けます。 この例では、Rookモジュールの名前はmyrook
です。olcnectl module create \ --environment-name myenvironment \ --module rook \ --name myrook \ --rook-kubernetes-module mycluster \ --rook-config rook-config.yaml
--module
オプションは、モジュール・タイプを作成(rook
)に設定します。 Rookモジュールの名前は、--name
オプション(この場合はmyrook
)を使用して定義します。--rook-kubernetes-module
オプションは、Kubernetesモジュールの名前を設定します。--rook-config
オプションは、Rookモジュールの構成情報を含むYAMLファイルのロケーションを設定します。 これはオプションです。モジュールの追加時に必要なオプションの一部が含まれていないと、そのオプションを指定するように求められます。
-
olcnectl module install
コマンドを使用して、Rookモジュールをインストールします。 たとえば:olcnectl module install \ --environment-name myenvironment \ --name myrook
Rookモジュールは、Kubernetesクラスタにデプロイされます。
Rookモジュールのデプロイメントの確認
オペレータ・ノードでolcnectl module instances
コマンドを使用して、Rookモジュールがデプロイされていることを確認できます。 たとえば:
olcnectl module instances \
--environment-name myenvironment
出力は次のようになります:
INSTANCE MODULE STATE
mycluster kubernetes installed
myrook rook installed
...
MODULE
列のrook
のエントリは、installed
状態であることに注意してください。
また、olcnectl module report
コマンドを使用して、モジュールに関する情報を確認できます。 たとえば、次のコマンドを使用して、myenvironment
のmyrook
という名前のRookモジュールを確認します:
olcnectl module report \
--environment-name myenvironment \
--name myrook \
--children
olcnectl module report
コマンドの構文の詳細は、「プラットフォーム・コマンドライン・インタフェース」を参照してください。
コントロール・プレーン・ノードで、rook
ネームスペースでrook-ceph
デプロイメントが実行されていることを確認します。 Cephオペレータ・ポッド(rook-ceph-operator
)のデプロイメントが実行されていることを確認します。
kubectl get deployments --namespace rook
出力は次のようになります:
NAME READY UP-TO-DATE AVAILABLE AGE
rook-ceph-operator 1/1 1 1 163m
構成ファイルを使用してCephクラスタ、ストレージ、ストレージ・クラス・プロビジョニングなどの追加のCephオブジェクトをデプロイした場合は、より多くのデプロイメントが実行されている可能性があります。 たとえば:
NAME READY UP-TO-DATE AVAILABLE AGE
csi-cephfsplugin-provisioner 2/2 2 2 159m
csi-rbdplugin-provisioner 2/2 2 2 159m
rook-ceph-operator 1/1 1 1 163m
rook-ceph-mgr-a 1/1 1 1 163m
rook-ceph-mon-b 1/1 1 1 163m
...
kubectl logs --namespace rook rook-ceph-operator-...
コントロール・プレーン・ノードでは、kubectl get sc
コマンドを使用して、CephプロビジョナのStorageClassesが作成されていることを確認することもできます。 これらは、モジュールのデプロイ時に構成ファイルを使用して作成した場合にのみ作成されます。 たとえば:
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 ...
この場合、2つのStorageClassesが存在し、1つはデフォルト・プロバイダであるrook-ceph-block
という名前です。 これはCephブロック・ストレージのプロバイダです。 もう1つのStorageClassは、CephFilesystem (CephFS)のプロバイダであるrook-cephfs
という名前です。
kubectl describe sc
コマンドを使用して、StorageClassの詳細を取得できます。 たとえば:
kubectl describe sc rook-ceph-block
出力は次のようになります:
Name: rook-ceph-block
IsDefaultClass: Yes
Annotations: storageclass.kubernetes.io/is-default-class=true
Provisioner: rook.rbd.csi.ceph.com
Parameters: clusterID=rook,csi.storage.k8s.io/controller-expand-secret-name=rook- ...
AllowVolumeExpansion: True
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>