機械翻訳について

3 Oracle Cloud Infrastructureストレージの使用

重要:

このドキュメントで説明されているソフトウェアは、Extended SupportまたはSustaining Supportにあります。 詳細は、「Oracleオープン・ソース・サポート・ポリシー」を参照してください。

このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお勧めします。

Oracle Cloud Infrastructure Cloud Controller Managerモジュールは、永続データ・ストレージを作成するための次のストレージ・サービスを提供する、Kubernetesクラスタ用のコンテナ・ストレージ・インタフェース(CSI)プラグインを実装します:

Oracle Cloud Infrastructure Block Volumeサービス

Oracle Cloud Infrastructure Block Volumeサービスは、動的にプロビジョニングおよび管理されるブロック・ストレージ・ボリュームを提供します。 ブロック・ストレージ・ボリュームは、50 GBから32 TBまでのサイズで作成できます。

ボリュームをKubernetesアプリケーションにアタッチした後、通常のハード・ドライブと同様の方法でボリュームを使用できます。 また、データを失うことなく、ボリュームを切断して別のインスタンスにアタッチすることもできます。

ブロック・ボリューム・ボリュームは、データ損失から保護するために自動的にレプリケートされます。

ユースケースの例、およびOracle Cloud Infrastructureブロック・ボリューム・サービスの詳細は、Oracle Cloud Infrastructureのドキュメント」を参照してください。

Oracle Cloud Infrastructure File Storageサービス

Oracle Cloud Infrastructure File Storageサービスは、スケーラブルで耐久性の高いエンタープライズ・グレードのネットワーク・ファイル・システムを提供します。 ファイル・ストレージ・サービスでは、ネットワーク・ファイル・システムのバージョン3.0 (NFSv3)プロトコルを使用します。 このサービスは、ファイル・ロック機能にNetwork Lock Manager (NLM)プロトコルを使用します。

File Storageサービスは、データ・ストレージのニーズがバイト数からバイト数に増えるにつれて、ストレージ・プロビジョニングを透過的に管理します。

何千ものインスタンスからなる大規模なコンピュート・クラスタでは、ファイル・ストレージ・サービスを使用して高パフォーマンスの共有ストレージを使用できます。

Oracle Cloud Infrastructure File Storageは、異なるフォルト・ドメインで5方向レプリケートされたストレージを使用して、自己回復性データ保護の冗長性を提供します。

サンプル・ユースケースについて、およびOracle Cloud Infrastructureファイル・ストレージ・サービスの詳細は、Oracle Cloud Infrastructureのドキュメント」を参照してください

次の項では、各ストレージ・サービスを使用して、Oracle Cloud InfrastructureインスタンスのOracle Cloud Native EnvironmentでKubernetesアプリケーションの永続ストレージを設定する方法の例を示します。

ブロック・ストレージの作成

この項では、Oracle Cloud Infrastructureブロック・ストレージを作成して、Kubernetesで実行されているアプリケーションに永続ストレージを提供できることを確認するための基本的なテストについて説明します。

Oracle Cloud Infrastructureブロック・ストレージを使用するテスト・アプリケーションを作成するには:

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: myoci-pvc
    spec:
     accessModes:
      - ReadWriteOnce
     storageClassName: oci-bv
     resources:
      requests:
        storage: 50Gi

    Oracle Cloud InfrastructureストレージのaccessModes設定は、ReadWriteOnceである必要があります。 Oracle Cloud Infrastructureブロックの最小サイズは50Giです。

  2. Kubernetes PersistentVolumeClaimを作成します。

    kubectl apply -f pvc.yaml
  3. kubectl get pvcコマンドを使用してPersistentVolumeClaimが作成されていることがわかります:

    kubectl get pvc

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

    NAME        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    myoci-pvc   Pending                                      oci-bv         15s

    STATUSPendingで、アプリケーションが要求を待機していることを意味します。

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

    kubectl describe pvc myoci-pvc

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

    Name:          myoci-pvc
    Namespace:     default
    StorageClass:  oci-bv
    Status:        Pending
    Volume:        
    Labels:        <none>
    Annotations:   <none>
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      
    Access Modes:  
    VolumeMode:    Filesystem
    Used By:       <none>
    Events:
      Type    Reason                Age                     From                         ...
      ----    ------                ----                    ----                         
      Normal  WaitForFirstConsumer  2m18s (x26 over 8m29s)  persistentvolume-controller  ...
  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: myoci-pvc
  5. アプリケーションを起動します:

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

    kubectl get deployment

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

    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    mynginx   1/1     1            1           63s
  7. kubectl describe deploymentコマンドを使用して、アプリケーションがPersistentVolumeClaimを使用してOracle Cloud Infrastructureに永続ストレージを提供していることがわかります:

    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 same namespace)
        ClaimName:  myoci-pvc
        ReadOnly:   false
    ...

    ClaimNameは、前に作成したPersistentVolumeClaimの名前であるmyoci-pvcであることに注意してください。

    kubectl get pvcコマンドを使用して、このアプリケーションにPersistentVolumeClaimがバインドされていることがわかります:

    kubectl get pvc

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

    NAME        STATUS   VOLUME             CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    myoci-pvc   Bound    csi-84175067-...   50Gi       RWO            oci-bv         1m

    ヒント:

    Oracle Cloud Infrastructureにサインインすると、VOLUME列にリストされた名前で作成されたブロック・ボリュームが表示されます。 ブロック・ボリュームは、Kubernetesアプリケーションが実行されているコンピュート・インスタンスにアタッチされます。

  8. 次を使用して、テスト・アプリケーションを削除できます:

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

    kubectl delete pvc myoci-pvc

    ストレージが削除されます。

    ヒント:

    Oracle Cloud Infrastructureにサインインすると、ブロック・ボリュームが終了していることがわかります。

