Alibaba Cloud Object Storage Service (OSS) は、画像、音声、動画ファイルなどの非構造化データを格納するための、大規模でセキュア、低コスト、高信頼性のサービスです。この記事では、ACK Serverless クラスターで PersistentVolumeClaim (PVC) を使用して、OSS バケットを ECI Pod にマウントする方法について説明します。
前提条件
ACK サーバーレスクラスターが必要です。詳細については「クラスターの作成」をご参照ください。
注意事項
-
OSS は共有ストレージを提供します。単一の OSS バケットを複数の Pod にマウントできます。
-
マウントディレクトリに 1,000 を超えるファイルを保存しないでください。ファイル数が多すぎると、ossfs が過剰なメモリを消費し、Pod でメモリ不足 (OOM) エラーが発生する可能性があります。
操作手順
-
OSS バケット情報を取得します。
OSS バケットがない場合は、OSS コンソールで作成します。詳細については、「バケットの作成」をご参照ください。
-
OSSコンソールにログインします。左側のナビゲーションペインで、バケットリスト をクリックします。
-
バケットリスト ページで、対象のバケットの名前をクリックします。
-
バケット詳細ページで、概要 タブをクリックします。アクセスポート セクションで、ターゲットエンドポイントをコピーします。
-
バケットとクラスターが同じリージョンにある場合は、VPC エンドポイントをコピーします。
-
バケットとクラスターが異なるリージョンにある場合は、インターネットエンドポイントをコピーします。
-
-
-
承認方法を選択してください。
-
方法 1 (推奨):RAM ロールを使用します。
RAM ロールを作成し、権限を付与します。ロールを作成する際、Principal Type を クラウドサービス に、Principal Name を [ECS] に設定します。次に、AliyunOSSFullAccess ポリシーをロールにアタッチします。詳細については、「信頼できる Alibaba Cloud サービス用の RAM ロールの作成」および「RAM ロールへの権限付与」をご参照ください。
-
方法 2:アクセスキーペアを使用します。
AccessKey ID と AccessKey Secret を取得します。詳細については、「アクセスキーペアの取得」をご参照ください。
-
-
次の内容で test-ack-oss.yaml ファイルを作成します。
説明この例では VPC 環境を使用します。VPC アクセスの場合、インスタンス、コンテナイメージリポジトリ、および OSS エンドポイントが、中国 (北京) など、同じリージョンにあることを確認してください。
リージョンをまたいで OSS をマウントしたり、イメージをプルしたりする必要がある場合は、インターネットアクセスを設定し、次のコード内の
imageアドレスまたは OSS の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>"を次の YAML に置き換えます。akId: "<your AccessKey ID>" akSecret: "<your AccessKey Secret>"説明クロスアカウントの OSS バケットをマウントするには、対象アカウントの AccessKey ID と AccessKey Secret を設定します。
以下の OSS 関連のパラメーターを volumeAttributes に設定する必要があります。
パラメーター
説明
bucket
OSS バケットの名前。
path
マウントするバケット内のサブディレクトリのパスです。 デフォルトは / で、バケット全体がマウントされます。 たとえば、これを /data に設定すると、バケット内の data ディレクトリのみがマウントされます。
url
手順 1 で取得した OSS エンドポイントです。
-
バケットとクラスターが同じリージョンにある場合は、VPC エンドポイントを使用します。
-
バケットとクラスターが異なるリージョンにある場合は、インターネットエンドポイントを使用します。
otherOpts
OSS をマウントする際、-o <オプション> の形式でカスタムパラメーターを入力できます。 例: -o max_stat_cache_size=0 -o allow_other。
ramRole
認可に使用する RAM ロール。
akId
認可に使用する AccessKey ID。
akSecret
認可に使用する AccessKey Secret。
-
-
次のコマンドを実行して、ECI Pod を作成し、OSS ボリュームをマウントします。
kubectl create -f test-ack-oss.yaml -
次のコマンドを実行して Pod を確認します。
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>Pod 内のファイルディレクトリを表示します。OSS のマウントディレクトリ /cache-test が作成されていることがわかります。最初の Pod に書き込まれたファイルは 2 番目の Pod で表示できます。これは、2 つの Pod が OSS ストレージを共有していることを意味します。
shell@Alicloud:~$ kubectl exec -it test-ack-oss-655db9d64d-5q7d9 -- bash root@test-ack-oss-655db9d64d-5q7d9:/# ls bin boot cache-test dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@test-ack-oss-655db9d64d-5q7d9:/# ls /cache-test root@test-ack-oss-655db9d64d-5q7d9:/# echo "hell oss">/cache-test/ack-oss root@test-ack-oss-655db9d64d-5q7d9:/# ls /cache-test ack-oss root@test-ack-oss-655db9d64d-5q7d9:/# cat /cache-test/ack-oss hell oss root@test-ack-oss-655db9d64d-5q7d9:/# exit exit shell@Alicloud:~$ kubectl exec -it test-ack-oss-655db9d64d-m5vct -- bash root@test-ack-oss-655db9d64d-m5vct:/# ls /cache-test ack-oss root@test-ack-oss-655db9d64d-m5vct:/# cat /cache-test/ack-oss hell oss
関連ドキュメント
OSS ボリュームの詳細については、「OSS ボリュームの概要」をご参照ください。