すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:静的にプロビジョニングされたOSSボリュームのマウント

最終更新日:Dec 27, 2024

アプリケーションでイメージ、オーディオファイル、ビデオファイルなどの非構造化データを保存する必要がある場合は、オブジェクトストレージサービス(OSS)ボリュームを永続ボリューム(PV)としてアプリケーションにマウントできます。このトピックでは、静的にプロビジョニングされたOSSボリュームをアプリケーションにマウントする方法と、OSSボリュームを使用してデータを共有および永続化できるかどうかを確認する方法について説明します。

背景情報

OSSは、Alibaba Cloudが提供する安全で費用対効果が高く、大容量で信頼性の高いクラウドストレージサービスです。OSSは、頻繁に変更されないデータや、イメージ、オーディオファイル、ビデオファイルなどの非構造化データに適しています。詳細については、ストレージの概要を参照してください。

説明

Alibaba Cloud Container Compute Service(ACS)は、静的にプロビジョニングされたOSSボリュームのみをサポートしています。動的にプロビジョニングされたOSSボリュームは、ACSではサポートされていません。

前提条件

managed-csiprovisionerの最新バージョンがAlibaba Cloud Container Compute Service(ACS)クラスターにインストールされていること。

説明

ACSコンソールのACSクラスター管理ページに移動します。クラスター管理ページの左側のナビゲーションペインで、操作 > アドオンを選択します。ストレージタブで、managed-csiprovisionerがインストールされているかどうかを確認できます。

注意事項

  • OSSは共有ストレージサービスです。1つのOSSバケットを複数のポッドにマウントできます。

  • マウントディレクトリには1,000個以下のファイルを保存することをお勧めします。

    ossfsを使用してList操作を実行すると、要求されたファイルのメタデータを取得するためにOSSにHTTPリクエストが送信されます。listedディレクトリに多数のファイルが含まれている場合、ossfsは大量のシステムメモリを占有します。その結果、ポッドでメモリ不足(OOM)エラーが発生する可能性があります。この問題を解決するには、ディレクトリを分割するか、OSSバケットのサブディレクトリをマウントします。

OSSバケットを作成し、バケット情報を取得する

  1. OSSバケットを作成します。

    1. OSSコンソールにログオンします。左側のナビゲーションペインで、バケットをクリックします。

    2. バケットの作成をクリックします。

    3. [バケットの作成] パネルでパラメーターを設定し、作成をクリックします。次に、後続の手順に進みます。

      次の表にパラメーターを示します。詳細については、バケットの作成を参照してください。

      パラメーター

      説明

      バケット名

      OSSバケットのカスタム名を指定します。名前はすべてのOSSバケットの中で一意である必要があります。バケットを作成した後は、名前を変更できません。名前は、コンソールに表示されている形式の要件に従う必要があります。

      リージョン

      特定のリージョンを選択することをお勧めします。次に、ACSクラスターが存在するリージョンを選択します。こうすることで、ACSクラスター内のポッドは内部ネットワーク経由でバケットにアクセスできます。

  2. オプション。OSSバケットのサブディレクトリをマウントする場合は、まずバケットにサブディレクトリを作成する必要があります。

    1. バケットページで、作成したOSSバケットの名前をクリックします。

    2. バケット詳細ページの左側のナビゲーションペインで、オブジェクト管理 > オブジェクトを選択します。

    3. ディレクトリの作成をクリックして、バケットにディレクトリを作成します。

  3. OSSバケットのエンドポイントを取得します。

    1. バケットページで、使用するバケットを見つけて、バケット名をクリックします。

    2. バケット詳細ページで、概要タブをクリックします。ポートセクションで、次の説明に基づいてエンドポイントをコピーします。

      • バケットとクラスターが同じリージョンにデプロイされている場合は、内部エンドポイントをコピーします。

      • バケットとクラスターが異なるリージョンにデプロイされている場合は、パブリックエンドポイントをコピーします。

  4. OSSバケットへのアクセスに使用するAccessKeyペアを取得します。詳細については、AccessKeyペアの取得を参照してください。

    説明

    別のAlibaba Cloudアカウントに属するOSSバケットをマウントする場合は、そのアカウントのAccessKeyペアを取得する必要があります。

静的にプロビジョニングされたOSSボリュームをマウントする