ファイル・ストレージの作成

この項では、Oracle Cloud Infrastructureファイル・ストレージ・ファイル・システムを使用して、Kubernetesで実行されているアプリケーションに永続ファイル・ストレージを提供できることを確認する基本的な例を示します。 例は次のとおりです:

  1. Oracle Cloud Infrastructureでファイル・ストレージ・ファイル・システムを作成します。

  2. YAMLファイルを使用して、ファイル・ストレージ・ファイル・システムのPersistentVolumeおよびPersistentVolumeClaimを作成します。

  3. YAMLファイルを使用して、ボリュームへのマウントを含むポッドを作成し、ファイル・ストレージ・ファイル・システムにテスト・ファイルを書き込みます。

ファイル・システムの設定

Oracle Cloud InfrastructureのVirtual Cloud Network (VCN)にファイル・ストレージ・ファイル・システムを作成します。

ヒント:

Oracle Cloud Infrastructureでのファイル・システムのプロビジョニングに関するステップ・バイ・ステップ・ガイドは、Oracle Luna Lab 「Oracle Cloud Native Environmentでのファイル・ストレージ・サービスを使用した永続ボリュームのプロビジョニング」を参照してください。

ファイル・システムを作成するには:

  1. ファイル・ストレージ・ファイル・システムのVCNを構成します。 VCNの正確な構成は異なります。 シナリオの例は、Oracle Cloud Infrastructureのドキュメント」を参照してください。

  2. File Storageファイル・システムを作成します。 詳細は、Oracle Cloud Infrastructureのドキュメント」を参照してください。

  3. ファイル・システムへのネットワーク・アクセスを有効にするファイル・ストレージ・マウント・ターゲットを作成します。 詳細は、Oracle Cloud Infrastructureのドキュメント」を参照してください。

  4. Oracle Cloud Infrastructureで、次のファイル・システム属性を見つけてノートにとります。 これらは、この例でYAMLファイルを作成したり、ファイル・システムをマウントする際に必要です:

    • ファイル・システムのOCID。

    • ファイル・システムのエクスポート・パス。 この例では、エクスポート・パスを/my-fss-exportに設定することを前提としています。

    • mountコマンド。 これらのコマンドは、ファイル・システムの「マウント・コマンド」ページに表示されます。 これらのコマンドは、エクスポートされたファイル・システムをマウントするときの例の後半で使用します。

    • マウント・ターゲットのIPアドレス。

ファイル・システムの使用

