機械翻訳について

このドキュメントで説明されているソフトウェアは、サポートされなくなったか、拡張サポートされています。
Oracleでは、現在サポートされているリリースにアップグレードすることをお勧めします。

第3章 Glusterストレージの使用

この章では、Gluster Container Storage Interfaceモジュールをインストールして使用し、Oracle Cloud Native EnvironmentでGluster Storage for Oracle LinuxおよびHeketiを使用してKubernetesアプリケーション用に動的にプロビジョニングされる永続記憶域を設定する方法について説明します。

3.1 前提条件

Gluster Storage for Oracle Linuxクラスタを設定し、すぐに使用できる状態にする必要があります。 HeketiをGlusterクラスタにインストールする必要もあります。 Platform API ServerはHeketi APIと通信して、Glusterボリュームをプロビジョニングおよび管理します。

Glusterボリュームは必要に応じて動的にプロビジョニングされるため、作成する必要はありません。

Glusterの設定の基本要件は次のとおりです:

  • Glusterクラスタの各ノードにGlusterをインストールします。

  • Glusterネイティブ・クライアント(FUSE)メソッドを使用してボリュームにアクセスするようにクラスタを設定します。

  • Heketiをインストールし、Glusterクラスタを作成します。

  • オペレータ・ノードからHeketi APIに接続できることを確認します。

Gluster Storage for Oracle LinuxおよびHeketiのインストールおよび設定については、Oracle® Linux: Gluster Storage for Oracle Linuxユーザー・ガイドを参照してください。

3.2 Glusterモジュールのデプロイ

単一のolcnectl module createコマンドを使用して、KubernetesクラスタのGlusterストレージを設定するために必要なすべてのモジュールをデプロイできます。 このメソッドは、Kubernetesクラスタのデプロイと同時にGluster Container Storage Interfaceモジュールをデプロイする場合に役立つことがあります。

Kubernetesモジュールの既存のデプロイメントがある場合は、Gluster Container Storage Interfaceモジュールのデプロイ時にそのインスタンスを指定できます。

この項では、Gluster Container Storage Interfaceモジュールのデプロイに必要な各コンポーネントのインストールについて説明します。

