Object Storage Service (OSS) は、Alibaba cloudが提供する安全で費用対効果の高い永続性の高いクラウドストレージサービスです。 OSSでは、大量のデータをクラウドに保存できます。 RAM Roles for Service Accounts (RRSA) 認証またはAccessKey認証をResource Access Management (RAM) ユーザーとして使用して、静的にプロビジョニングされたOSSボリュームをマウントする権限を設定できます。
前提条件
- 説明
静的にプロビジョニングされたOSSボリュームをマウントするポッドをホストするOSSバケットとElastic Compute Service (ECS) インスタンスが同じリージョンにデプロイされている場合、内部エンドポイントを使用してECSインスタンスからOSSバケットにアクセスします。
シナリオ
OSSは、Alibaba cloudが提供する安全で費用対効果が高く、大容量で信頼性の高いクラウドストレージサービスです。 OSSバケットをACKクラスターの複数のポッドにマウントできます。 OSSは、次のシナリオに適用されます。
ディスクI/Oの要件が低い。
設定ファイル、画像、短いビデオなどのデータの共有。
使用上の注意
OSSバケットは、動的にプロビジョニングされた永続ボリューム (PV) をサポートしません。 アカウント間でOSSバケットを使用しないことを推奨します。
ACKクラスターが更新されると、kubeletが再起動されます。 その結果、ossfsが再起動され、マウントされたOSSディレクトリが使用できなくなります。 この場合、OSSボリュームがマウントされているポッドを再作成する必要があります。 YAMLファイルにヘルスチェック設定を追加して、ポッドを再起動し、OSSディレクトリが使用できなくなったときにOSSボリュームを再マウントできます。
説明使用するcsi-pluginおよびcsi-provisionerコンポーネントがV1.18.8.45以降の場合、上記の問題は発生しません。
アプリケーションテンプレートでsecurityContext.fsgroupパラメーターが指定されている場合、ボリュームのマウント後にkubeletが
chmod
またはchown
操作を実行するため、時間の消費が増加します。説明securityContext.fsgroupパラメーターを指定した場合のマウントプロセスを高速化する方法の詳細については、「OSSボリュームのマウントに長時間かかるのはなぜですか」をご参照ください。 「OSSボリュームに関するFAQ」トピックのセクション。
ossfsを使用してList操作を実行すると、HTTPリクエストがOSSに送信され、リクエストされたファイルのメタデータが取得されます。 ディレクトリに100,000を超えるファイルなど、多数のファイルが含まれている場合、ossfsは大量のシステムメモリを占有します。 その結果、ポッド内でメモリ不足 (OOM) エラーが発生する可能性があります。 OOMエラーを引き起こす可能性のあるファイルの実際の数は、ノードメモリに関連しています。 この問題を解決するには、ディレクトリを分割するか、OSSバケット内のサブディレクトリをマウントします。
ossfsは同時読み取りシナリオに適用できます。 同時読み取りシナリオでは、永続ボリュームクレーム (PVC) とPVのアクセスモードをReadOnlyManyに設定することを推奨します。 書き込み操作を処理するには、OSS SDKまたはossutilを使用して読み取りと書き込みを分割することを推奨します。 詳細については、「OSS読み書き分離のベストプラクティス」をご参照ください。
説明ossfsを使用して、アクセスモードがReadWriteManyのOSSボリュームにデータを書き込む場合、次の項目に注意してください。
ossfsは、同時書き込み操作によって書き込まれたデータの一貫性を保証できません。
OSSボリュームがポッドにマウントされた後、ポッドまたはポッドのホストにログインし、マウントパス内のファイルを削除または変更すると、OSSバケット内のソースファイルも削除または変更されます。 重要なデータが誤って削除されないように、OSSバケットのバージョン管理を有効にすることができます。 詳細については、「バージョン管理」をご参照ください。
サイズが10 MBを超えるファイルをOSSにアップロードする場合は、ファイルを複数のパーツに分割し、パーツを個別にアップロードできます。 マルチパートアップロードタスクが中断された場合にパーツに追加のストレージ料金が発生しないようにするには、次のいずれかの方法を使用して、不要になったパーツを削除します。
手動でパーツを削除します。 詳細については、「パーツの削除」をご参照ください。
部品を自動的に削除するライフサイクルルールを設定します。 詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。
RRSA認証を使用して静的にプロビジョニングされたOSSボリュームをマウントする
RRSA機能を使用して、ACKクラスターにデプロイされているさまざまなPVにアクセス制御を適用できます。 これにより、PVにきめ細かいAPI権限制御が実装され、セキュリティリスクが軽減されます。 詳細については、「RRSAを使用して異なるポッドに異なるクラウドサービスへのアクセスを許可する」をご参照ください。
RRSA機能は、Kubernetes 1.26を実行するACKクラスターのみをサポートします。 RRSA機能をサポートするACKクラスターには、ACK Basicクラスター、ACK Proクラスター、ACK Serverless Basicクラスター、およびACK Serverless Proクラスターがあります。 クラスターが使用するCSIコンポーネントのバージョンは1.30.4以降である必要があります。 バージョン1.30.4より前にRRSA機能を使用した場合は、RAMロールにポリシーをアタッチする必要があります。 詳細については、「 [製品の変更] CSIのossfsバージョンのアップグレードとマウントプロセスの最適化」をご参照ください。
(オプション) 手順1: RAMロールの作成
クラスターで初めてRRSA機能を使用する場合は、次の手順を実行します。 RRSA認証を使用してOSSボリュームをクラスターにマウントした場合は、この手順をスキップしてください。
ACKコンソールにログインし、RRSAを有効にします。 詳細については、「RRSAを使用して異なるポッドに異なるクラウドサービスへのアクセスを許可する」をご参照ください。
RRSA認証を使用してOSSボリュームをマウントするためのRAMロールを作成します。 RAMロールは、RRSAを使用してOSSボリュームをマウントするときにクラスターによって引き受けられます。
RAMロールを作成するときに、[信頼できるエンティティの選択] パラメーターとして [IdP] を選択します。 この例では、RAMロールの名前はdemo-role-for-rrsaです。
にログインします。RAMコンソールをAlibaba Cloudアカウントに置き換えます。
左側のナビゲーションウィンドウで、 を選択します。 [ロール] ページで、[ロールの作成] をクリックします。
では、ロールの作成パネル、選択IdP[信頼できるエンティティ] を選択し、次へ.
では、ロールの設定ステップ、パラメータを設定し、OK.
この例で設定されているパラメーターを次の表に示します。
パラメーター
説明
RAMロール名
RAM ロールの名前です。 この例では、demo-role-for-rrsaが使用されています。
注
必要に応じて、 RAM ロールの説明です。
IdPタイプ
IDプロバイダー (IdP) のタイプ。 [OIDC] を選択します。
IdPの選択
使用するIdP。 ack-rrsa-<cluster_id> 形式の値を選択します。 <cluster_id> は、クラスターのIDを示します。
条件
oidc:iss: デフォルト値を使用します。
oidc:aud: sts.aliyuncs.comを選択します。
oidc:sub: 条件演算子をStringEqualsに設定します。 この例では、system:serviceaccount:ack-csi-fuse:csi-fuse-ossfsが使用されています。
手順2: demo-role-for-rrsaロールに権限を付与
次のカスタムポリシーを作成して、RAMユーザーにOSS権限を付与します。 詳細については、「カスタムポリシーの作成」をご参照ください。
次のポリシーの
mybucket
をOSSバケットの名前に置き換えます。OSSで読み取り専用権限を付与するポリシー
OSSの読み取りおよび書き込み権限を付与するポリシー
必要に応じて、 OSSバケット内のファイルがkey Management Service (KMS) でカスタマーマスターキー (CMK) を使用して暗号化されている場合、RAMユーザーにKMS権限を付与する必要があります。 詳細については、「OSSボリュームの暗号化」トピックのOSSボリュームの暗号化セクションをご参照ください。
demo-role-for-rrsaロールに必要な権限を付与します。 詳細については、「RAMロールへの権限の付与」をご参照ください。
説明既存のRAMロールを使用する場合は、必要なOSS権限が付与されているRAMロールの信頼ポリシーを変更できます。 詳細については、「RRSAを使用して異なるポッドに異なるクラウドサービスへのアクセスを許可する」トピックの「既存のRAMロールを使用してRAMロールに必要な権限を付与する」セクションをご参照ください。
ステップ3: PVとPVCの作成
RRSA認証を使用するPVを作成します。
次のサンプルテンプレートを使用して、pv-rrsa.yamlという名前のPV構成ファイルを作成します。 このファイルでは、RRSA認証が有効になっています。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss labels: alicloud-pvname: pv-oss spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-oss # Specify the name of the PV. volumeAttributes: bucket: "oss" url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" authType: "rrsa" roleName: "demo-role-for-rrsa"
パラメーター
説明
name
PV の名前。
labels
PVに追加されるラベル。
ストレージ
OSSバケットの使用可能なストレージ。
accessModes
アクセスモード。 有効な値: ReadOnlyManyとReadWriteMany。
ReadOnlyManyを選択した場合、ossfsはOSSバケットを読み取り専用モードでマウントします。
persistentVolumeReclaimPolicy
PVの再利用ポリシー。 OSSボリュームは
保持
ポリシーのみをサポートしています。 つまり、PVCが削除されると、PVもOSSバケット内のデータも削除されません。ドライバー
ドライバーのタイプ。 この例では、パラメーターはossplugin.csi.alibabacloud.comに設定されています。 これは、OSS CSIコンポーネントが使用されることを示します。
volumeHandle
PV の名前。
バケット
マウントするOSSバケット。
url
マウントするOSSバケットのエンドポイント。
ノードとOSSバケットが同じリージョンにある場合、または仮想プライベートクラウド (VPC) を介して接続されている場合は、OSSバケットの内部エンドポイントを使用します。
ノードとOSSバケットが異なるリージョンにある場合は、OSSバケットのパブリックエンドポイントを使用します。
エンドポイント形式:
内部エンドポイント:
http:// oss-{{regionName}}-internal.aliyuncs.com
またはhttps:// oss-{{regionName}}-internal.aliyuncs.com
パブリックエンドポイント:
http:// oss-{{regionName}}.aliyuncs.com
またはhttps:// oss-{{regionName}}.aliyuncs.com
重要実際のエンドポイントは、OSSコンソールの [概要] ページに表示されます。
vpc100-oss-{{regionName}}.aliyuncs.com
の内部アクセスポートは非推奨です。 それに応じて設定を更新してください。
otherOpts
OSSボリュームに
-o *** -o ***
形式のカスタムパラメーターを設定できます。 例:-o umask=022 -o max_stat_cache_size=0 -o allow_other
umask: ossfs内のファイルの権限マスクを変更します。 たとえば、umask=022を指定した場合、ossfsのファイルのアクセス許可マスクは755に変わります。 デフォルトでは、OSS SDKまたはコンソールを使用してアップロードされたファイルの権限マスクはossfsで640されます。 したがって、読み取りと書き込みを分割する場合は、umaskパラメーターを指定することを推奨します。
max_stat_cache_size: メタデータをキャッシュできるファイルの最大数。 メタデータキャッシュは
ls
操作を高速化できます。 ただし、OSS SDK、コンソール、ossutilなどのメソッドを使用してファイルを変更した場合、ファイルのキャッシュされたメタデータは同期的に更新されません。 その結果、キャッシュされたメタデータが古くなり、ls
操作の結果が不正確になる可能性があります。allow_other: 他のユーザーがマウントされたディレクトリにアクセスできるようにします。 ただし、これらのユーザーはディレクトリ内のファイルにアクセスできません。
その他のパラメーターの詳細については、「ossfsでサポートされているオプション」をご参照ください。
パス
マウントするOSSバケットのルートディレクトリからの相対パス。 デフォルト値: /。 このパラメーターは、V1.14.8.32-c77e277b-aliyun以降のcsi-pluginでサポートされています。
1.91より前のossfsバージョンの場合は、事前にOSSでこのパスを作成する必要があります。 詳細については、「ossfs 1.91以降の機能およびossfsパフォーマンスベンチマーク」をご参照ください。
authType
認証方法。 このパラメーターを
rrsa
に設定します。これは、RRSA認証が使用されていることを示します。roleName
使用するRAMロールの名前。 このパラメーターを、手順1で作成または変更したRAMロールの名前に設定します。 異なるPVに対して異なる権限を設定する必要がある場合は、複数のRAMロールを作成し、roleNameパラメーターでRAMロールを指定できます。
説明RRSA認証で指定されたAlibaba Cloudリソース名 (ARN) またはServiceAccountsを使用する方法の詳細については、RRSA認証で指定されたARNまたはServiceAccountを使用するにはどうすればよいですか。 「OSSボリュームに関するFAQ」トピックのセクション。
次のコマンドを実行して、RRSA認証を使用するPVを作成します。
kubectl create -f pv-rrsa.yaml
次のコマンドを実行して、静的にプロビジョニングされたPVCを作成します。
kubectl create -f pvc-oss.yaml
静的にプロビジョニングされたpvcを作成するには、次のPVC-oss.yamlサンプルファイルを使用します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-oss spec: accessModes: - ReadOnlyMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss
パラメーター
説明
name
PVCの名前。
accessModes
アクセスモード。 有効な値: ReadOnlyManyとReadWriteMany。
ReadOnlyManyを選択した場合、ossfsはOSSバケットを読み取り専用モードでマウントします。
ストレージ
PVCが主張する容量。 請求される容量は、PVCに結合されるPVの容量を超えることはできない。
alicloud-pvname
PVを選択してPVCにバインドするために使用されるラベル。 ラベルは、PVCに結合されるPVのラベルと同じでなければなりません。
左側のナビゲーションウィンドウで、
を選択します。 [永続的なボリューム要求] ページで、作成されたPVCを見つけることができます。
ステップ4: アプリケーションの作成
oss-staticという名前のアプリケーションを作成し、PVをアプリケーションにマウントします。
次のコマンドを実行して、oss-static.yamlという名前のファイルを作成します。
kubectl create -f oss-static.yaml
次のoss-static.yamlサンプルファイルを使用して、アプリケーションを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: oss-static
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: pvc-oss
mountPath: "/data"
- name: pvc-oss
mountPath: "/data1"
livenessProbe:
exec:
command:
- sh
- -c
- cd /data
initialDelaySeconds: 30
periodSeconds: 30
volumes:
- name: pvc-oss
persistentVolumeClaim:
claimName: pvc-oss
livenessProbe
: ヘルスチェックの設定。 詳細は、「OSSボリューム」をご参照ください。mountPath
: OSSバケットがコンテナーにマウントされるパス。claimName
: アプリケーションが使用するPVCの名前。
AccessKey認証を使用して、静的にプロビジョニングされたOSSボリュームをRAMユーザーとしてマウントします
ACKコンソールの使用
手順1: OSS権限を持つRAMユーザーを作成し、RAMユーザーのAccessKeyペアを取得する
RAM ユーザーを作成します。 詳細については、「RAM ユーザーの作成」をご参照ください。
次のカスタムポリシーを作成して、RAMユーザーにOSS権限を付与します。 詳細については、「カスタムポリシーの作成」をご参照ください。
次のポリシーの
mybucket
をOSSバケットの名前に置き換えます。OSSで読み取り専用権限を付与するポリシー
OSSの読み取りおよび書き込み権限を付与するポリシー
必要に応じて、 OSSバケット内のファイルがkey Management Service (KMS) でカスタマーマスターキー (CMK) を使用して暗号化されている場合、RAMユーザーにKMS権限を付与する必要があります。 詳細については、「OSSボリュームの暗号化」トピックのOSSボリュームの暗号化セクションをご参照ください。
RAMユーザーにOSS権限を付与します。 詳細については、「RAM ユーザーへの権限の付与」をご参照ください。
RAMユーザーのAccessKeyペアを作成します。 詳細については、「AccessKey の作成」をご参照ください。
ACKコンソールを使用して静的にプロビジョニングされたOSSボリュームをマウントする場合、AccessKey認証のみがサポートされます。 OSSボリュームによって参照されているAccessKeyペアが無効になるか、権限が取り消された場合、ボリュームがマウントされているアプリケーションはOSSへのアクセスに失敗し、権限エラーが報告されます。 この問題を解決するには、AccessKeyペアを格納するシークレットを変更し、OSSボリュームを再度アプリケーションにマウントする必要があります。 この場合、アプリケーションは再起動されます。 AccessKeyペアが取り消された後にossfsを使用してOSSボリュームを再マウントする方法の詳細については、「OSSボリュームに関するFAQ」トピックの「OSSボリュームのマウントに関連する権限を管理する方法」セクションのシナリオ4を参照してください。
AccessKeyペアを定期的にローテーションする必要がある場合は、RRSA認証の使用を推奨します。
手順 2: PV の作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
の右上隅に永続ボリュームページをクリックします。作成.
では、PVの作成ダイアログボックスで、次の表で説明するパラメーターを設定します。
パラメーター
説明
PVタイプ
PVのタイプ。 有効な値: Cloud Disk、NAS、およびOSS この例では、OSSが選択されています。
ボリューム名
PV の名前。 ボリューム名はクラスター内で一意である必要があります。 この例では、pv-ossが使用されます。
容量
PV の容量。
アクセスモード
PVのアクセスモード。 有効な値: ReadOnlyManyとReadWriteMany。 デフォルト値: ReadOnlyMany。
ReadOnlyManyを選択した場合、ossfsはOSSバケットを読み取り専用モードでマウントします。
アクセス証明書
OSSバケットへのアクセスに使用されるシークレット。 この例では、手順1で取得したAccessKeyペアが使用されます。 有効な値:
[既存のシークレット]: パラメーターをこの値に設定する場合は、名前空間および [シークレット] パラメーターも設定する必要があります。
シークレットの作成: パラメーターをこの値に設定する場合は、名前空間、名前、AccessKey ID、およびAccessKey Secretパラメーターも設定する必要があります。
オプションパラメーター
OSSボリュームに
-o *** -o ***
形式のカスタムパラメーターを設定できます。 例:-o umask=022 -o max_stat_cache_size=0 -o allow_other
umask: ossfs内のファイルの権限マスクを変更します。 たとえば、umask=022を指定した場合、ossfsのファイルのアクセス許可マスクは755に変わります。 デフォルトでは、OSS SDKまたはコンソールを使用してアップロードされたファイルの権限マスクはossfsで640されます。 したがって、読み取りと書き込みを分割する場合は、umaskパラメーターを指定することを推奨します。
max_stat_cache_size: メタデータをキャッシュできるファイルの最大数。 メタデータキャッシュは
ls
操作を高速化できます。 ただし、OSS SDK、コンソール、ossutilなどのメソッドを使用してファイルを変更した場合、ファイルのキャッシュされたメタデータは同期的に更新されません。 その結果、キャッシュされたメタデータが古くなり、ls
操作の結果が不正確になる可能性があります。allow_other: 他のユーザーがマウントされたディレクトリにアクセスできるようにします。 ただし、これらのユーザーはディレクトリ内のファイルにアクセスできません。
その他のパラメーターの詳細については、「ossfsでサポートされているオプション」をご参照ください。
バケットID
マウントするOSSバケットの名前。 [バケットの選択] をクリックします。 表示されるダイアログボックスで、マウントするOSSバケットを見つけ、[選択] をクリックします。
Endpoint
マウントするOSSバケットのエンドポイント。
OSSバケットとECSインスタンスが異なるリージョンにある場合、[パブリックエンドポイント] を選択します。
OSSバケットとECSインスタンスが同じリージョンにある場合、[内部エンドポイント] を選択します。
説明デフォルトでは、内部ネットワーク経由でOSSバケットにアクセスするときにHTTPが使用されます。 HTTPSを使用する場合は、kubectlを使用して静的にプロビジョニングされたPVを作成します。
ラベル
PVに追加するラベル。
パラメーターの設定後、作成.
ステップ3: PVCを作成する
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
の右上隅に永続的なボリュームクレームページをクリックします。作成.
では、PVCの作成ダイアログボックスで、次の表で説明するパラメーターを設定します。
パラメーター
説明
PVCタイプ
PVCのタイプ。 有効な値: Cloud Disk、NAS、およびOSS この例では、OSSが選択されています。
名前
PVCの名前。 ボリューム名はクラスター内で一意である必要があります。
割り当てモード
PVCの割り当てモード。 この例では、Existing Volumesが選択されています。
説明PVが作成されていない場合は、[割り当てモード] パラメーターを [ボリュームの作成] に設定し、PVを作成するために必要なパラメーターを設定します。 詳細については、このトピックの「手順2: PVの作成」をご参照ください。
既存のボリューム
[PVの選択] をクリックします。 使用するPVを見つけて、[操作] 列の [選択] をクリックします。
容量
PV の容量。
説明PVの容量は、PVに関連付けられているOSSバケットの容量を超えることはできません。
クリック作成.
PVCの作成後、PVCリストでcsi-oss-pvcという名前のPVCを見つけることができます。 PVはPVCに結合される。
ステップ4: アプリケーションの作成
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[デプロイメント] ページの右上隅にある [イメージから作成] をクリックします。
アプリケーションパラメーターを設定します。
次のセクションでは、ボリュームパラメーターの設定方法について説明します。 その他のパラメーターの詳細については、「デプロイを使用したステートレスアプリケーションの作成」をご参照ください。
ACKクラスターは、ローカルボリュームとクラウドボリュームをサポートします。
ローカルストレージの追加: [PVタイプ] ドロップダウンリストからPVタイプを選択します。 有効な値: HostPath、ConfigMap、Secret、およびEmptyDir。 マウントソースとコンテナパスのパラメーターを設定して、ボリュームをコンテナパスにマウントします。 詳しい情報は、『Volumes』をご参照ください。
Add PVC: クラウドボリュームを追加します。
この例では、OSSボリュームが選択され、コンテナーの /tmpパスにマウントされます。
他のパラメーターを設定し、作成.
アプリケーションの作成後、ボリュームを使用してアプリケーションデータを保存できます。
kubectlを使う
手順1: OSS権限を持つRAMユーザーを作成し、RAMユーザーのAccessKeyペアを取得する
RAM ユーザーを作成します。 詳細については、「RAM ユーザーの作成」をご参照ください。
次のカスタムポリシーを作成して、RAMユーザーにOSS権限を付与します。 詳細については、「カスタムポリシーの作成」をご参照ください。
次のポリシーの
mybucket
をOSSバケットの名前に置き換えます。OSSで読み取り専用権限を付与するポリシー
OSSの読み取りおよび書き込み権限を付与するポリシー
必要に応じて、 OSSバケット内のファイルがkey Management Service (KMS) でカスタマーマスターキー (CMK) を使用して暗号化されている場合、RAMユーザーにKMS権限を付与する必要があります。 詳細については、「OSSボリュームの暗号化」トピックのOSSボリュームの暗号化セクションをご参照ください。
RAMユーザーにOSS権限を付与します。 詳細については、「RAM ユーザーへの権限の付与」をご参照ください。
RAMユーザーのAccessKeyペアを作成します。 詳細については、「AccessKey の作成」をご参照ください。
ステップ2: PVとPVCを作成する
次のいずれかの方法を使用して、PVとPVCを作成できます。
方法1: シークレットを使用してPVとPVCを作成
シークレットを使用して、AccessKeyペアをCSIコンポーネントに提供します。
重要OSSボリュームによって参照されているAccessKeyペアが無効になるか、権限が取り消された場合、ボリュームがマウントされているアプリケーションはOSSへのアクセスに失敗し、権限エラーが報告されます。 この問題を解決するには、AccessKeyペアを格納するシークレットを変更し、OSSボリュームを再度アプリケーションにマウントする必要があります。 この場合、アプリケーションは再起動されます。 AccessKeyペアが取り消された後にossfsを使用してOSSボリュームを再マウントする方法の詳細については、「OSSボリュームに関するFAQ」トピックの「OSSボリュームのマウントに関連する権限を管理する方法」セクションのシナリオ4を参照してください。
AccessKeyペアを定期的にローテーションする必要がある場合は、RRSA認証の使用を推奨します。
方法2: PVとPVCを作成するときにAccessKeyペアを指定する
PV設定ファイルでAccessKeyペアを指定します。
重要OSSボリュームによって参照されているAccessKeyペアが無効になるか、権限が取り消された場合、ボリュームがマウントされているアプリケーションはOSSへのアクセスに失敗し、権限エラーが報告されます。 PV設定ファイルのAccessKey情報を変更し、アプリケーションを再デプロイする必要があります。
AccessKeyペアを定期的にローテーションする必要がある場合は、RRSA認証の使用を推奨します。
方法1: シークレットを使用してPVとPVCを作成する
シークレットを作成します。
次のサンプルYAMLファイルを使用して、AccessKeyペアを格納するシークレットを作成します。
apiVersion: v1 kind: Secret metadata: name: oss-secret namespace: default stringData: akId: <yourAccessKey ID> akSecret: <yourAccessKey Secret>
説明シークレットは、PVを使用するアプリケーションがデプロイされている名前空間に作成する必要があります。
akId
およびakSecret
パラメーターの値を、手順1で取得したAccessKey IDおよびAccessKey secretに置き換えます。次のコマンドを実行して、静的にプロビジョニングされたPVを作成します。
kubectl create -f pv-oss.yaml
静的にプロビジョニングされたpvを作成するには、次のPV-oss.yamlサンプルファイルを使用します。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss labels: alicloud-pvname: pv-oss spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-oss # Specify the name of the PV. nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: "oss" url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" path: "/"
パラメーター
説明
name
PV の名前。
labels
PVに追加されるラベル。
ストレージ
OSSバケットの使用可能なストレージ。
accessModes
アクセスモード。 有効な値: ReadOnlyManyとReadWriteMany。
ReadOnlyManyを選択した場合、ossfsはOSSバケットを読み取り専用モードでマウントします。
persistentVolumeReclaimPolicy
PVの再利用ポリシー。 OSSボリュームは
保持
ポリシーのみをサポートしています。 つまり、PVCが削除されると、PVもOSSバケット内のデータも削除されません。ドライバー
ドライバーのタイプ。 この例では、パラメーターはossplugin.csi.alibabacloud.comに設定されています。 これは、OSS CSIコンポーネントが使用されることを示します。
nodePublishSecretRef
OSSバケットがPVとしてマウントされたときにAccessKeyペアが取得されるシークレット。
volumeHandle
PV の名前。
バケット
マウントするOSSバケット。
url
マウントするOSSバケットのエンドポイント。
ノードとOSSバケットが同じリージョンにある場合、または仮想プライベートクラウド (VPC) を介して接続されている場合は、OSSバケットの内部エンドポイントを使用します。
ノードとOSSバケットが異なるリージョンにある場合は、OSSバケットのパブリックエンドポイントを使用します。
エンドポイント形式:
内部エンドポイント:
http:// oss-{{regionName}}-internal.aliyuncs.com
またはhttps:// oss-{{regionName}}-internal.aliyuncs.com
パブリックエンドポイント:
http:// oss-{{regionName}}.aliyuncs.com
またはhttps:// oss-{{regionName}}.aliyuncs.com
重要実際のエンドポイントは、OSSコンソールの [概要] ページに表示されます。
vpc100-oss-{{regionName}}.aliyuncs.com
の内部アクセスポートは非推奨です。 それに応じて設定を更新してください。
otherOpts
OSSボリュームに
-o *** -o ***
形式のカスタムパラメーターを設定できます。 例:-o umask=022 -o max_stat_cache_size=0 -o allow_other
umask: ossfs内のファイルの権限マスクを変更します。 たとえば、umask=022を指定した場合、ossfsのファイルのアクセス許可マスクは755に変わります。 デフォルトでは、OSS SDKまたはコンソールを使用してアップロードされたファイルの権限マスクはossfsで640されます。 したがって、読み取りと書き込みを分割する場合は、umaskパラメーターを指定することを推奨します。
max_stat_cache_size: メタデータをキャッシュできるファイルの最大数。 メタデータキャッシュは
ls
操作を高速化できます。 ただし、OSS SDK、コンソール、ossutilなどのメソッドを使用してファイルを変更した場合、ファイルのキャッシュされたメタデータは同期的に更新されません。 その結果、キャッシュされたメタデータが古くなり、ls
操作の結果が不正確になる可能性があります。allow_other: 他のユーザーがマウントされたディレクトリにアクセスできるようにします。 ただし、これらのユーザーはディレクトリ内のファイルにアクセスできません。
その他のパラメーターの詳細については、「ossfsでサポートされているオプション」をご参照ください。
パス
マウントするOSSバケットのルートディレクトリからの相対パス。 デフォルト値: /。 このパラメーターは、V1.14.8.32-c77e277b-aliyun以降のcsi-pluginでサポートされています。
1.91より前のossfsバージョンの場合は、事前にOSSでこのパスを作成する必要があります。 詳細については、「ossfs 1.91以降の機能およびossfsパフォーマンスベンチマーク」をご参照ください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[Persistent Volumes] ページで、作成したPVを見つけることができます。
次のコマンドを実行して、静的にプロビジョニングされたPVCを作成します。
kubectl create -f pvc-oss.yaml
静的にプロビジョニングされたpvcを作成するには、次のPVC-oss.yamlサンプルファイルを使用します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-oss spec: accessModes: - ReadOnlyMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss
パラメーター
説明
name
PVCの名前。
accessModes
アクセスモード。 有効な値: ReadOnlyManyとReadWriteMany。
ReadOnlyManyを選択した場合、ossfsはOSSバケットを読み取り専用モードでマウントします。
ストレージ
PVCが主張する容量。 請求される容量は、PVCに結合されるPVの容量を超えることはできない。
alicloud-pvname
PVを選択してPVCにバインドするために使用されるラベル。 ラベルは、PVCに結合されるPVのラベルと同じでなければなりません。
左側のナビゲーションウィンドウで、
を選択します。 [永続的なボリューム要求] ページで、作成されたPVCを見つけることができます。
方法2: PVとPVCを作成するときにAccessKeyペアを指定する
次のコマンドを実行して、AccessKeyペアが直接指定された設定ファイルを使用してPVを作成します。
kubectl create -f pv-accesskey.yaml
次のpv-accesskey.yamlサンプルファイルは、PV設定ファイルでAccessKeyペアを指定する方法を示しています。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss labels: alicloud-pvname: pv-oss spec: capacity: storage: 5Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-oss # Specify the name of the PV. volumeAttributes: bucket: "oss" url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" akId: "***" akSecret: "***"
パラメーター
説明
name
PV の名前。
labels
PVに追加されるラベル。
ストレージ
OSSバケットの使用可能なストレージ。
accessModes
アクセスモード。 有効な値: ReadOnlyManyとReadWriteMany。
ReadOnlyManyを選択した場合、ossfsはOSSバケットを読み取り専用モードでマウントします。
persistentVolumeReclaimPolicy
PVの再利用ポリシー。 OSSボリュームは
保持
ポリシーのみをサポートしています。 つまり、PVCが削除されると、PVもOSSバケット内のデータも削除されません。ドライバー
ドライバーのタイプ。 この例では、パラメーターはossplugin.csi.alibabacloud.comに設定されています。 これは、OSS CSIコンポーネントが使用されることを示します。
volumeHandle
PV の名前。
バケット
マウントするOSSバケット。
url
マウントするOSSバケットのエンドポイント。
ノードとOSSバケットが同じリージョンにある場合、または仮想プライベートクラウド (VPC) を介して接続されている場合は、OSSバケットの内部エンドポイントを使用します。
ノードとOSSバケットが異なるリージョンにある場合は、OSSバケットのパブリックエンドポイントを使用します。
エンドポイント形式:
内部エンドポイント:
http:// oss-{{regionName}}-internal.aliyuncs.com
またはhttps:// oss-{{regionName}}-internal.aliyuncs.com
パブリックエンドポイント:
http:// oss-{{regionName}}.aliyuncs.com
またはhttps:// oss-{{regionName}}.aliyuncs.com
重要実際のエンドポイントは、OSSコンソールの [概要] ページに表示されます。
vpc100-oss-{{regionName}}.aliyuncs.com
の内部アクセスポートは非推奨です。 それに応じて設定を更新してください。
otherOpts
OSSボリュームに
-o *** -o ***
形式のカスタムパラメーターを設定できます。 例:-o umask=022 -o max_stat_cache_size=0 -o allow_other
umask: ossfs内のファイルの権限マスクを変更します。 たとえば、umask=022を指定した場合、ossfsのファイルのアクセス許可マスクは755に変わります。 デフォルトでは、OSS SDKまたはコンソールを使用してアップロードされたファイルの権限マスクはossfsで640されます。 したがって、読み取りと書き込みを分割する場合は、umaskパラメーターを指定することを推奨します。
max_stat_cache_size: メタデータをキャッシュできるファイルの最大数。 メタデータキャッシュは
ls
操作を高速化できます。 ただし、OSS SDK、コンソール、ossutilなどのメソッドを使用してファイルを変更した場合、ファイルのキャッシュされたメタデータは同期的に更新されません。 その結果、キャッシュされたメタデータが古くなり、ls
操作の結果が不正確になる可能性があります。allow_other: 他のユーザーがマウントされたディレクトリにアクセスできるようにします。 ただし、これらのユーザーはディレクトリ内のファイルにアクセスできません。
その他のパラメーターの詳細については、「ossfsでサポートされているオプション」をご参照ください。
パス
マウントするOSSバケットのルートディレクトリからの相対パス。 デフォルト値: /。 このパラメーターは、V1.14.8.32-c77e277b-aliyun以降のcsi-pluginでサポートされています。
1.91より前のossfsバージョンの場合は、事前にOSSでこのパスを作成する必要があります。 詳細については、「ossfs 1.91以降の機能およびossfsパフォーマンスベンチマーク」をご参照ください。
akId
ステップ1で取得したAccessKey ID。
akSecret
ステップ1で取得したAccessKeyシークレット。
次のコマンドを実行して、静的にプロビジョニングされたPVCを作成します。
kubectl create -f pvc-oss.yaml
静的にプロビジョニングされたpvcを作成するには、次のPVC-oss.yamlサンプルファイルを使用します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-oss spec: accessModes: - ReadOnlyMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss
パラメーター
説明
name
PVCの名前。
accessModes
アクセスモード。 有効な値: ReadOnlyManyとReadWriteMany。
ReadOnlyManyを選択した場合、ossfsはOSSバケットを読み取り専用モードでマウントします。
ストレージ
PVCが主張する容量。 請求される容量は、PVCに結合されるPVの容量を超えることはできない。
alicloud-pvname
PVを選択してPVCにバインドするために使用されるラベル。 ラベルは、PVCに結合されるPVのラベルと同じでなければなりません。
左側のナビゲーションウィンドウで、
を選択します。 [永続的なボリューム要求] ページで、作成されたPVCを見つけることができます。
ステップ3: アプリケーションを作成する
oss-staticという名前のアプリケーションを作成し、PVをアプリケーションにマウントします。
次のコマンドを実行して、oss-static.yamlという名前のファイルを作成します。
kubectl create -f oss-static.yaml
次のoss-static.yamlサンプルファイルを使用して、アプリケーションを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: oss-static
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: pvc-oss
mountPath: "/data"
- name: pvc-oss
mountPath: "/data1"
livenessProbe:
exec:
command:
- sh
- -c
- cd /data
initialDelaySeconds: 30
periodSeconds: 30
volumes:
- name: pvc-oss
persistentVolumeClaim:
claimName: pvc-oss
livenessProbe
: ヘルスチェックの設定。 詳細は、「OSSボリューム」をご参照ください。mountPath
: OSSバケットがコンテナーにマウントされるパス。claimName
: アプリケーションが使用するPVCの名前。
OSSボリュームがデータを保持および共有できるかどうかを確認する
を実行するポッドを表示します。oss-staticアプリケーションとOSSバケット内のファイル。
次のコマンドを実行して、oss-staticアプリケーションを実行するポッドを照会します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE oss-static-66fbb85b67-d**** 1/1 Running 0 1h oss-static-66fbb85b67-l**** 1/1 Running 0 1h
tmpfileファイルを作成します。
OSSボリュームがReadWriteManyモードでマウントされている場合は、次のコマンドを実行して、/dataパスにtmpfileファイルを作成します。
kubectl exec oss-static-66fbb85b67-d**** -- touch /data/tmpfile kubectl exec oss-static-66fbb85b67-l**** -- touch /data/tmpfile
OSSボリュームがReadOnlyManyモードでマウントされている場合は、OSSコンソールまたはcpコマンド (アップロードオブジェクト) を使用して、OSSバケットの対応するパスにtmpfileファイルをアップロードします。
次のコマンドを実行して、oss-static-66fbb85b67-d **** ポッドの /dataパスのファイルとoss-static-66fbb85b67-l **** ポッドの /data1パスのファイルを照会します。
kubectl exec oss-static-66fbb85b67-d**** -- ls /data | grep tmpfile kubectl exec oss-static-66fbb85b67-l**** -- ls /data1 | grep tmpfile
期待される出力:
tmpfile
出力は、ファイルが両方のポッドに存在することを示します。 つまり、ポッドはOSSボリュームに保存されているデータを共有します。
説明出力が返されない場合は、CSIコンポーネントのバージョンが1.20.7以降であるかどうかを確認します。 詳細については、「csi-plugin」をご参照ください。
次のコマンドを実行して、oss-static-66fbb85b67-d **** ポッドを削除します。
kubectl delete pod oss-static-66fbb85b67-d****
期待される出力:
pod "oss-static-66fbb85b67-d****" deleted
ポッドの削除後もファイルが存在することを確認します。
次のコマンドを実行して、再作成されたポッドを照会します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE oss-static-66fbb85b67-l**** 1/1 Running 0 1h oss-static-66fbb85b67-z**** 1/1 Running 0 40s
次のコマンドを実行して、ポッドの /dataパス内のファイルを照会します。
kubectl exec oss-static-66fbb85b67-z**** -- ls /data | grep tmpfile
期待される出力:
tmpfile
出力は、temfileファイルがまだ存在することを示します。 これは、OSSボリュームがデータを保持できることを意味します。