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

Container Service for Kubernetes:OSS バケットをボリュームとして使用する

最終更新日:Jul 09, 2025

Object Storage Service (OSS) は、Alibaba Cloud が提供する安全で費用対効果が高く、耐久性に優れたクラウドストレージサービスであり、画像、音声データ、ビデオデータなどの大量の非構造化データを保存するために使用されます。このトピックでは、ACK Serverless クラスター 内の Elastic Container Instance ベースのポッドに永続ボリューム要求 (PVC) を使用して OSS バケットをマウントする方法について説明します。

前提条件

ACK Serverless クラスター が作成されていること。詳細については、「クラスターを作成する」をご参照ください。

注意事項

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

  • マウントディレクトリには 1,000 個以下のファイルを保存することをお勧めします。マウントディレクトリに多数のファイルを保存すると、ossfs は大量のメモリを消費します。これにより、ポッドでメモリ不足 (OOM) エラーが発生する可能性があります。

手順

  1. 使用する OSS バケットに関する情報を取得します。

    使用可能な OSS バケットがない場合は、OSS コンソールで作成します。詳細については、「ACK Serverless クラスターを作成する」をご参照ください。

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

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

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

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

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

  2. 次のいずれかの方法を使用して、OSS へのアクセス権限を付与します。

    • 方法 1: (推奨) RAM ロールを使用して権限を付与する

      Resource Access Management (RAM) ロールを作成し、RAM ポリシーを RAM ロールにアタッチします。 RAM ロールを作成するときは、[プリンシパルタイプ][クラウドサービス] に設定し、[プリンシパル名][Elastic Compute Service / ECS] に設定します。AliyunOSSFullAccess ポリシーを RAM ロールにアタッチします。詳細については、「信頼できる Alibaba Cloud サービスの RAM ロールを作成する」および「RAM ロールに権限を付与する」をご参照ください。

    • 方法 2: AccessKey ペアを使用して権限を付与する

      使用する RAM ユーザーの AccessKey ID と AccessKey シークレットを取得します。詳細については、「AccessKey ペアを取得する」をご参照ください。

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

    説明

    この例では、VPC が使用されています。インスタンス、イメージリポジトリ、OSS バケットが中国 (北京) など同じリージョンにあることを確認してください。

    リージョンをまたいで OSS バケットをマウントしたり、イメージをプルしたりする場合は、インターネット経由のアクセスを設定し、イメージのアドレスまたは OSS バケットの URL を有効な形式に変更する必要があります。インターネットアクセスするには、次のコードの image フィールドと url フィールドを変更する必要があります。

    • image: 値を registry.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2 に設定します。

    • url: パブリックエンドポイントに設定します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-ack-oss
      labels:
        alibabacloud.com/eci: "true"
    spec:
      replicas: 2
      selector:
        matchLabels:
          alibabacloud.com/eci: "true"
      template:
        metadata:
          labels:
            alibabacloud.com/eci: "true"
        spec:
          containers:
          - name: nginx
            image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
            ports:
            - containerPort: 80
            volumeMounts:
              - name: cache-volume
                mountPath: /cache-test
          volumes:
            - name: cache-volume
              persistentVolumeClaim:
                claimName: oss-pvc
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: oss-pvc
    spec:
      storageClassName: test
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-oss
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: oss-csi-pv
      labels:
        alicloud-pvname: pv-oss
    spec:
      storageClassName: test
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: oss-csi-pv
        volumeAttributes:
          bucket: "oss-test"
          url: "oss-cn-beijing-internal.aliyuncs.com"
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          ramRole: "<your RAM Role Name>"

    上記の例では、RAM ロールを使用して権限を付与しています。 AccessKey ペアを認証に使用する場合、ramRole: "<your RAM Role Name>" を次の行に置き換えます。

          akId: "<your AccessKey ID>"
          akSecret: "<your AccessKey Secret>"
    説明

    OSS バケットとバケットをマウントするクラスターが異なる Alibaba Cloud アカウントに属している場合は、OSS バケットが属しているアカウントの AccessKey ペアを指定する必要があります。

    次の表は、volumeAttributes セクションで設定できるパラメーターについて説明しています。

    パラメーター

    説明

    bucket

    OSS バケットの名前。 OSS バケットのみをポッドにマウントできます。 OSS バケット内のサブディレクトリまたはファイルをポッドにマウントすることはできません。

    url

    手順 1 で取得した OSS バケットのエンドポイント。

    • バケットとクラスターが同じリージョンにある場合は、内部エンドポイントを使用します。

    • バケットとクラスターが異なるリージョンにある場合は、パブリックエンドポイントを使用します。

    otherOpts

    OSS バケットをマウントするために指定されたカスタムオプション。形式: -o *** -o ***。例: -o max_stat_cache_size=0 -o allow_other

    ramRole

    権限の付与に使用される RAM ロール。

    akId

    権限の付与に使用される AccessKey ID。

    akSecret

    権限の付与に使用される AccessKey シークレット。

  4. 次のコマンドを実行して、OSS バケットがマウントされた Elastic Container Instance ベースのポッドを作成します。

    kubectl create -f test-ack-oss.yaml
  5. 次のコマンドを実行して、ポッドをクエリします。

    kubectl get pods -o wide

    予期される出力:

    NAME                              READY   STATUS    RESTARTS   AGE     IP              NODE                           NOMINATED NODE   READINESS GATES
    test-ack-oss-655db9d64d-5q7d9     1/1     Running   0          46s     172.16.XX.XXX   virtual-kubelet-cn-****-k   <none>           <none>
    test-ack-oss-655db9d64d-m5vct     1/1     Running   0          46s     172.16.XX.XXX   virtual-kubelet-cn-****-k   <none>           <none>

    ポッド内のファイルディレクトリを確認し、/cache-test マウントディレクトリが OSS バケット用に生成されていることを確認します。また、1 つのポッドに書き込まれたファイルが他のポッドに表示されることを確認します。これは、2 つのポッドが OSS バケットを共有していることを示します。查看Pod

参照

OSS ボリュームの詳細については、「OSS ボリュームの概要」をご参照ください。