モジュールの作成時に使用可能なプラットフォームCLIコマンド・オプションの完全なリストは、プラットフォーム・コマンドライン・インタフェースolcnectl module createコマンドを参照してください。

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

  2. Kubernetesモジュールがまだ設定またはデプロイされていない場合は、設定します。 Kubernetesモジュールを環境に追加する方法の詳細は、コンテナ・オーケストレーションを参照してください。 この例のKubernetesモジュールの名前は、myclusterです。

  3. Helmモジュールを作成してインストールしていない場合は作成します。 この例のHelmモジュールは、myhelmという名前で、--helm-kubernetes-moduleオプションを使用してmyclusterという名前のKubernetesモジュールに関連付けられています。

    olcnectl module create \
    --environment-name myenvironment \
    --module helm \
    --name myhelm \
    --helm-kubernetes-module mycluster 
  4. 新しいHelmモジュールをデプロイする場合は、olcnectl module validateコマンドを使用して、Helmモジュールをノードにデプロイできることを検証します。 たとえば:

    olcnectl module validate \
    --environment-name myenvironment \
    --name myhelm
  5. 新しいHelmモジュールをデプロイする場合は、olcnectl module installコマンドを使用してHelmモジュールをインストールします。 たとえば:

    olcnectl module install \
    --environment-name myenvironment \
    --name myhelm 

    Helmソフトウェア・パッケージはコントロール・プレーン・ノードにインストールされ、HelmモジュールはKubernetesクラスタにデプロイされます。

  6. Gluster Container Storage Interfaceモジュールを作成し、--gluster-helm-moduleオプションを使用してmyhelmという名前のHelmモジュールに関連付けます。 この例では、Gluster Container Storage Interfaceモジュールの名前はmyglusterです。

    olcnectl module create \
    --environment-name myenvironment \
    --module gluster \
    --name mygluster \
    --gluster-helm-module myhelm \
    --gluster-server-url https:\\mygluster.example.com:8080

    --moduleオプションは、モジュール・タイプを作成(gluster)に設定します。 Gluster Container Storage Interfaceモジュールの名前は、--nameオプションを使用して定義します(この場合はmygluster)。

    --gluster-helm-moduleオプションは、Helmモジュールの名前を設定します。 同じ名前の既存のHelmモジュールがある場合、プラットフォームAPIサーバーはそのHelmインスタンスを使用します。

    --gluster-server-urlオプションは、Heketi APIサーバーのロケーションを設定します。この例ではhttps:\\mygluster.example.com:8080です。 このオプションのデフォルトはhttp://127.0.0.1:8080であるため、Heketiがオペレータ・ノード上にHTTPを使用している場合は、このオプションを含める必要はありません。

    ヒント

    カールを使用して、オペレータ・ノードからHeketi APIに到達できることを確認します。次に例を示します:

    curl -w "\n" https:\\mygluster.example.com:8080/hello

    または、HTTPを使用してオペレータ・ノード上にHeketiがある場合:

    curl -w "\n" http:\127.0.0.1:8080/hello

    次の結果が表示されます:

    Hello from Heketi.

    モジュールの追加時に必要なすべてのオプションを含めない場合は、オプションを指定するように求められます。

    --gluster-server-user--gluster-secret-keyなどのデフォルト値を使用しない場合、含める必要があるオプションのコマンド・オプションがいくつかあります。

  7. olcnectl module validateコマンドを使用して、Gluster Container Storage Interfaceモジュールをノードにデプロイできることを検証します。 たとえば:

    olcnectl module validate \
    --environment-name myenvironment \
    --name mygluster
  8. olcnectl module installコマンドを使用して、Gluster Container Storage Interfaceモジュールをインストールします。 たとえば:

    olcnectl module install \
    --environment-name myenvironment \
    --name mygluster

    Gluster Container Storage Interfaceモジュールは、Kubernetesクラスタにデプロイされます。

3.3 Glusterモジュールのデプロイメントの確認

オペレータ・ノードのolcnectl module instancesコマンドを使用して、Gluster Container Storage Interfaceモジュールがデプロイされていることを確認できます。 たとえば:

olcnectl module instances \
--environment-name myenvironment
INSTANCE                  MODULE    	STATE    
mycluster                 kubernetes	installed
myhelm                    helm      	installed
mygluster                 gluster   	installed
control1.example.com      node      	installed
...

MODULE列のglusterのエントリは、installed状態であることに注意してください。

また、olcnectl module reportコマンドを使用して、モジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironmentmyglusterという名前のGlusterコンテナ・ストレージ・インタフェース・モジュールを確認します:

olcnectl module report \
--environment-name myenvironment \
--name mygluster \
--children

olcnectl module reportコマンドの構文の詳細は、プラットフォーム・コマンドライン・インタフェースを参照してください。

コントロール・プレーン・ノードでは、kubectl get scコマンドを使用して、GlusterfsプロビジョナのStorageClassが作成されていることを確認することもできます:

kubectl get sc
NAME                       PROVISIONER               RECLAIMPOLICY   VOLUMEBINDINGMODE   ...
hyperconverged (default)   kubernetes.io/glusterfs   Delete          Immediate           ...

この場合、StorageClassの名前はhyperconverged(デフォルトの名前)になります。

kubectlはscを記述コマンドを使用して、StorageClassの詳細を取得できます。 たとえば:

