アプリケーションでイメージ、オーディオファイル、ビデオファイルなどの非構造化データを保存する必要がある場合は、オブジェクトストレージサービス(OSS)ボリュームを永続ボリューム(PV)としてアプリケーションにマウントできます。このトピックでは、静的にプロビジョニングされたOSSボリュームをアプリケーションにマウントする方法と、OSSボリュームを使用してデータを共有および永続化できるかどうかを確認する方法について説明します。
背景情報
OSSは、Alibaba Cloudが提供する安全で費用対効果が高く、大容量で信頼性の高いクラウドストレージサービスです。OSSは、頻繁に変更されないデータや、イメージ、オーディオファイル、ビデオファイルなどの非構造化データに適しています。詳細については、ストレージの概要を参照してください。
Alibaba Cloud Container Compute Service(ACS)は、静的にプロビジョニングされたOSSボリュームのみをサポートしています。動的にプロビジョニングされたOSSボリュームは、ACSではサポートされていません。
前提条件
managed-csiprovisionerの最新バージョンがAlibaba Cloud Container Compute Service(ACS)クラスターにインストールされていること。
ACSコンソールのACSクラスター管理ページに移動します。クラスター管理ページの左側のナビゲーションペインで、
を選択します。ストレージタブで、managed-csiprovisionerがインストールされているかどうかを確認できます。注意事項
OSSは共有ストレージサービスです。1つのOSSバケットを複数のポッドにマウントできます。
マウントディレクトリには1,000個以下のファイルを保存することをお勧めします。
ossfsを使用して
List
操作を実行すると、要求されたファイルのメタデータを取得するためにOSSにHTTPリクエストが送信されます。listed
ディレクトリに多数のファイルが含まれている場合、ossfsは大量のシステムメモリを占有します。その結果、ポッドでメモリ不足(OOM)エラーが発生する可能性があります。この問題を解決するには、ディレクトリを分割するか、OSSバケットのサブディレクトリをマウントします。
OSSバケットを作成し、バケット情報を取得する
OSSバケットを作成します。
OSSコンソールにログオンします。左側のナビゲーションペインで、バケットをクリックします。
バケットの作成をクリックします。
[バケットの作成] パネルでパラメーターを設定し、作成をクリックします。次に、後続の手順に進みます。
次の表にパラメーターを示します。詳細については、バケットの作成を参照してください。
パラメーター
説明
バケット名
OSSバケットのカスタム名を指定します。名前はすべてのOSSバケットの中で一意である必要があります。バケットを作成した後は、名前を変更できません。名前は、コンソールに表示されている形式の要件に従う必要があります。
リージョン
特定のリージョンを選択することをお勧めします。次に、ACSクラスターが存在するリージョンを選択します。こうすることで、ACSクラスター内のポッドは内部ネットワーク経由でバケットにアクセスできます。
オプション。OSSバケットのサブディレクトリをマウントする場合は、まずバケットにサブディレクトリを作成する必要があります。
バケットページで、作成したOSSバケットの名前をクリックします。
バケット詳細ページの左側のナビゲーションペインで、
を選択します。ディレクトリの作成をクリックして、バケットにディレクトリを作成します。
OSSバケットのエンドポイントを取得します。
バケットページで、使用するバケットを見つけて、バケット名をクリックします。
バケット詳細ページで、概要タブをクリックします。ポートセクションで、次の説明に基づいてエンドポイントをコピーします。
バケットとクラスターが同じリージョンにデプロイされている場合は、内部エンドポイントをコピーします。
バケットとクラスターが異なるリージョンにデプロイされている場合は、パブリックエンドポイントをコピーします。
OSSバケットへのアクセスに使用するAccessKeyペアを取得します。詳細については、AccessKeyペアの取得を参照してください。
説明別のAlibaba Cloudアカウントに属するOSSバケットをマウントする場合は、そのアカウントのAccessKeyペアを取得する必要があります。
静的にプロビジョニングされたOSSボリュームをマウントする
kubectl
手順1:PVを作成する
ACSクラスターに接続します。詳細については、クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続するとCloud Shellでkubectlを使用してACSクラスターを管理するを参照してください。
oss-pv.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: v1 kind: Secret metadata: name: oss-secret namespace: default stringData: akId: <your AccessKey ID> // AccessKey ID akSecret: <your AccessKey Secret> // AccessKey Secret --- apiVersion: v1 kind: PersistentVolume metadata: name: oss-pv labels: alicloud-pvname: oss-pv spec: storageClassName: test capacity: storage: 20Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: oss-pv nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: "<your OSS Bucket Name>" // OSSバケット名 url: "<your OSS Bucket Endpoint>" // OSSバケットエンドポイント otherOpts: "-o max_stat_cache_size=0 -o allow_other"
説明上記のファイルは、SecretとPVを作成するために使用されます。Secretを使用してAccessKeyペアを保存すると、PVでAccessKeyペアを指定するための安全な方法が提供されます。
akId
の値を取得したAccessKey IDに置き換え、akSecret
の値を取得したAccessKeyシークレットに置き換えます。次の表に、PVのパラメーターを示します。
パラメーター
説明
alicloud-pvname
PVに追加するラベル。このラベルは、PVCを選択してPVにバインドするために使用されます。
storageClassName
この設定は、PVCをPVにバインドするためにのみ使用されます。StorageClassをPVに関連付ける必要はありません。
storage
OSSボリュームの容量。
説明静的にプロビジョニングされたOSSボリュームの容量は参考値です。実際の容量は無制限です。OSSボリュームの使用可能容量を表示するには、OSSコンソールに移動します。
accessModes
アクセスモード。
persistentVolumeReclaimPolicy
再利用ポリシー。
driver
ボリュームのプロビジョニングに使用されるボリュームドライバーのタイプ。この例では、パラメーターは
ossplugin.csi.alibabacloud.com
に設定されています。これは、Alibaba CloudがOSS用に提供するコンテナストレージインターフェース(CSI)プラグインが使用されていることを示します。volumeHandle
PVの一意の識別子。値は
metadata.name
の値と同じである必要があります。nodePublishSecretRef
承認のためにAccessKeyペアが取得されるSecret。
bucket
OSSバケットの名前。
bucket
の値を作成したOSSバケットの名前に置き換えます。url
OSSバケットのエンドポイント。
url
の値を作成したOSSバケットのエンドポイントに置き換えます。バケットとクラスターが同じリージョンにデプロイされている場合は、バケットの内部エンドポイントを指定します。例:
oss-cn-shanghai-internal.aliyuncs.com
。バケットとクラスターが異なるリージョンにデプロイされている場合は、バケットのパブリックエンドポイントを指定します。例:
oss-cn-shanghai.aliyuncs.com
。
otherOpts
OSSバケットのマウントに必要なパラメーター。値は
-o *** -o ***
形式である必要があります。例:-o max_stat_cache_size=0 -o allow_other
。SecretとPVを作成します。
kubectl create -f oss-pv.yaml
PVを確認します。
kubectl get pv
予期される出力:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE oss-pv 20Gi RWX Retain Available test <unset> 9s
手順2:PVCを作成する
oss-pvc.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: oss-pvc spec: storageClassName: test accessModes: - ReadWriteMany resources: requests: storage: 20Gi selector: matchLabels: alicloud-pvname: oss-pv
次の表に、上記のコードブロックのパラメーターを示します。
パラメーター
説明
storageClassName
この設定は、PVをPVCにバインドするためにのみ使用されます。StorageClassをPVCに関連付ける必要はありません。値は、バインドするPVの
spec.storageClassName
パラメーターの値と同じである必要があります。accessModes
アクセスモード。
storage
ポッドに割り当てられるストレージ容量。割り当てられた容量は、PVCにバインドされているOSSボリュームの合計容量を超えることはできません。
alicloud-pvname
PVを選択してPVCにバインドするために使用されるラベル。値は、バインドするPVの
metadata.labels.alicloud-pvname
パラメーターと同じである必要があります。PVCを作成します。
kubectl create -f oss-pvc.yaml
PVCを確認します。
kubectl get pvc
次の出力は、手順1で作成したPVがPVCにバインドされていることを示しています。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE oss-pvc Bound oss-pv 20Gi RWX test <unset> 6s
手順3:アプリケーションを作成し、OSSボリュームをアプリケーションにマウントする
oss-test.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
次のコードブロックは、2つのポッドをプロビジョニングするDeploymentの構成を指定します。どちらのポッドも
oss-pvc
PVCを使用してストレージリソースを申請し、ポッドの/data
パスにマウントされます。apiVersion: apps/v1 kind: Deployment metadata: name: oss-test labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest ports: - containerPort: 80 volumeMounts: - name: pvc-oss mountPath: /data volumes: - name: pvc-oss persistentVolumeClaim: claimName: oss-pvc
Deploymentを作成し、OSSボリュームをDeploymentにマウントします。
kubectl create -f oss-test.yaml
Deploymentによって作成されたポッドのステータスを確認します。
kubectl get pod | grep oss-test
次の出力は、2つのポッドが作成されたことを示しています。
oss-test-****-***a 1/1 Running 0 28s oss-test-****-***b 1/1 Running 0 28s
マウントパス内のファイルを表示します。
次のコマンドを実行して、マウントパス内のファイルを表示します。OSSバケットのマウントディレクトリ内のデータが返されることが予期されます。デフォルトでは、データは返されません。
kubectl exec oss-test-****-***a -- ls /data
コンソール
手順1:PVを作成する
ACSコンソールにログオンします。
クラスターで、クラスターのIDをクリックして、クラスター管理ページに移動します。
クラスター管理ページの左側のナビゲーションペインで、
を選択します。永続ボリュームページで、作成をクリックします。
[PVの作成] ダイアログボックスでパラメーターを設定し、作成をクリックします。
パラメーター
説明
例
PVタイプ
OSSを選択します。
OSS
ボリューム名
PVのカスタム名を指定します。名前は、コンソールに表示されている形式の要件に従う必要があります。
oss-pv
容量
OSSボリュームの容量。
説明静的にプロビジョニングされたOSSボリュームの容量は参考値です。実際の容量は無制限です。OSSボリュームの使用可能容量を表示するには、OSSコンソールに移動します。
20Gi
アクセスモード
次の説明に基づいてアクセスモードを選択します。
ReadOnlyMany:ボリュームは読み取り専用モードで複数のポッドにマウントされます。
ReadWriteMany:ボリュームは読み取り/書き込みモードで複数のポッドにマウントされます。
ReadWriteMany
アクセス証明書
データセキュリティを確保するために、AccessKeyペアをSecretに保存できます。この例では、Secretの作成が選択されています。
Secretの作成
名前空間:default。
名前:oss-secret。
AccessKey ID:********。
AccessKey Secret:********。
バケットID
作成したOSSバケットのIDを選択します。
oss-acs-***
OSSパス
バケットにマウントするディレクトリを選択します。デフォルト値は
/
(ルートディレクトリ)です。/dir
などのサブディレクトリを指定できます。サブディレクトリを指定するには、事前にサブディレクトリを作成する必要があります。/
エンドポイント
OSSバケットのエンドポイント。
バケットとクラスターが同じリージョンにデプロイされている場合は、内部エンドポイントを選択します。
バケットとクラスターが異なるリージョンにデプロイされている場合は、パブリックエンドポイントを選択します。
内部エンドポイント
PVを作成した後、永続ボリュームページでPVを表示できます。PVCはPVにマウントされていません。
手順2:PVCを作成する
クラスター管理ページの左側のナビゲーションペインで、
を選択します。永続ボリュームクレームページで、作成をクリックします。
[PVCの作成] ダイアログボックスでパラメーターを設定し、作成をクリックします。
パラメーター
説明
例
PVCタイプ
OSSを選択します。
OSS
名前
PVCのカスタム名を指定します。名前は、コンソールに表示されている形式の要件に従う必要があります。
oss-pvc
割り当てモード
既存のボリュームを選択します。
既存のボリューム
既存のボリューム
作成したPVを選択します。
oss-pv
容量
ポッドに割り当てられるストレージ容量。割り当てられた容量は、PVCにバインドされているOSSボリュームの合計容量を超えることはできません。
20Gi
PVCを作成した後、永続ボリュームクレームページでPVCを表示できます。作成したOSSボリュームはPVCにバインドされています。
手順3:アプリケーションを作成し、OSSボリュームをアプリケーションにマウントする
クラスター管理ページの左側のナビゲーションペインで、
を選択します。デプロイメントタブで、イメージから作成をクリックします。
Deploymentのパラメーターを設定し、作成をクリックします。
次の表に、いくつかのパラメーターを示します。その他のパラメーターにはデフォルト値を使用します。詳細については、Deploymentを使用してステートレスアプリケーションを作成するを参照してください。
ウィザードページ
パラメーター
説明
例
基本情報
名前
Deploymentのカスタム名を指定します。名前は、コンソールに表示されている形式の要件に従う必要があります。
oss-test
レプリカ
Deploymentによってプロビジョニングされるポッドレプリカの数。
2
コンテナ
イメージ名
アプリケーションのデプロイに使用するイメージのアドレス。
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
必要なリソース
アプリケーションに必要なvCoreの数とメモリの量を指定します。
0.25 vCoreと0.5 GiBのメモリ
ボリューム
PVCの追加をクリックして、パラメーターを設定します。
マウントソース:作成したPVCを選択します。
コンテナパス:OSSバケットをマウントするコンテナパスを指定します。
マウントソース:oss-pvc。
コンテナパス:/data。
アプリケーションがデプロイされているかどうかを確認します。
デプロイメントページで、作成したアプリケーションの名前をクリックします。
ポッドタブで、ポッドが実行中状態かどうかを確認します。
OSSボリュームがデータを共有および永続化できるかどうかを確認する
作成したDeploymentは2つのポッドをプロビジョニングします。同じOSSバケットが両方のポッドにマウントされます。次の方法を使用して、OSSボリュームがデータを共有および永続化できるかどうかを確認できます。
一方のポッドでファイルを作成し、もう一方のポッドからファイルにアクセスします。アクセスが成功した場合、データ共有が有効になっています。
Deploymentを再作成します。再作成されたポッドからOSSボリュームにアクセスして、元のデータがまだOSSバケットに存在するかどうかを確認します。データがまだ存在する場合、データ永続化が有効になっています。
ポッド情報を表示します。
kubectl get pod | grep oss-test
出力例:
oss-test-****-***a 1/1 Running 0 40s oss-test-****-***b 1/1 Running 0 40s
データ共有が有効になっているかどうかを確認します。
ポッドにファイルを作成します。
この例では、
oss-test-****-***a
ポッドが使用されます。kubectl exec oss-test-****-***a -- touch /data/test.txt
もう一方のポッドから作成したファイルを表示します。
この例では、
oss-test-****-***b
ポッドが使用されます。kubectl exec oss-test-****-***b -- ls /data
次の出力は、oss-test-****-***aポッドで作成した
test.txt
ファイルにoss-test-****-***bポッドからアクセスできることを示しています。test.txt
データ永続化が有効になっているかどうかを確認します。
Deploymentを再作成します。
kubectl rollout restart deploy oss-test
ポッドが再作成された後、新しいポッドを確認します。
kubectl get pod | grep oss-test
出力例:
oss-test-****-***c 1/1 Running 0 67s oss-test-****-***d 1/1 Running 0 49s
新しいポッドからファイルにアクセスして、データがまだファイルシステムに存在するかどうかを確認します。
この例では、
oss-test-c***
ポッドが使用されます。kubectl exec oss-test-****-***c -- ls /data
次の出力は、データがまだOSSバケットに存在し、再作成されたポッドのマウントディレクトリからアクセスできることを示しています。
test.txt