機械翻訳について

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モジュールをデプロイするには:

  1. 環境をまだ設定していない場合は、モジュールをデプロイできる環境を作成します。 環境の設定方法の詳細は、スタート・ガイドを参照してください。 この例の環境の名前は、myenvironmentです。

  2. Kubernetesモジュールをまだ設定またはデプロイしていない場合は、設定します。 Kubernetesモジュールを環境に追加する方法の詳細は、「Kubernetesモジュール」を参照してください。 この例のKubernetesモジュールの名前は、myclusterです。

  3. 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ファイルのロケーションを設定します。 これはオプションです。

    モジュールの追加時に必要なオプションの一部が含まれていないと、そのオプションを指定するように求められます。

  4. 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コマンドを使用して、モジュールに関する情報を確認できます。 たとえば、次のコマンドを使用して、myenvironmentmyrookという名前の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
...
Cephオペレータ・ポッドのログをチェックして、デプロイメント中にエラーが発生していないことを確認できます:
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>