Object Storage Service (OSS) ボリュームは、複数のポッドにマウントできます。OSS は、構成ファイル、ビデオ、画像など、頻繁に読み取られるが、高いディスク IOPS を必要としないデータに適しています。静的プロビジョニングに加えて、動的プロビジョニングを使用して、永続ボリューム要求 (PVC) と StorageClass に基づいて永続ボリューム (PV) を自動的に予約するようにシステムを構成できます。RAM Roles for Service Accounts (RRSA) 認証または AccessKey ペア認証を使用して、動的にプロビジョニングされた OSS ボリュームをアプリケーションにマウントできます。
前提条件
クラスターの Kubernetes バージョンは 1.26 以降です。Container Storage Interface (CSI) プラグインのバージョンは v1.31.4-9819c8b-aliyun 以降です。デフォルトでは、CSI プラグインはクラスターにインストールされています。詳細については、「ACK クラスタを手動でアップグレードする」および「csi-plugin と csi-provisioner を更新する」をご参照ください。
説明クラスターで FlexVolume を使用している場合は、FlexVolume は非推奨であるため、FlexVolume を CSI にアップグレードしてください。詳細については、「FlexVolume から CSI へのアップグレード」をご参照ください。 を選択し、[ストレージ] タブをクリックして、ストレージコンポーネントの種類を確認します。
OSS バケットが作成されている。バケットは、クラスターと同じ Alibaba Cloud アカウントに属しています。
重要アカウントを跨いでの OSS バケットの使用は推奨されません。
使用上の注意
OSS バケットがマウントされているポッドに対してヘルスチェックを設定することをお勧めします。こうすることで、OSS ディレクトリが使用できなくなった場合に、ポッドが再起動され、OSS ボリュームが再マウントされます。
アプリケーションテンプレートで securityContext.fsgroup パラメーターが指定されている場合、kubelet はボリュームのマウント後に
chmod
またはchown
操作を実行するため、時間がかかります。securityContext.fsgroup パラメーターが指定されている場合のマウント処理の高速化方法については、「OSS ボリュームのマウントに時間がかかるのはなぜですか?」をご参照ください。ossfs を使用して ls 操作を実行する場合、HTTP リクエストが OSS に送信され、リクエストされたファイルのメタデータが取得されます。リストされたディレクトリに多数のファイル(100,000 ファイル以上など、実際の数はノードのメモリによって異なります)が含まれている場合、ossfs は大量のシステムメモリを占有します。その結果、ポッドで Out of Memory (OOM) エラーが発生する可能性があります。この問題を解決するには、ディレクトリを分割するか、OSS バケットのサブディレクトリをマウントします。
ossfs は同時読み取りシナリオに適しています。永続ボリューム要求 (PVC) と永続ボリューム (PV) を使用して同時読み取りシナリオで OSS ボリュームをマウントする場合は、PVC と PV のアクセスモードを ReadOnlyMany に設定することをお勧めします。書き込み操作を処理するには、OSS SDK または ossutil を使用して読み取りと書き込みを分離し、OSS ボリュームのアクセスモードを ReadWriteMany に設定することをお勧めします。詳細については、「OSS 読み書き分離のベストプラクティス」をご参照ください。
重要ossfs は、同時書き込み操作によって書き込まれたデータの整合性を保証しません。
OSS ボリュームがポッドにマウントされている場合、ポッドまたはポッドのホストにログインして、マウントパス内のファイルを削除または変更すると、OSS バケット内のソースファイルも削除または変更されます。重要なデータが誤って削除されるのを防ぐために、OSS バケットのバージョン管理を有効にすることができます。詳細については、「バージョン管理」をご参照ください。
10 MB を超えるファイルを OSS にアップロードする場合、ファイルを複数の部分に分割して、各部分を個別にアップロードできます。マルチパートアップロードタスクが中断された後、不要になった部分を削除できます。部分の削除方法については、「パーツを手動で削除する」または「ライフサイクルルールを設定してパーツを削除する」をご参照ください。
RRSA 認証を使用して動的にプロビジョニングされた OSS ボリュームをマウントする
RRSA 機能を使用して、ACK クラスタにデプロイされているさまざまな PV に対するアクセス制御を実施できます。これにより、PV に対するきめ細かい API 権限制御が実装され、セキュリティリスクが軽減されます。詳細については、「RRSA を使用してさまざまなポッドにさまざまなクラウドサービスへのアクセスを許可する」をご参照ください。
このマウント方法は、Kubernetes 1.26 以降を実行し、Container Storage Interface (CSI) 1.30.4 以降がインストールされている ACK マネージドクラスター と Serverless Kubernetes クラスター のみサポートしています。クラスターで RRSA が有効になっていて、クラスターに 1.30.4 より前の CSI バージョンがインストールされている場合は、「[製品の変更] CSI での ossfs のバージョンアップグレードとマウントプロセスの最適化」を参照して、クラスターで使用される RAM ロールに権限を付与してください。
ステップ 1:RAM ロールの作成
この手順は、クラスターで RRSA を初めて有効にする場合に必要です。以前に RRSA 認証を使用してクラスターに OSS ボリュームをマウントしたことがある場合は、この手順をスキップしてください。
ACK コンソール にログインし、RRSA を有効にします。詳細については、「RRSA を有効にする」をご参照ください。
RRSA 認証を使用して OSS ボリュームをマウントするための RAM ロールを作成します。RAM ロールは、RRSA を使用して OSS ボリュームをマウントするときに、クラスターによってアシュームされます。
RAM ロールを作成するときは、[プリンシパルタイプ] に [ID プロバイダー] を選択します。次の例では、demo-role-for-rrsa という名前の RAM ロールが作成されます。次の表では、主要なパラメーターについて説明します。詳細な手順については、「OIDC IdP の RAM ロールを作成する」をご参照ください。
パラメーター
説明
[ID プロバイダータイプ]
[OIDC] を選択します。
[ID プロバイダー]
ack-rrsa-<cluster_id> 形式の名前の ID プロバイダーを選択します。ここで、<cluster_id> はクラスターの ID です。
[条件]
[oidc:iss]:デフォルト値を保持します。
[oidc:aud]:デフォルト値を保持します。
[oidc:sub]:次の条件を手動で追加します。
[キー]:[oidc:sub] を選択します。
[演算子]:[StringEquals] を選択します。
[値]:system:serviceaccount:<namespace>:<serviceAccountName> と入力します。
<namespace>
をアプリケーションの名前空間に置き換えます。<serviceAccountName>
をサービスアカウント名に置き換えます。例: このトピックのテストアプリケーションに基づいて、system:serviceaccount:ack-csi-fuse:csi-fuse-ossfs と入力します。
[ロール名]
値を demo-role-for-rrsa に設定します。
ステップ 2:demo-role-for-rrsa ロールに権限を付与する
RAM ユーザーに OSS アクセス権限を付与するカスタムポリシーを作成します。詳細については、「カスタムポリシーを作成する」をご参照ください。
ビジネス要件に基づいて、読み取り専用ポリシーまたは読み書きポリシーを選択します。
mybucket
は、作成したバケットの名前に置き換えます。OSS に対する読み取り専用権限を提供するポリシー
OSS に対する読み書き権限を提供するポリシー
オプション。OSS バケット内のオブジェクトが Key Management Service (KMS) の指定されたカスタマーマスターキー (CMK) を使用して暗号化されている場合は、RAM ユーザーに KMS アクセス権限を付与する必要があります。詳細については、「暗号化」をご参照ください。
必要な権限を demo-role-for-rrsa ロールに付与します。詳細については、「RAM ロールに権限を付与する」をご参照ください。
説明OSS アクセス権限を持つ既存の RAM ロールを使用する場合は、RAM ロールの信頼ポリシーを変更できます。詳細については、「既存の RAM ロールを使用し、必要な権限を RAM ロールに付与する」をご参照ください。
ステップ 3:StorageClass の作成
sc-oss-rrsa.yaml という名前のファイルを作成し、次の内容をファイルにコピーして、RRSA 認証で構成された StorageClass を作成します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: sc-oss parameters: bucket: bucket # 実際のバケット名に置き換えます。 path: /ack url: oss-cn-beijing-internal.aliyuncs.com authType: rrsa roleName: demo-role-for-rrsa otherOpts: "-o allow_other" volumeAs: sharepath provisioner: ossplugin.csi.alibabacloud.com reclaimPolicy: Retain volumeBindingMode: Immediate
パラメーター
説明
name
StorageClass の名前。
bucket
マウントする OSS バケット。
path
マウントする OSS バケットのルートディレクトリからの相対パス。デフォルト値は / です。このパラメーターは、CSI 1.14.8.32-c77e277b-aliyun 以降でサポートされています。
1.91 より前の ossfs バージョンを使用する場合は、事前に OSS バケットにパスを作成する必要があります。詳細については、「ossfs 1.0 の新機能と ossfs パフォーマンスベンチマーク」をご参照ください。
url
マウントする OSS バケットのエンドポイント。エンドポイントは、OSS コンソールのバケットの概要ページから取得できます。
バケットがバケットと同じリージョン内のノードにマウントされている場合、またはバケットが Virtual Private Cloud (VPC) 経由でノードに接続できる場合は、バケットの内部エンドポイントを使用します。
バケットが異なるリージョン内のノードにマウントされている場合は、バケットのパブリックエンドポイントを使用します。
パブリックエンドポイントと内部エンドポイントは形式が異なります。
内部エンドポイントの形式:
http://oss-{{regionName}}-internal.aliyuncs.com
またはhttps://oss-{{regionName}}-internal.aliyuncs.com
。パブリックエンドポイントの形式:
http://oss-{{regionName}}.aliyuncs.com
またはhttps://oss-{{regionName}}.aliyuncs.com
。
重要内部エンドポイントの
vpc100-oss-{{regionName}}.aliyuncs.com
形式は非推奨です。authType
認証方式。このパラメーターを
rrsa
に設定します。これは、RRSA 認証が使用されることを示します。roleName
ステップ 1:RAM ロールの作成 で作成または変更した Resource Access Management (RAM) ロールの名前に設定します。StorageClass ごとに異なる権限を設定する必要がある場合は、複数の RAM ロールを作成し、各 StorageClass の roleName パラメーターで RAM ロールの 1 つを指定できます。
otherOpts
OSS ボリュームのカスタムパラメーターを
-o *** -o ***
形式で構成できます。例:-o umask=022 -o max_stat_cache_size=0 -o allow_other
。umask:ossfs 内のファイルの権限マスクを変更します。たとえば、umask=022 を指定すると、ossfs 内のファイルの権限マスクは 755 に変更されます。デフォルトでは、OSS SDK または OSS コンソールを使用してアップロードされたファイルの権限マスクは、ossfs では 640 です。したがって、読み取りと書き込みを分離する場合は、umask パラメーターを指定することをお勧めします。
max_stat_cache_size:メタデータキャッシュにキャッシュできるファイルの最大数。メタデータのキャッシュにより、List 操作を高速化できます。ただし、OSS コンソール、OSS SDK、ossutil など、ossfs 以外の方法でファイルを変更すると、ファイルのメタデータがリアルタイムで更新されない場合があります。
allow_other:他のユーザーがマウントされたディレクトリにアクセスできるようにします。ただし、これらのユーザーはディレクトリ内のファイルにアクセスできません。
詳細については、「ossfs 2.0 でサポートされているオプション」をご参照ください。
provisioner
ボリュームドライバーのタイプ。この例では、値は ossplugin.csi.alibabacloud.com に設定されています。これは、Alibaba Cloud が提供する OSS CSI プラグインが使用されることを示します。
reclaimPolicy
動的に作成された PV の再利用ポリシー。OSS ボリュームは、
Retain
ポリシーのみをサポートします。これは、PVC を削除しても PV とバケット内のデータは削除されないことを示します。volumeBindingMode
バインディングモード。
OSS ボリュームのゾーン間のノードアフィニティは考慮されません。デフォルトでは、
Immediate
バインディングモードが使用されます。volumeAs
ボリュームのアクセスモード。デフォルト値:
sharepath
有効な値:sharepath
:OSS ボリュームは sharepath モードでマウントされます。すべてのボリュームが同じパスを共有します。つまり、データは<bucket>:<path>/
に保存されます。subpath
:OSS ボリュームは subpath モードでマウントされます。ボリュームを作成すると、マウントパスにサブディレクトリが自動的に作成されます。つまり、データは<bucket>:<path>/<pv-name>/
に保存されます。説明Subdirectory
モードは、CSI プラグインのバージョンが 1.31.3 以降の場合にのみ有効になります。CSI プラグインのバージョンが 1.31.3 より前の場合は、Shared Directory
モードが使用されます。
sigVersion
OSS をリクエストするための署名バージョン。有効な値:
"v1":デフォルトで V1 署名を使用します。詳細については、「URL に V1 署名を含める」をご参照ください。
"v4":V4 署名を使用します。詳細については、「(推奨)URL に V4 署名を含める」をご参照ください。
次のコマンドを実行して、StorageClass を作成します。
kubectl apply -f sc-oss-rrsa.yaml
ステップ 4:PVC の作成
pvc-oss.yaml という名前のファイルを作成し、次の内容をファイルにコピーして PVC を作成します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-oss spec: accessModes: - ReadOnlyMany volumeMode: Filesystem resources: requests: storage: 20Gi storageClassName: sc-oss
パラメーター
説明
name
PVC の名前。
accessModes
アクセスモード。有効な値:ReadOnlyMany と ReadWriteMany。
ReadOnlyMany を選択すると、ossfs は OSS バケットを読み取り専用モードでマウントします。
storage
アプリケーションの要求容量。このパラメーターの値は、アプリケーションで使用できる最大容量の制限を指定するものではありません。
storageClassName
StorageClass の名前。
次のコマンドを実行して、PVC を作成します。
kubectl apply -f pvc-oss.yaml
次のコマンドを実行して、PVC が作成され、Bound ステータスになっていることを確認します。
kubectl get pvc pvc-oss
予期される出力:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-oss Bound oss-251d111d-3b0b-4879-81a0-eb5a19xxxxxx 20Gi ROX oss-rrsa <unset> 4d20h
ステップ 5:アプリケーションの作成
oss-dynamic.yaml という名前のファイルを作成し、次の内容をファイルにコピーしてアプリケーションを作成し、PVC をマウントします。
apiVersion: apps/v1 kind: Deployment metadata: name: oss-dynamic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 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
アプリケーションをデプロイします。
kubectl apply -f oss-dynamic.yaml
アプリケーションレプリカのステータスをクエリします。
kubectl get pod -lapp=nginx -w
しばらくすると、ポッドは Running ステータスになります。
AccessKey ペア認証を使用して動的にプロビジョニングされた OSS ボリュームをマウントする
OSS ボリュームによって参照される AccessKey ペアが取り消された場合、または必要な権限が取り消された場合、ボリュームがマウントされているアプリケーションは OSS にアクセスできなくなり、権限エラーが報告されます。この問題を解決するには、AccessKey ペアを格納するシークレットを変更し、OSS ボリュームをアプリケーションに再マウントする必要があります。この場合、アプリケーションは再起動されます。AccessKey ペアが取り消された後に ossfs を使用して OSS ボリュームを再マウントする方法の詳細については、「OSS ボリュームのマウントに関連する権限を管理するにはどうすればよいですか?」のシナリオ 4 のソリューションをご参照ください。
AccessKey ペアを定期的にローテーションする必要がある場合は、、RRSA 認証を使用する ことをお勧めします。
OSS アクセス権限を持つ RAM ユーザーを作成し、RAM ユーザーの AccessKey ペアを取得します。次に、作成した OSS バケットにアクセスするための権限を RAM ユーザーに付与します。
ステップ 1:OSS アクセス権限を持つ RAM ユーザーを作成し、RAM ユーザーの AccessKey ペアを取得する
OSS アクセス権限を持つ RAM ユーザーを作成し、RAM ユーザーの AccessKey ペアを取得します。次に、作成した OSS バケットにアクセスするための権限を RAM ユーザーに付与します。
RAM ユーザーを作成します。既存の RAM ユーザーがいる場合は、この手順をスキップできます。RAM ユーザーの作成方法の詳細については、「RAM ユーザーを作成する」をご参照ください。
RAM ユーザーに OSS アクセス権限を付与するカスタムポリシーを作成します。詳細については、「カスタムポリシーを作成する」をご参照ください。
ビジネス要件に基づいて、読み取り専用ポリシーまたは読み書きポリシーを選択します。
mybucket
は、作成したバケットの名前に置き換えます。OSS に対する読み取り専用権限を提供するポリシー
OSS に対する読み書き権限を提供するポリシー
オプション。OSS バケット内のオブジェクトが Key Management Service (KMS) の指定されたカスタマーマスターキー (CMK) を使用して暗号化されている場合は、RAM ユーザーに KMS アクセス権限を付与する必要があります。詳細については、「暗号化」をご参照ください。
RAM ユーザーに OSS アクセス権限を付与します。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
RAM ユーザーの AccessKey ペアを作成します。詳細については、「AccessKey ペアの作成」をご参照ください。
ステップ 2:StorageClass と PVC を作成し、StorageClass と PVC を使用して OSS バケットをアプリケーションにマウントする
ACK コンソールの使用
1. StorageClass の作成
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のペインで、 を選択します。
[StorageClass] ページで、[作成] をクリックします。
表示されるダイアログボックスで、パラメーターを構成し、[作成] をクリックします。
パラメーター
説明
例
[名前]
StorageClass の名前。
sc-oss
[PV タイプ]
OSS を選択します。
OSS
[アクセス証明書]
OSS バケットにアクセスするために使用されるシークレット。この例では、前の手順で取得した AccessKey ペアが使用されます。有効な値:
[既存のシークレットを選択]:このオプションを選択した場合は、名前空間 パラメーターと シークレット パラメーターも構成する必要があります。
[シークレットを作成]:このオプションを選択した場合は、名前空間 パラメーター、名前 パラメーター、AccessKey ID パラメーター、AccessKey シークレット パラメーターも構成する必要があります。
既存のシークレットを選択
[バケット ID]
マウントする OSS バケットの名前。[バケットを選択] をクリックします。表示されるダイアログボックスで、マウントする OSS バケットを選択し、[選択] をクリックします。
説明指定した AccessKey ペア を使用して取得されたバケットが表示されます。
バケットを選択
[OSS パス]
マウントする OSS バケットのルートディレクトリからの相対パス。デフォルト値は / です。このパラメーターは、CSI 1.14.8.32-c77e277b-aliyun 以降でサポートされています。
1.91 より前の ossfs バージョンを使用する場合は、事前に OSS バケットにパスを作成する必要があります。詳細については、「ossfs 1.0 の新機能と ossfs パフォーマンスベンチマーク」をご参照ください。
/
[ボリュームモード]
ボリュームのアクセスモード。デフォルトでは [共有ディレクトリ] が選択されています。有効な値:
[共有ディレクトリ]:OSS ボリュームは sharepath モードでマウントされます。すべてのボリュームが同じパスを共有します。つまり、データは
<bucket>:<path>/
に保存されます。[サブディレクトリ]:OSS ボリュームは subpath モードでマウントされます。ボリュームを作成すると、マウントパスにサブディレクトリが自動的に作成されます。つまり、データは
<bucket>:<path>/<pv-name>/
に保存されます。説明[サブディレクトリ] モードは、CSI プラグインのバージョンが 1.31.3 以降の場合にのみ有効になります。CSI プラグインのバージョンが 1.31.3 より前の場合は、[共有ディレクトリ] モードが使用されます。
共有ディレクトリ
[エンドポイント]
マウントする OSS バケットのエンドポイント。
OSS バケットと ECS インスタンスが異なるリージョンにある場合は、[パブリックエンドポイント] を選択します。
OSS バケットと ECS インスタンスが同じリージョンにある場合は、[内部エンドポイント] を選択します。
説明デフォルトでは、内部ネットワーク経由で OSS バケットにアクセスするときに HTTP が使用されます。HTTPS を使用する場合は、kubectl を使用して静的にプロビジョニングされた PV を作成します。
内部エンドポイント
[再利用ポリシー]
動的に作成された PV の再利用ポリシー。OSS ボリュームは、
Retain
ポリシーのみをサポートします。これは、PVC を削除しても PV とバケット内のデータは削除されないことを示します。Retain
[オプションパラメーター]
OSS ボリュームのカスタムパラメーターを
-o *** -o ***
形式で構成できます。例:-o umask=022 -o max_stat_cache_size=0 -o allow_other
。umask:ossfs 内のファイルの権限マスクを変更します。たとえば、umask=022 を指定すると、ossfs 内のファイルの権限マスクは 755 に変更されます。デフォルトでは、OSS SDK または OSS コンソールを使用してアップロードされたファイルの権限マスクは、ossfs では 640 です。したがって、読み取りと書き込みを分離する場合は、umask パラメーターを指定することをお勧めします。
max_stat_cache_size:メタデータキャッシュにキャッシュできるファイルの最大数。メタデータのキャッシュにより、List 操作を高速化できます。ただし、OSS コンソール、OSS SDK、ossutil など、ossfs 以外の方法でファイルを変更すると、ファイルのメタデータがリアルタイムで更新されない場合があります。
allow_other:他のユーザーがマウントされたディレクトリにアクセスできるようにします。ただし、これらのユーザーはディレクトリ内のファイルにアクセスできません。
詳細については、「ossfs 2.0 でサポートされているオプション」をご参照ください。
-o umask=022 -o max_stat_cache_size=0 -o allow_other
2. PVC の作成
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、 を選択します。
[永続ボリュームクレーム] ページの右上隅にある [作成] をクリックします。
表示されるダイアログボックスで、パラメーターを設定し、[作成] をクリックします。
パラメーター
説明
例
PVC タイプ
OSS を選択します。
OSS
名前
PVC の名前。
pvc-oss
割り当てモード
この例では、[StorageClass を使用する] が選択されています。
Use StorageClass
既存の StorageClass
1. リソースグループを作成する注:アクション をクリックします。使用する PV を見つけ、[アクション] 列の をクリックします。
Select StorageClass
容量
アプリケーションの再利用容量。このパラメーターの値は、アプリケーションで使用できる最大容量の制限を指定するものではありません。
20Gi
アクセスモード
アクセスモード。有効な値:ReadOnlyMany および ReadWriteMany。
ReadOnlyMany を選択すると、ossfs は OSS バケットを読み取り専用モードでマウントします。
ReadOnlyMany
3. アプリケーションを作成する
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、 を選択します。
[デプロイメント] ページの右上隅にある [イメージから作成] をクリックします。
アプリケーションのパラメーターを構成します。次に、[作成] をクリックします。
次の表は、主要なパラメーターについて説明しています。その他のパラメーターにはデフォルト設定を使用します。詳細については、「デプロイメントを使用してステートレス アプリケーションを作成する」をご参照ください。
ウィザード ページ
パラメーター
説明
例
基本情報
名前
デプロイメントのカスタム名を入力します。名前は、コンソールに表示される形式の要件を満たしている必要があります。
test-oss
レプリカ
デプロイメントによってプロビジョニングされるポッド レプリカの数。
2
コンテナー
イメージ名
アプリケーションのデプロイに使用するイメージのアドレス。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
必要なリソース
アプリケーションに必要な vCore の数とメモリの量を指定します。
0.25 vCore と 0.5 GiB のメモリ
ボリューム
[PVC を追加] をクリックし、次のパラメーターを構成します。
マウント ソース: 作成した PVC を選択します。
コンテナー パス: OSS バケットをマウントするコンテナー パスを指定します。
マウント ソース: pvc-oss.
コンテナー パス: /data.
次のコマンドを実行して、アプリケーションのデプロイの進行状況をクエリします。
[デプロイメント] ページで、作成したアプリケーションの名前をクリックします。
[ポッド] タブで、ポッドが [実行中] 状態であるかどうかを確認します。
kubectl を使用する
1. StorageClass を作成する
シークレットは、PV を使用するアプリケーションがデプロイされている名前空間に作成する必要があります。
akId
パラメーターとakSecret
パラメーターを、前の手順で取得した AccessKey ID と AccessKey シークレットに置き換えます。kubectl create secret generic oss-secret --from-literal='akId=<yourAccessKey ID>' --from-literal='akSecret=<yourAccessKey Secret>'
sc-oss.yaml という名前のファイルを作成し、次の内容をファイルにコピーして StorageClass を作成します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: sc-oss parameters: bucket: bucket path: /ack url: oss-cn-beijing.aliyuncs.com csi.storage.k8s.io/node-publish-secret-name: oss-secret csi.storage.k8s.io/node-publish-secret-namespace: default otherOpts: '-o allow_other' provisioner: ossplugin.csi.alibabacloud.com reclaimPolicy: Retain volumeBindingMode: Immediate
パラメーター
説明
name
StorageClass の名前。
bucket
マウントする OSS バケット。
path
マウントされる OSS バケットのルートディレクトリからの相対パス。デフォルト値は / です。このパラメーターは、CSI 1.14.8.32-c77e277b-aliyun 以降でサポートされています。
1.91 より前の ossfs バージョンを使用する場合は、事前に OSS バケットにパスを作成する必要があります。詳細については、「ossfs 1.0 の新機能と ossfs パフォーマンスベンチマーク」をご参照ください。
url
マウントする OSS バケットのエンドポイント。エンドポイントは、OSS コンソールのバケットの [概要] ページから取得できます。
バケットがバケットと同じリージョン内のノードにマウントされている場合、またはバケットが VPC (仮想プライベートクラウド)を介してノードに接続できる場合は、バケットの内部エンドポイントを使用します。
バケットが異なるリージョンのノードにマウントされている場合は、バケットのパブリックエンドポイントを使用します。
パブリックエンドポイントと内部エンドポイントは異なる形式です。
内部エンドポイントの形式:
http://oss-{{regionName}}-internal.aliyuncs.com
またはhttps://oss-{{regionName}}-internal.aliyuncs.com
。パブリックエンドポイントの形式:
http://oss-{{regionName}}.aliyuncs.com
またはhttps://oss-{{regionName}}.aliyuncs.com
。
重要内部エンドポイントの
vpc100-oss-{{regionName}}.aliyuncs.com
形式は非推奨です。csi.storage.k8s.io/node-publish-secret-name
AccessKey 情報を格納するシークレットの名前。
csi.storage.k8s.io/node-publish-secret-namespace
AccessKey 情報を格納するシークレットの名前空間。
otherOpts
OSS ボリュームのカスタムパラメーターを
-o *** -o ***
形式で設定できます。例:-o umask=022 -o max_stat_cache_size=0 -o allow_other
。umask: ossfs 内のファイルの権限マスクを変更します。たとえば、umask=022 を指定すると、ossfs 内のファイルの権限マスクは 755 に変更されます。デフォルトでは、OSS SDK または OSS コンソールを使用してアップロードされたファイルの権限マスクは、ossfs では 640 です。したがって、読み取りと書き込みを分割する場合は、umask パラメーターを指定することをお勧めします。
max_stat_cache_size: メタデータキャッシュにキャッシュできるファイルのメタデータの最大数。メタデータのキャッシュにより、リスト操作を高速化できます。ただし、OSS コンソール、OSS SDK、ossutil など、ossfs 以外の方法でファイルを変更すると、ファイルのメタデータがリアルタイムで更新されない場合があります。
allow_other: 他のユーザーがマウントされたディレクトリにアクセスできるようにします。ただし、これらのユーザーはディレクトリ内のファイルにアクセスできません。
詳細については、「ossfs 2.0 でサポートされているオプション」をご参照ください。
provisioner
ボリュームドライバーのタイプ。この例では、値は ossplugin.csi.alibabacloud.com に設定されています。これは、Alibaba Cloud が提供する OSS CSI プラグインが使用されていることを示します。
reclaimPolicy
動的に作成された PV の再利用ポリシー。OSS ボリュームは
Retain
ポリシーのみをサポートします。これは、PVC を削除しても PV とバケット内のデータは削除されないことを示します。volumeBindingMode
バインディングモード。
OSS ボリュームのゾーン間のノードアフィニティは考慮されません。デフォルトでは、
Immediate
バインディングモードが使用されます。volumeAs
ボリュームのアクセスモード。デフォルト値:
sharepath
有効な値:sharepath
: OSS ボリュームは共有パスモードでマウントされます。すべてのボリュームが同じパスを共有します。つまり、データは<bucket>:<path>/
に格納されます。subpath
: OSS ボリュームはサブパスモードでマウントされます。ボリュームを作成すると、マウントパスにサブディレクトリが自動的に作成されます。つまり、データは<bucket>:<path>/<pv-name>/
に格納されます。説明Subdirectory
モードは、CSI プラグインのバージョンが 1.31.3 以降の場合にのみ有効になります。CSI プラグインのバージョンが 1.31.3 より前の場合は、Shared Directory
モードが使用されます。
sigVersion
OSS をリクエストするための署名バージョン。有効な値:
"v1":デフォルトで V1 署名を使用します。詳細については、「URL に V1 署名を含める」をご参照ください。
"v4":V4 署名を使用します。詳細については、「(推奨) URL に V4 署名を含める」をご参照ください。
2. PVC を作成する
PVC を作成する操作は、「RRSA 認証を使用して動的にプロビジョニングされた OSS ボリュームをマウントする」セクションの操作と同じです。詳細については、「手順 4: StorageClass を作成する」をご参照ください。
3. アプリケーションを作成する
アプリケーションを作成する操作は、「RRSA 認証を使用して動的にプロビジョニングされた OSS ボリュームをマウントする」セクションの操作と同じです。詳細については、「手順 5: アプリケーションを作成する」をご参照ください。
OSS ボリュームでデータの永続化と共有ができるかどうかの確認
oss-dynamic アプリケーションによってプロビジョニングされたポッドをクエリするために、次のコマンドを実行します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE oss-dynamic-68f4945c46-h**** 1/1 Running 0 1h oss-dynamic-68f4945c46-4**** 1/1 Running 0 1h
ポッドを 1 つ選択し、そのポッドに tempfile という名前のファイルを作成します。この例では、oss-dynamic-68f4945c46-h**** ポッドを使用します。
OSS ボリュームが ReadWriteMany モードでマウントされている場合は、次のコマンドを実行して /data パスに tmpfile という名前のファイルを作成します。
kubectl exec oss-dynamic-68f4945c46-h**** -- touch /data/tmpfile
OSS ボリュームが ReadOnlyMany モードでマウントされている場合は、[OSS コンソール] または cp コマンド (オブジェクトのアップロード) を使用して、tmpfile ファイルを OSS バケットの対応するパスにアップロードします。
各ポッドにログオンし、マウントパス内のファイルにアクセスします。
この例では、oss-dynamic-68f4945c46-h**** ポッドのマウントパスは
data
で、oss-dynamic-68f4945c46-4****
ポッドのマウントパスはdata1
です。kubectl exec oss-dynamic-68f4945c46-h**** -- ls /data | grep tmpfile kubectl exec oss-dynamic-68f4945c46-4**** -- ls /data1 | grep tmpfile
期待される出力:
tmpfile
この出力は、両方のポッドからファイルにアクセスできることを示しています。これは、ポッドが OSS ボリュームに格納されているデータを共有していることを意味します。
説明出力が返されない場合は、CSI プラグインのバージョンが 1.20.7 以降であることを確認してください。詳細については、「csi-plugin」をご参照ください。
ポッドを再作成します。
kubectl delete pod oss-dynamic-68f4945c46-h****
期待される出力:
pod "oss-dynamic-68f4945c46-h****" deleted
ポッドの削除後もファイルが OSS バケットに存在することを確認します。
再作成されたポッドの名前をクエリします。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE oss-dynamic-68f4945c46-4**** 1/1 Running 0 1h oss-dynamic-68f4945c46-z**** 1/1 Running 0 40s
ポッドの /data パス内のファイルをクエリします。
kubectl exec oss-dynamic-68f4945c46-z**** -- ls /data | grep tmpfile
期待される出力:
tmpfile
この出力は、tmpfile ファイルがまだ存在することを示しています。これは、OSS ボリュームがデータを永続化できることを意味します。
参照資料
OSS ボリュームの暗号化方法の詳細については、「ossfs 1.0 を使用して OSS ボリュームを暗号化する」をご参照ください。
OSS の読み書き分離を有効にする方法の詳細については、「OSS 読み書き分離のベスト プラクティス」をご参照ください。
OSS ボリュームを監視する方法の詳細については、「OSS ボリュームを表示する」をご参照ください。
ossfs と OSS に関するよくある質問の詳細については、「ossfs 1.0」と「ossfs 1.0 ボリュームに関する FAQ」をご参照ください。
コンテナ ネットワーク ファイル システム (CNFS) を使用して OSS ボリュームのパフォーマンスを向上させ、OSS ボリュームの QoS ポリシーを管理する方法の詳細については、「OSS バケットのライフサイクルを管理する」をご参照ください。