kubectl

手順1:PVを作成する

  1. ACSクラスターに接続します。詳細については、クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続するCloud Shellでkubectlを使用してACSクラスターを管理するを参照してください。

  2. oss-pv.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      namespace: default
    stringData:
      akId: <your AccessKey ID> // AccessKey ID
      akSecret: <your AccessKey Secret> // AccessKey Secret
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: oss-pv
      labels:
        alicloud-pvname: oss-pv
    spec:
      storageClassName: test
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: oss-pv
        nodePublishSecretRef:
          name: oss-secret
          namespace: default
        volumeAttributes:
          bucket: "<your OSS Bucket Name>" // OSSバケット名
          url: "<your OSS Bucket Endpoint>" // OSSバケットエンドポイント
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
    
    説明

    上記のファイルは、SecretとPVを作成するために使用されます。Secretを使用してAccessKeyペアを保存すると、PVでAccessKeyペアを指定するための安全な方法が提供されます。akIdの値を取得したAccessKey IDに置き換え、akSecretの値を取得したAccessKeyシークレットに置き換えます。

    次の表に、PVのパラメーターを示します。

    パラメーター

    説明

    alicloud-pvname

    PVに追加するラベル。このラベルは、PVCを選択してPVにバインドするために使用されます。

    storageClassName

    この設定は、PVCをPVにバインドするためにのみ使用されます。StorageClassをPVに関連付ける必要はありません。

    storage

    OSSボリュームの容量。

    説明

    静的にプロビジョニングされたOSSボリュームの容量は参考値です。実際の容量は無制限です。OSSボリュームの使用可能容量を表示するには、OSSコンソールに移動します。

    accessModes

    アクセスモード。

    persistentVolumeReclaimPolicy

    再利用ポリシー。

    driver

    ボリュームのプロビジョニングに使用されるボリュームドライバーのタイプ。この例では、パラメーターはossplugin.csi.alibabacloud.comに設定されています。これは、Alibaba CloudがOSS用に提供するコンテナストレージインターフェース(CSI)プラグインが使用されていることを示します。

    volumeHandle

    PVの一意の識別子。値はmetadata.nameの値と同じである必要があります。

    nodePublishSecretRef

    承認のためにAccessKeyペアが取得されるSecret。

    bucket

    OSSバケットの名前。bucketの値を作成したOSSバケットの名前に置き換えます。

    url

    OSSバケットのエンドポイント。urlの値を作成したOSSバケットのエンドポイントに置き換えます。

    • バケットとクラスターが同じリージョンにデプロイされている場合は、バケットの内部エンドポイントを指定します。例:oss-cn-shanghai-internal.aliyuncs.com

    • バケットとクラスターが異なるリージョンにデプロイされている場合は、バケットのパブリックエンドポイントを指定します。例:oss-cn-shanghai.aliyuncs.com

    otherOpts

    OSSバケットのマウントに必要なパラメーター。値は-o *** -o ***形式である必要があります。例:-o max_stat_cache_size=0 -o allow_other

  3. SecretとPVを作成します。

    kubectl create -f oss-pv.yaml
  4. PVを確認します。

    kubectl get pv

    予期される出力:

    NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
    oss-pv   20Gi       RWX            Retain           Available           test           <unset>                          9s

手順2:PVCを作成する

  1. oss-pvc.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: oss-pvc
    spec:
      storageClassName: test
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 20Gi
      selector:
        matchLabels:
          alicloud-pvname: oss-pv
    

    次の表に、上記のコードブロックのパラメーターを示します。

    パラメーター

    説明

    storageClassName

    この設定は、PVをPVCにバインドするためにのみ使用されます。StorageClassをPVCに関連付ける必要はありません。値は、バインドするPVのspec.storageClassNameパラメーターの値と同じである必要があります。

    accessModes

    アクセスモード。

    storage

    ポッドに割り当てられるストレージ容量。割り当てられた容量は、PVCにバインドされているOSSボリュームの合計容量を超えることはできません。

    alicloud-pvname

    PVを選択してPVCにバインドするために使用されるラベル。値は、バインドするPVのmetadata.labels.alicloud-pvnameパラメーターと同じである必要があります。

  2. PVCを作成します。

    kubectl create -f oss-pvc.yaml
  3. PVCを確認します。

    kubectl get pvc

    次の出力は、手順1で作成したPVがPVCにバインドされていることを示しています。

    NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    oss-pvc   Bound    oss-pv   20Gi       RWX            test           <unset>                 6s