Oracle Cloud Infrastructureファイル・ストレージ・ファイル・システムを使用するテスト・アプリケーションを作成するには:

  1. PersistentVolumeファイルを作成します。 コントロール・プレーン・ノードで、次の内容を含むfss-pv.yamlというファイルを作成します:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: fss-pv
    spec:
      capacity:
        storage: 50Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: fss.csi.oraclecloud.com
        volumeHandle: <filesystem_OCID>:<mount_target_IP>:<mount_target_export_path>

    ファイル・システムのaccessModesは、ReadWriteManyである必要があります。

    storageオプションはKubernetes要件であり、含める必要があります。 ファイル・ストレージ・サービスでは、storageに指定した値に関係なく、この値は無視され、デフォルト・サイズの新しいファイル・システムが作成されます。

    volumeHandleは、ファイル・ストレージのファイル・システム属性のコロン区切りのリストで構成されます。前述のステップで説明します。 たとえば:

    ocid1.filesystem.oc1.iad.aaaa...:10.0.0.200:/my-fss-export

  2. PersistentVolumeを作成します。

    kubectl apply -f fss-pv.yaml
  3. PersistentVolumesのリストを取得します。
    kubectl get pv

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

    NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    fss-pv   50Gi       RWX            Retain           Available                                   47s
  4. PersistentVolumeClaimファイルを作成します。 fss-pvc.yamlというファイルを作成します。 次の内容をファイルにコピーします:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: fss-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ""
      resources:
        requests:
          storage: 5Gi
      volumeName: fss-pv

    ファイル・システムのaccessModesは、ReadWriteManyである必要があります。

    storageオプションはKubernetes要件であり、含める必要があります。 ファイル・ストレージ・サービスでは、storageに指定した値に関係なく、この値は無視され、デフォルト・サイズの新しいファイル・システムが作成されます。

    volumeNameは、PersistentVolumeファイルfss-pv.yamlのname属性に設定されます。

  5. PersistentVolumeClaimを作成します。

    kubectl apply -f fss-pvc.yaml
  6. PersistentVolumeClaimsのリストを取得します。
    kubectl get pvc

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

    NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    fss-pvc   Bound    fss-pv   50Gi       RWX                           33s
  7. マニフェスト・ファイルを作成します。 fss-pod.yamlというファイルを作成します。 次の内容をファイルにコピーします:
    apiVersion: v1
    kind: Pod
    metadata:
      name: app
    spec:
      containers:
      - name: app
        image: container-registry.oracle.com/os/oraclelinux:9-slim
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"]
        volumeMounts:
        - name: persistent-storage
          mountPath: /data
      volumes:
      - name: persistent-storage
        persistentVolumeClaim:
          claimName: fss-pvc

    imageオプションは、Oracle Linuxコンテナ・イメージへのレジストリのロケーションを指定します。

    mountPathオプションは、永続ストレージにマウントされるディレクトリを指定します。

    commandオプションは、/dataディレクトリ内のファイルout.txtに書き込むコマンドを指定します。

  8. ポッドを作成します。

    kubectl apply -f fss-pod.yaml
  9. ポッドのリストを取得します。
    kubectl get pods

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

    NAME   READY   STATUS    RESTARTS   AGE
    app    1/1     Running   0          21s
  10. シェルをポッド内のコンテナに開きます:

    kubectl exec -i -t app --container app -- /bin/bash
  11. コンテナのシェルから、tailコマンドを使用して、コンテナが/data/out.txtファイルに書き込まれていることを確認します:

    tail -f /data/out.txt

    date -uコマンドの日時出力が端末にリストされ、コンテナの/data/out.txtファイルに書き込まれます。 CTRL+Cを使用して、tailプログラムを終了します。

  12. exitコマンドを使用して、コンテナ・シェルを終了します:

    exit
  13. コンテナ内の/dataディレクトリがファイル・システムのエクスポート・パスにマウントされていることを確認します。 このステップでは、ファイル・システムの作成時に記載されたマウント・コマンドを使用します。

    1. コントロール・プレーン・ノードで、NFSクライアントをインストールします。

      sudo dnf install nfs-utils
    2. ローカル・ディレクトリを作成し、ファイル・システムのエクスポート・パスにマウントします。

      sudo mkdir -p /mnt/my-fss-export
      sudo mount 10.0.0.200:/my-fss-export /mnt/my-fss-export

      10.0.0.200をマウント・ターゲットのIPアドレスに置き換えます。

    3. コンテナの書込み先であるoutput.txtファイルがファイル・システムのエクスポート・パスにあることを確認します。 tailコマンドは、次の目的で使用できます:

      sudo tail -f /mnt/my-fss-export/out.txt

      ポッドによってファイルに書き込まれる日時がリストされます。 CTRL+Cを使用して、tailプログラムを終了します。

  14. ポッドを削除します。 ポッドの削除後にコマンド・プロンプトが表示されない場合は、CTRL+Cキーの組合せを使用して戻すことができます:

    kubectl delete pod app
  15. PersistentVolumeClaimを削除します:

    kubectl delete pvc fss-pvc
  16. PersistentVolumeのステータスがReleasedであることを確認します:

    kubectl get pv

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

    NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM             STORAGECLASS   REASON   AGE
    fss-pv   50Gi       RWX            Retain           Released   default/fss-pvc                           57m
  17. PersistentVolumeを削除します:

    kubectl delete pv fss-pv
  18. ファイルがまだ存在することを確認します:

    ls -l  /mnt/my-fss-export/out.txt
  19. マウントを取り外します:

    sudo umount /mnt/my-fss-export
  20. out.txtファイルが使用できなくなり、マウントが削除されたことを確認します:

    ls -l /mnt/my-fss-export
  21. /mnt/my-fss-exportがマウントされていないことを確認します:

    mount | grep my-fss-export