kubectl describe sc hyperconverged 
Name:                  hyperconverged
IsDefaultClass:        Yes
Annotations:           meta.helm.sh/release-name=mygluster,meta.helm.sh/release-namespace=defau...
Provisioner:           kubernetes.io/glusterfs
Parameters:            restauthenabled=true,resturl=http://...:8080,restuser=admin,secretName=a...
AllowVolumeExpansion:  <unset>
MountOptions:          <none>
ReclaimPolicy:         Delete
VolumeBindingMode:     Immediate
Events:                <none>

3.4 Gluster Volumeの作成

この項では、Glusterボリュームを作成して、Kubernetesで実行されているアプリケーションに永続ストレージを提供できることを確認する基本的なテストを示します。

Glusterfsを使用するためのテスト・アプリケーションを作成するには:
  1. Kubernetes PersistentVolumeClaimファイルを作成します。 コントロール・プレーン・ノードで、pvc.yamlという名前のファイルを作成します。 ファイルに次の内容をコピーします。

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

    kubectl apply -f pvc.yaml
    persistentvolumeclaim/mygluster-pvc created
  3. PersistentVolumeClaimは、kubectl get pvcコマンドを使用して作成できます:

    kubectl get pvc 
    NAME           STATUS    VOLUME         CAPACITY   ACCESS MODES   STORAGECLASS     AGE
    mygluster-pvc  Bound     pvc-59f70...   1Gi        RWX            hyperconverged   18s

    kubectl describe pvcコマンドを使用して、PersistentVolumeClaimの詳細を取得できます。 たとえば:

    kubectl describe pvc mygluster-pvc
    Name:          mygluster-pvc
    Namespace:     default
    StorageClass:  hyperconverged
    Status:        Bound
    Volume:        pvc-59f7047b-9287-4163-9cff-c669cfbd4970
    Labels:        <none>
    Annotations:   pv.kubernetes.io/bind-completed: yes
                   pv.kubernetes.io/bound-by-controller: yes
                   volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/glusterfs
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      1Gi
    Access Modes:  RWX
    VolumeMode:    Filesystem
    Used By:       <none>
    Events:
      Type    Reason                 Age   From                         Message
      ----    ------                 ----  ----                         -------
      Normal  ProvisioningSucceeded  73s   persistentvolume-controller  Successfully provi...

  4. PersistentVolumeClaimを使用するKubernetesアプリケーションを作成します。 nginx.yamlという名前のファイルを作成し、次のファイルをファイルにコピーします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        run: mynginx
      name: mynginx
    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: mygluster-pvc
  5. アプリケーションを起動します:

    kubectl apply -f nginx.yaml
    deployment.apps/mynginx created
  6. kubectlデプロイメントの取得コマンドを使用して、アプリケーションが実行されていることがわかります:

    kubectl get deployment
    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    mynginx   1/1     1            1           16s
  7. kubectlはデプロイメントの説明ですコマンドを使用して、アプリケーションがPersistentVolumeClaimを使用してGlusterfsに永続ストレージを提供していることがわかります:

    kubectl describe deployment mynginx
    ...
    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:  mygluster-pvc
        ReadOnly:   false
  8. 次を使用して、テスト・アプリケーションを削除できます:

    kubectl delete deployment mynginx 
    deployment.apps "mynginx" deleted
  9. 次を使用して、PersistentVolumeClaimを削除できます:

    kubectl delete pvc mygluster-pvc 
    persistentvolumeclaim "mygluster-pvc" deleted

3.5 Glusterモジュールの取り外し

Gluster Container Storage Interfaceモジュールのデプロイメントを削除し、Kubernetesクラスタをそのままにしておくことができます。 これを行うには、環境からGluster Container Storage Interfaceモジュールを削除します。

olcnectl module uninstallコマンドを使用して、Gluster Container Storage Interfaceモジュールを削除します。 たとえば、myenvironmentという名前の環境でmyglusterという名前のGluster Container Storage Interfaceモジュールをアンインストールするには:

olcnectl module uninstall \
--environment-name myenvironment \
--name mygluster

Gluster Container Storage Interfaceモジュールは環境から削除されます。