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

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

最終更新日:Dec 14, 2024

Object Storage Service (OSS) は、Alibaba cloudが提供する安全で費用対効果が高く、耐久性の高いクラウドストレージサービスで、画像、オーディオデータ、ビデオデータなどの大量の非構造化データを保存します。 このトピックでは、永続ボリュームクレーム (PVC) を使用して、OSSバケットをACKサーバーレスクラスターのエラスティックコンテナインスタンスベースのポッドにマウントする方法について説明します。

前提条件

ACKサーバーレスクラスターが作成されます。 詳細については、「クラスターの作成」をご参照ください。

使用上の注意

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

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

手順

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

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

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

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

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

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

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

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

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

      Resource Access Management (RAM) ロールを作成し、RAMロールにRAMポリシーをアタッチします。 RAMロールを作成するときに、[信頼できるエンティティの選択] パラメーターにAlibaba Cloud Service、[ロールタイプ] パラメーターに通常のサービスロール、[信頼できるサービスの選択] パラメーターにElastic Compute Serviceを選択します。 RAMロールに権限を付与する場合は、AliyunOSSFullAccessポリシーをRAMロールにアタッチします。 詳細については、「信頼できるAlibaba CloudサービスのRAMロールの作成」および「RAMロールへの権限付与」をご参照ください。

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

      使用するRAMユーザーのAccessKey IDとAccessKey secretを取得します。 詳細については、「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
      namespace: test
    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セクションで設定できるパラメーターを示します。

    パラメーター

    説明

    バケット

    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バケットがマウントされたエラスティックコンテナインスタンスベースのポッドを作成します。

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

    kubectl get pods -o wide

    期待される出力:

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

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

関連ドキュメント

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