機械翻訳について

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ストレージを使用するテスト・アプリケーションを作成するには:

  1. Kubernetes PersistentVolumeClaimファイルを作成します。 コントロール・プレーン・ノードで、pvc-cephblock.yamlという名前のファイルを作成します。 ファイルに次の内容をコピーします。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: myrook-block-pvc
    spec:
     accessModes:
      - ReadWriteOnce
     resources:
      requests:
        storage: 1Gi
  2. Kubernetes PersistentVolumeClaimを作成します。

    kubectl apply -f pvc-cephblock.yaml
  3. 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:
    ...
  4. 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
  5. アプリケーションを起動します:

    kubectl apply -f nginx-block.yaml
  6. kubectl get deploymentコマンドを使用して、アプリケーションが実行されていることを確認できます:

    kubectl get deployment

    出力は次のようになります:

    NAME             READY   UP-TO-DATE   AVAILABLE   AGE
    mynginx-block    1/1     1            1           65s
  7. アプリケーションが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
    ...
  8. 次を使用して、テスト・アプリケーションを削除できます:

    kubectl delete deployment mynginx-block
  9. 次を使用して、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ストレージを使用するテスト・アプリケーションを作成するには:

  1. Kubernetes PersistentVolumeClaimファイルを作成します。 コントロール・プレーン・ノードで、pvc-cephfs.yamlという名前のファイルを作成します。 ファイルに次の内容をコピーします。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: myrook-pvc-fs
    spec:
     accessModes:
      - ReadWriteMany
     resources:
      requests:
        storage: 1Gi
     storageClassName: rook-cephfs
  2. Kubernetes PersistentVolumeClaimを作成します。

    kubectl apply -f pvc-cephfs.yaml
  3. 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...
  4. 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
  5. アプリケーションを起動します:

    kubectl apply -f nginx-cephfs.yaml
  6. kubectl get deploymentコマンドを使用して、アプリケーションが実行されていることを確認できます:

    kubectl get deployment

    出力は次のようになります:

    NAME             READY   UP-TO-DATE   AVAILABLE   AGE
    mynginx-cephfs   1/1     1            1           16s
  7. 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
    ...
  8. 次を使用して、テスト・アプリケーションを削除できます:

    kubectl delete deployment mynginx-cephfs
  9. 次を使用して、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を作成するには:

  1. Kubernetes ObjectBucketClaimファイルを作成します。 コントロール・プレーン・ノードで、obc.yamlという名前のファイルを作成します。 ファイルに次の内容をコピーします。

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: ceph-bucket
    spec:
      generateBucketName: ceph-bkt
      storageClassName: rook-ceph-bucket
  2. Kubernetes ObjectBucketClaimを作成します。

    kubectl apply -f obc.yaml
  3. 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>
  4. ObjectBucketClaimを使用するKubernetesアプリケーションを作成するには、アップストリームの「Rookドキュメント」の残りの例に従います。

  5. ObjectBucketClaimは、次を使用して削除できます:

    kubectl delete obc ceph-bucket