手順3:アプリケーションを作成し、OSSボリュームをアプリケーションにマウントする

  1. oss-test.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。

    次のコードブロックは、2つのポッドをプロビジョニングするDeploymentの構成を指定します。どちらのポッドもoss-pvc PVCを使用してストレージリソースを申請し、ポッドの/dataパスにマウントされます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: oss-test
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-oss
                mountPath: /data
          volumes:
            - name: pvc-oss
              persistentVolumeClaim:
                claimName: oss-pvc
    
  2. Deploymentを作成し、OSSボリュームをDeploymentにマウントします。

    kubectl create -f oss-test.yaml
  3. Deploymentによって作成されたポッドのステータスを確認します。

    kubectl get pod | grep oss-test

    次の出力は、2つのポッドが作成されたことを示しています。

    oss-test-****-***a   1/1     Running   0          28s
    oss-test-****-***b   1/1     Running   0          28s
  4. マウントパス内のファイルを表示します。

    次のコマンドを実行して、マウントパス内のファイルを表示します。OSSバケットのマウントディレクトリ内のデータが返されることが予期されます。デフォルトでは、データは返されません。

    kubectl exec oss-test-****-***a -- ls /data

コンソール

手順1:PVを作成する

  1. ACSコンソールにログオンします。

  2. クラスターで、クラスターのIDをクリックして、クラスター管理ページに移動します。

  3. クラスター管理ページの左側のナビゲーションペインで、ボリューム > 永続ボリュームを選択します。

  4. 永続ボリュームページで、作成をクリックします。

  5. [PVの作成] ダイアログボックスでパラメーターを設定し、作成をクリックします。

    パラメーター

    説明

    PVタイプ

    OSSを選択します。

    OSS

    ボリューム名

    PVのカスタム名を指定します。名前は、コンソールに表示されている形式の要件に従う必要があります。

    oss-pv

    容量

    OSSボリュームの容量。

    説明

    静的にプロビジョニングされたOSSボリュームの容量は参考値です。実際の容量は無制限です。OSSボリュームの使用可能容量を表示するには、OSSコンソールに移動します。

    20Gi

    アクセスモード

    次の説明に基づいてアクセスモードを選択します。

    • ReadOnlyMany:ボリュームは読み取り専用モードで複数のポッドにマウントされます。

    • ReadWriteMany:ボリュームは読み取り/書き込みモードで複数のポッドにマウントされます。

    ReadWriteMany

    アクセス証明書

    データセキュリティを確保するために、AccessKeyペアをSecretに保存できます。この例では、Secretの作成が選択されています。

    • Secretの作成

    • 名前空間:default。

    • 名前:oss-secret。

    • AccessKey ID:********。

    • AccessKey Secret:********。

    バケットID

    作成したOSSバケットのIDを選択します。

    oss-acs-***

    OSSパス

    バケットにマウントするディレクトリを選択します。デフォルト値は/(ルートディレクトリ)です。/dirなどのサブディレクトリを指定できます。サブディレクトリを指定するには、事前にサブディレクトリを作成する必要があります。

    /

    エンドポイント

    OSSバケットのエンドポイント。

    • バケットとクラスターが同じリージョンにデプロイされている場合は、内部エンドポイントを選択します。

    • バケットとクラスターが異なるリージョンにデプロイされている場合は、パブリックエンドポイントを選択します。

    内部エンドポイント

    PVを作成した後、永続ボリュームページでPVを表示できます。PVCはPVにマウントされていません。

手順2:PVCを作成する

  1. クラスター管理ページの左側のナビゲーションペインで、ボリューム > 永続ボリュームクレームを選択します。

  2. 永続ボリュームクレームページで、作成をクリックします。

  3. [PVCの作成] ダイアログボックスでパラメーターを設定し、作成をクリックします。

    パラメーター

    説明

    PVCタイプ

    OSSを選択します。

    OSS

    名前

    PVCのカスタム名を指定します。名前は、コンソールに表示されている形式の要件に従う必要があります。

    oss-pvc

    割り当てモード

    既存のボリュームを選択します。

    既存のボリューム

    既存のボリューム

    作成したPVを選択します。

    oss-pv

    容量

    ポッドに割り当てられるストレージ容量。割り当てられた容量は、PVCにバインドされているOSSボリュームの合計容量を超えることはできません。

    20Gi

    PVCを作成した後、永続ボリュームクレームページでPVCを表示できます。作成したOSSボリュームはPVCにバインドされています。

