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

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