Object Storage Service (OSS) は、Alibaba cloudが提供する安全で費用対効果が高く、耐久性の高いクラウドストレージサービスで、画像、オーディオデータ、ビデオデータなどの大量の非構造化データを保存します。 このトピックでは、永続ボリュームクレーム (PVC) を使用して、OSSバケットをACKサーバーレスクラスターのエラスティックコンテナインスタンスベースのポッドにマウントする方法について説明します。
前提条件
ACKサーバーレスクラスターが作成されます。 詳細については、「クラスターの作成」をご参照ください。
使用上の注意
OSSは共有ストレージサービスです。 OSSバケットを複数のポッドにマウントできます。
マウントディレクトリには1,000個以下のファイルを保存することをお勧めします。 mountディレクトリに大量のファイルを格納すると、ossfsは大量のメモリを消費します。 これにより、ポッドでメモリ不足 (OOM) エラーが発生する可能性があります。
手順
使用するOSSバケットに関する情報を取得します。
使用可能なOSSバケットがない場合は、OSSコンソールで作成します。 詳細については、「ACKサーバーレスクラスターの作成」をご参照ください。
OSSコンソールにログインします。 左側のナビゲーションウィンドウで、[バケット] をクリックします。
[バケット] ページで、使用するOSSバケットを見つけ、バケット名をクリックします。
バケットの詳細ページで、[概要] タブをクリックします。 [ポート] セクションで、次の情報に基づいてエンドポイントをコピーします。
バケットとクラスターが同じリージョンにデプロイされている場合は、内部エンドポイントをコピーします。
バケットとクラスターが異なるリージョンにデプロイされている場合は、パブリックエンドポイントをコピーします。
次のいずれかの方法を使用して、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ペアの取得」をご参照ください。
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シークレット。
次のコマンドを実行して、OSSバケットがマウントされたエラスティックコンテナインスタンスベースのポッドを作成します。
kubectl create -f test-ack-oss.yaml
次のコマンドを実行してポッドを照会します。
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バケットを共有することを示します。
関連ドキュメント
OSSボリュームの詳細については、「OSSボリュームの概要」をご参照ください。