手順3:アプリケーションを作成し、OSSボリュームをアプリケーションにマウントする

  1. クラスター管理ページの左側のナビゲーションペインで、ワークロード > デプロイメントを選択します。

  2. デプロイメントタブで、イメージから作成をクリックします。

  3. Deploymentのパラメーターを設定し、作成をクリックします。

    次の表に、いくつかのパラメーターを示します。その他のパラメーターにはデフォルト値を使用します。詳細については、Deploymentを使用してステートレスアプリケーションを作成するを参照してください。

    ウィザードページ

    パラメーター

    説明

    基本情報

    名前

    Deploymentのカスタム名を指定します。名前は、コンソールに表示されている形式の要件に従う必要があります。

    oss-test

    レプリカ

    Deploymentによってプロビジョニングされるポッドレプリカの数。

    2

    コンテナ

    イメージ名

    アプリケーションのデプロイに使用するイメージのアドレス。

    registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest

    必要なリソース

    アプリケーションに必要なvCoreの数とメモリの量を指定します。

    0.25 vCoreと0.5 GiBのメモリ

    ボリューム

    PVCの追加をクリックして、パラメーターを設定します。

    • マウントソース:作成したPVCを選択します。

    • コンテナパス:OSSバケットをマウントするコンテナパスを指定します。

    • マウントソース:oss-pvc。

    • コンテナパス:/data。

  4. アプリケーションがデプロイされているかどうかを確認します。

    1. デプロイメントページで、作成したアプリケーションの名前をクリックします。

    2. ポッドタブで、ポッドが実行中状態かどうかを確認します。

OSSボリュームがデータを共有および永続化できるかどうかを確認する

作成したDeploymentは2つのポッドをプロビジョニングします。同じOSSバケットが両方のポッドにマウントされます。次の方法を使用して、OSSボリュームがデータを共有および永続化できるかどうかを確認できます。

  • 一方のポッドでファイルを作成し、もう一方のポッドからファイルにアクセスします。アクセスが成功した場合、データ共有が有効になっています。

  • Deploymentを再作成します。再作成されたポッドからOSSボリュームにアクセスして、元のデータがまだOSSバケットに存在するかどうかを確認します。データがまだ存在する場合、データ永続化が有効になっています。

  1. ポッド情報を表示します。

    kubectl get pod | grep oss-test

    出力例:

    oss-test-****-***a   1/1     Running   0          40s
    oss-test-****-***b   1/1     Running   0          40s
  2. データ共有が有効になっているかどうかを確認します。

    1. ポッドにファイルを作成します。

      この例では、oss-test-****-***aポッドが使用されます。

      kubectl exec oss-test-****-***a -- touch /data/test.txt
    2. もう一方のポッドから作成したファイルを表示します。

      この例では、oss-test-****-***bポッドが使用されます。

      kubectl exec oss-test-****-***b -- ls /data

      次の出力は、oss-test-****-***aポッドで作成したtest.txtファイルにoss-test-****-***bポッドからアクセスできることを示しています。

      test.txt
  3. データ永続化が有効になっているかどうかを確認します。

    1. Deploymentを再作成します。

      kubectl rollout restart deploy oss-test
    2. ポッドが再作成された後、新しいポッドを確認します。

      kubectl get pod | grep oss-test

      出力例:

      oss-test-****-***c   1/1     Running   0          67s
      oss-test-****-***d   1/1     Running   0          49s
    3. 新しいポッドからファイルにアクセスして、データがまだファイルシステムに存在するかどうかを確認します。

      この例では、oss-test-c***ポッドが使用されます。

      kubectl exec oss-test-****-***c -- ls /data

      次の出力は、データがまだOSSバケットに存在し、再作成されたポッドのマウントディレクトリからアクセスできることを示しています。

      test.txt