ossfs 1.0 は、動的プロビジョニングボリュームをサポートしています。StorageClass と永続ボリューム要求 (PVC) を使用して、永続ボリューム (PV) を自動的に作成し、Object Storage Service (OSS) バケットをマウントできます。この機能により、手動で PV を設定する必要がなくなり、ストレージ管理が簡素化されます。マルチテナント環境や、オンデマンドでのストレージ作成が頻繁に必要なシナリオに最適です。
前提条件
ご利用のクラスターと Container Storage Interface (CSI) コンポーネント (csi-plugin および csi-provisioner) が、以下のバージョン要件を満たしていることを確認してください。
RAM Roles for Service Accounts (RRSA) 認証を使用したマウント:クラスターのバージョンは 1.26 以降、CSI のバージョンは v1.30.4 以降である必要があります。
1.30.4 より前のバージョンで RRSA 機能を使用していた場合は、「[製品変更] CSI ossfs バージョンのアップグレードとマウントプロセスの最適化」に記載されているように、RAM ロールの権限付与設定を追加する必要があります。
AccessKey の使用:安定したマウントのため、CSI v1.18.8.45 以降を推奨します。
クラスターをアップグレードするには、「クラスターの手動アップグレード」をご参照ください。コンポーネントをアップグレードするには、「CSI コンポーネントのアップグレード」をご参照ください。
CSI v1.30.4-* 以降、OSS 静的プロビジョニングボリュームのマウントは csi-provisioner コンポーネントに依存します。
ステップ 1:認証方式の選択と認証情報の設定
OSS バケットリソースに安全にアクセスするために、まず認証メカニズムを設定します。
RRSA 認証:Pod に一時的で自動的にローテーションされる RAM ロールを付与し、アプリケーションレベルでの詳細な権限分離を実現します。この方式はより安全です。
AccessKey 認証:静的で長期的なキーを Secret に保存します。この方式は設定が簡単ですが、セキュリティは劣ります。
バージョン 1.26 以降のクラスターでは、AccessKey のローテーション時に
ossfsが再マウントされることによるサービス中断を避けるため、RRSA 認証の使用を推奨します。このガイドでは、クラスターと OSS バケットが同じ Alibaba Cloud アカウントに属していることを前提としています。アカウントをまたいで OSS バケットをマウントする場合は、RRSA 認証の使用を推奨します。
RRSA の使用
1. クラスターで RRSA を有効化する
ACK クラスターページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[クラスター情報] をクリックします。
[基本情報] タブで、[セキュリティと監査] セクションを見つけます。[RRSA OIDC] の右側にある [有効化] をクリックします。画面の指示に従い、オフピーク時に RRSA を有効化します。
クラスターのステータスが [更新中] から [実行中] に変わると、RRSA は正常に有効化されています。
重要RRSA を有効化した後、クラスターで作成される新しい ServiceAccount トークンの最大有効期間は 12 時間に制限されます。
2. RAMロールの作成と権限付与
Pod が OSS ボリュームにアクセスするために引き受けることができる RAM ロールを作成します。
AccessKey の使用
OSS アクセス権限を持つ RAM ユーザーを作成し、その AccessKey を取得します。これにより、ユーザーは OSS バケットに対する操作を実行する権限を得ます。
RAM ユーザーを作成します (既にある場合はこのステップをスキップします)。
RAM コンソールの [ユーザーの作成] ページに移動します。画面の指示に従って RAM ユーザーを作成します。ログイン名とパスワードを設定する必要があります。
アクセスポリシーを作成します。
この例では、最小権限の原則に従います。カスタムポリシーを作成して、対象の OSS バケットへのアクセス権限 (読み取り専用または読み書き権限) を付与します。
RAM コンソールの [ポリシーの作成] ページに移動します。[JSON] タブに切り替えて、ポリシースクリプトを入力します。
OSS 読み取り専用ポリシー
<myBucketName>を実際のバケット名に置き換えてください。{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": [ "acs:oss:*:*:<myBucketName>", "acs:oss:*:*:<myBucketName>/*" ] } ], "Version": "1" }OSS 読み取り/書き込みポリシー
<myBucketName>を実際のバケット名に置き換えてください。{ "Statement": [ { "Action": "oss:*", "Effect": "Allow", "Resource": [ "acs:oss:*:*:<myBucketName>", "acs:oss:*:*:<myBucketName>/*" ] } ], "Version": "1" }コンソールで PV を作成する際には、
oss:ListBuckets権限も必要です。{ "Effect": "Allow", "Action": "oss:ListBuckets", "Resource": "*" }(オプション) KMS で管理されているカスタマーマスターキー (CMK) ID を使用して OSS オブジェクトを暗号化する場合、RAM ユーザーに KMS 権限も設定する必要があります。詳細については、「KMS で管理されている特定の CMK ID を使用した暗号化」をご参照ください。
ポリシーを RAM ユーザーに付与します。
RAM コンソールの [ユーザー] ページに移動します。対象のユーザーの [操作] 列で、[権限の追加] をクリックします。
[ポリシー] セクションで、前のステップで作成したポリシーを検索して選択し、権限に追加します。
RAM ユーザーの AccessKey を作成します。これは PV が使用する Secret として保存されます。
RAM コンソールの [ユーザー] ページに移動します。対象のユーザーをクリックします。次に、[AccessKey] セクションで、[AccessKey の作成] をクリックします。
表示されるダイアログボックスで、画面の指示に従って AccessKey を作成します。AccessKey ID と AccessKey Secret を取得し、安全に保管する必要があります。
ステップ 1:StorageClass の作成
永続ボリュームを作成するためのテンプレートを定義するために、StorageClass を作成します。
RRSA メソッド
sc-oss.yamlという名前のファイルを作成します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: sc-oss parameters: # 実際のバケット名に置き換えてください。 bucket: bucket # マウントするバケットのルートディレクトリまたは指定されたサブディレクトリ。 path: / # バケットが配置されているリージョンのエンドポイント。 url: "http://oss-cn-hangzhou-internal.aliyuncs.com" # 認証には RRSA 方式を使用します。 authType: rrsa # 作成または変更した RAM ロール。 roleName: demo-role-for-rrsa # カスタムパラメーター。 otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other" # ボリュームのアクセスモード。 volumeAs: sharepath # Alibaba Cloud OSS CSI プラグインを使用する場合、この値は固定です。 provisioner: ossplugin.csi.alibabacloud.com # 動的にプロビジョニングされた PV のリクレームポリシー。 reclaimPolicy: Retain # バインディングモード。 volumeBindingMode: Immediateパラメーター
説明
bucketマウントする OSS バケット。
pathCSI コンポーネントのバージョン v1.14.8.32-c77e277b-aliyun 以降が必要です。
バケットのルートディレクトリからの相対的なマウントパスを指定します。デフォルトは
/で、バケット全体をマウントします。ossfs のバージョンが 1.91 より前の場合、指定された
pathは OSS バケットに既に存在している必要があります。詳細については、「ossfs 1.91 以降の新機能」をご参照ください。urlOSS バケットへのアクセスエンドポイント。
クラスターノードとバケットが同じリージョンにある場合、または Virtual Private Cloud (VPC) 接続が確立されている場合は、内部エンドポイントを使用します。
マウントノードとバケットが異なるリージョンにある場合は、パブリックエンドポイントを使用します。
異なるアクセスエンドポイントの一般的なフォーマットは以下の通りです:
内部:
http://oss-{{regionName}}-internal.aliyuncs.comまたはhttps://oss-{{regionName}}-internal.aliyuncs.com。内部アクセスエンドポイントのフォーマット
vpc100-oss-{{regionName}}.aliyuncs.comは非推奨です。できるだけ早く新しいフォーマットに切り替えてください。パブリック:
http://oss-{{regionName}}.aliyuncs.comまたはhttps://oss-{{regionName}}.aliyuncs.com。
authTypeRRSA 認証を使用するには
rrsaに設定します。roleName作成または変更した RAM ロールに設定します。
異なる StorageClass に異なる権限を設定するには、異なる RAM ロールを作成し、StorageClass で異なる
roleName値を指定します。otherOptsOSS ボリュームのカスタムパラメーターを
-o *** -o ***の形式で入力します。例:-o umask=022 -o max_stat_cache_size=100000 -o allow_other。provisionerドライバータイプ。Alibaba Cloud OSS CSI プラグインを使用する場合、この値は
ossplugin.csi.alibabacloud.comに固定されます。reclaimPolicy動的にプロビジョニングされた PV のリクレームポリシー。OSS 永続ボリュームは現在
Retainのみをサポートしています。これは、PVC を削除しても、PV と OSS バケット内のデータは削除されないことを意味します。volumeBindingMode関連付けモード。
OSS 永続ボリュームはゾーンベースのノードアフィニティを必要としません。デフォルト値の
Immediateを使用できます。volumeAsボリュームのアクセスモード。デフォルト値は
sharepathです。有効な値:subpathは、CSI コンポーネントのバージョンが 1.31.3 以降の場合にのみ有効です。それ以外の場合は、sharepathが使用されます。sharepath:共有モードでマウントします。すべてのボリュームがマウントパスを共有します。データは<bucket>:<path>/に保存されます。subpath:サブディレクトリモードでマウントします。ボリュームが作成されると、マウントパスの下にサブディレクトリが自動的に作成されます。データは<bucket>:<path>/<pv-name>/に保存されます。
sigVersionOSS サーバーへのリクエストの署名バージョン。
StorageClass を作成します。
kubectl apply -f sc-oss.yaml
AccessKey メソッド
kubectl
1. ストレージクラスの作成
Secret を作成します。Secret の名前空間は、アプリケーションの名前空間と同じである必要があります。
<yourAccessKey ID>と<yourAccessKey Secret>を、取得した AccessKey ID と AccessKey Secret に置き換えてください。kubectl create secret generic oss-secret --from-literal='akId=<yourAccessKey ID>' --from-literal='akSecret=<yourAccessKey Secret>'StorageClass を作成します。
sc-oss.yamlという名前のファイルを作成します。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: sc-oss parameters: # 実際のバケット名に置き換えてください。 bucket: bucket # マウントするバケットのルートディレクトリまたは指定されたサブディレクトリ。 path: / # バケットが配置されているリージョンのエンドポイント。 url: "http://oss-cn-hangzhou-internal.aliyuncs.com" # AccessKey 情報を保存する Secret の名前。 csi.storage.k8s.io/node-publish-secret-name: oss-secret # AccessKey 情報を保存する Secret が存在する名前空間。 csi.storage.k8s.io/node-publish-secret-namespace: default # カスタムパラメーター。 otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other" # Alibaba Cloud OSS CSI プラグインを使用する場合、この値は固定です。 provisioner: ossplugin.csi.alibabacloud.com # 動的にプロビジョニングされた PV のリクレームポリシー。 reclaimPolicy: Retain # バインディングモード。 volumeBindingMode: Immediateパラメーター
説明
nameStorageClass の名前。
bucketマウントする OSS バケット。
pathCSI コンポーネントのバージョン v1.14.8.32-c77e277b-aliyun 以降が必要です。
バケットのルートディレクトリからの相対的なマウントパスを指定します。デフォルトは
/で、バケット全体をマウントします。ossfs のバージョンが 1.91 より前の場合、指定された
pathは OSS バケットに既に存在している必要があります。詳細については、「ossfs 1.91 以降の新機能」をご参照ください。urlOSS バケットへのアクセスエンドポイント。
クラスターノードとバケットが同じリージョンにある場合、または VPC 接続が確立されている場合は、内部エンドポイントを使用します。
マウントノードとバケットが異なるリージョンにある場合は、パブリックエンドポイントを使用します。
異なるアクセスエンドポイントの一般的なフォーマットは以下の通りです:
内部:
http://oss-{{regionName}}-internal.aliyuncs.comまたはhttps://oss-{{regionName}}-internal.aliyuncs.com。内部アクセスエンドポイントのフォーマット
vpc100-oss-{{regionName}}.aliyuncs.comは非推奨です。できるだけ早く新しいフォーマットに切り替えてください。パブリック:
http://oss-{{regionName}}.aliyuncs.comまたはhttps://oss-{{regionName}}.aliyuncs.com。
csi.storage.k8s.io/node-publish-secret-nameAccessKey 情報を保存する Secret の名前。
csi.storage.k8s.io/node-publish-secret-namespaceAccessKey 情報を保存する Secret が存在する名前空間。
otherOptsOSS ボリュームのカスタムパラメーターを
-o *** -o ***の形式で入力します。例:-o umask=022 -o max_stat_cache_size=100000 -o allow_other。provisionerドライバータイプ。Alibaba Cloud OSS CSI プラグインを使用する場合、この値は
ossplugin.csi.alibabacloud.comに固定されます。reclaimPolicy動的にプロビジョニングされた PV のリクレームポリシー。OSS 永続ボリュームは現在
Retainのみをサポートしています。これは、PVC を削除しても、PV と OSS バケット内のデータは削除されないことを意味します。volumeBindingMode関連付けモード。
OSS 永続ボリュームはゾーンベースのノードアフィニティを必要としません。デフォルト値の
Immediateを使用できます。volumeAsボリュームのアクセスモード。デフォルト値は
sharepathです。有効な値:subpathは、CSI コンポーネントのバージョンが 1.31.3 以降の場合にのみ有効です。それ以外の場合は、sharepathが使用されます。sharepath:共有モードでマウントします。すべてのボリュームがマウントパスを共有します。データは<bucket>:<path>/に保存されます。subpath:サブディレクトリモードでマウントします。ボリュームが作成されると、マウントパスの下にサブディレクトリが自動的に作成されます。データは<bucket>:<path>/<pv-name>/に保存されます。
sigVersionOSS サーバーへのリクエストの署名バージョン。
StorageClass を作成します。
kubectl apply -f sc-oss.yaml
コンソール
ステップ 1 で取得した AccessKey を、PV が使用する Secret として保存します。
クラスター ページで、変更したいクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[YAML から作成] をクリックし、画面の指示に従って Secret を作成します。
apiVersion: v1 kind: Secret metadata: name: oss-secret # アプリケーションが存在する名前空間と同じである必要があります namespace: default stringData: # 取得した AccessKey ID に置き換えてください akId: <your AccessKey ID> # 取得した AccessKey Secret に置き換えてください akSecret: <your AccessKey Secret>
クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[StorageClass] ページで、[作成] をクリックします。[PV タイプ] を OSS に設定し、プロンプトに従って StorageClass パラメーターを構成します。
設定項目
説明
アクセス証明書
OSS へのアクセスに必要な Secret を設定します。これは、取得した AccessKey ID と AccessKey Secret です。
バケット ID
使用する OSS バケット。
設定した AccessKey でアクセスできるバケットのみがここに表示されます。
OSS パス
CSI コンポーネントのバージョン v1.14.8.32-c77e277b-aliyun 以降が必要です。
バケットのルートディレクトリからの相対的なマウントパスを指定します。デフォルトは
/で、バケット全体をマウントします。ossfs のバージョンが 1.91 より前の場合、指定された
pathは OSS バケットに既に存在している必要があります。詳細については、「ossfs 1.91 以降の新機能」をご参照ください。ボリュームモード
ボリュームのアクセスモード。デフォルトモードは [共有ディレクトリ] です。有効な値:
[サブディレクトリ] モードは、CSI コンポーネントのバージョンが 1.31.3 以降の場合にのみ有効です。それ以外の場合は、[共有ディレクトリ] モードが使用されます。
[共有ディレクトリ] (
sharepath):すべてのボリュームがマウントパスを共有します。データは<bucket>:<path>/に保存されます。[サブディレクトリ] (
subpath):ボリュームが作成されると、マウントパスの下にサブディレクトリが自動的に作成されます。データは<bucket>:<path>/<pv-name>/に保存されます。
エンドポイント
OSS バケットへのアクセスエンドポイント。
クラスターノードとバケットが同じリージョンにある場合、または VPC 接続が確立されている場合は、内部エンドポイントを使用します。
マウントノードとバケットが異なるリージョンにある場合は、パブリックエンドポイントを使用します。
異なるアクセスエンドポイントの一般的なフォーマットは以下の通りです:
内部:
http://oss-{{regionName}}-internal.aliyuncs.comまたはhttps://oss-{{regionName}}-internal.aliyuncs.com。内部アクセスエンドポイントのフォーマット
vpc100-oss-{{regionName}}.aliyuncs.comは非推奨です。できるだけ早く新しいフォーマットに切り替えてください。パブリック:
http://oss-{{regionName}}.aliyuncs.comまたはhttps://oss-{{regionName}}.aliyuncs.com。
内部ネットワーク経由でアクセスする場合、デフォルトで HTTP プロトコルが使用されます。HTTPS を使用するには、kubectl 方式を使用します。
回収ポリシー
動的にプロビジョニングされた PV のリクレームポリシー。OSS 永続ボリュームは現在
Retainのみをサポートしています。これは、PVC を削除しても、PV と OSS バケット内のデータは削除されないことを意味します。オプションパラメーター
OSS ボリュームのカスタムパラメーターを
-o *** -o ***の形式で入力します。例:-o umask=022 -o max_stat_cache_size=100000 -o allow_other。
ステップ 2: PVC の作成
PVC を作成してストレージリソースを動的に要求します。CSI プラグインは StorageClass に基づいて自動的に PV を作成します。
kubectl
pvc-oss.yamlという名前のファイルを作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: # PVC の名前。 name: pvc-oss spec: # アクセスモードを設定します。ReadOnlyMany は、ossfs が OSS バケットを読み取り専用モードでマウントすることを示します。 accessModes: - ReadOnlyMany volumeMode: Filesystem resources: requests: # ストレージ容量を宣言します。この値は総ボリュームサイズを超えることはできません。 storage: 20Gi # 参照する StorageClass を宣言します。 storageClassName: sc-ossパラメーター
説明
accessModesアクセスモードを設定します。
ReadOnlyManyとReadWriteManyがサポートされています。ReadOnlyManyを選択すると、ossfs は OSS バケットを読み取り専用モードでマウントします。storageボリュームに要求するストレージ容量を宣言します。この値は、OSS 永続ボリュームの実際の容量を制限するものではありません。
storageClassName参照する StorageClass。
PVC を作成します。
kubectl apply -f pvc-oss.yamlPVC が作成され、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 sc-oss <unset> 4d20h
コンソール
クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[永続ボリューム要求] ページで、[作成] をクリックします。[PVC タイプ] を [OSS] に設定し、プロンプトに従って PVC パラメーターを構成します。
パラメーター
説明
割り当てモード
[StorageClass を使用] を選択します。
既存のストレージクラス
[選択] をクリックし、作成した StorageClass を選択します。
容量
ボリュームに要求するストレージ容量を宣言します。この値は、OSS 永続ボリュームの実際の容量を制限するものではありません。
アクセスモード
アクセスモードを設定します。
ReadOnlyManyとReadWriteManyがサポートされています。ReadOnlyManyを選択すると、ossfs は OSS バケットを読み取り専用モードでマウントします。
ステップ 4:アプリケーションの作成とボリュームのマウント
アプリケーションで PVC を参照してマウントを完了します。
kubectl
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: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: # コンテナー内のマウントパス - name: pvc-oss mountPath: "/data" # ヘルスチェックの設定 livenessProbe: exec: command: - ls - /data initialDelaySeconds: 30 periodSeconds: 30 volumes: - name: pvc-oss persistentVolumeClaim: # 作成した PVC を参照 claimName: pvc-ossアプリケーションを作成します。
kubectl create -f oss-static.yamlマウント結果を検証します。
Pod が
Running状態であることを確認します。kubectl get pod -l app=nginxPod に入り、マウントポイントを検査します。
kubectl exec -it <pod-name> -- ls /data出力には、OSS マウントパスからのデータが表示されるはずです。
コンソール
クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Deployment] ページで、[イメージから作成] をクリックします。
プロンプトに従ってアプリケーションパラメーターを構成します。
主要なパラメーターを以下に示します。他のパラメーターはデフォルト値のままにできます。詳細については、「ステートレスワークロード (Deployment) の作成」をご参照ください。
設定ステップ
パラメーター
説明
基本情報
レプリカ
Deployment のレプリカ数。
コンテナー
イメージ名
アプリケーションのデプロイに使用するイメージのアドレス。例:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6。必須リソース
必須の vCPU およびメモリリソース。
ボリューム
[PVC の追加] をクリックし、パラメーターを構成します。
[マウントソース]:以前に作成した PVC を選択します。
[コンテナーパス]:OSS ボリュームをマウントするコンテナー内のパスを入力します。例:
/data。
詳細設定
Pod ラベル
例えば、名前が
appで値がnginxのラベル。アプリケーションのデプロイステータスを確認します。
[Deployment] ページで、アプリケーション名をクリックします。[Pod] タブで、Pod が正常に実行されていること ([ステータス] が [実行中]) を確認します。
ステップ 5:共有ストレージと永続ストレージの検証
共有ストレージの検証
1 つの Pod でファイルを作成し、別の Pod でそれを表示して、共有ストレージ機能を検証します。
Pod 情報を表示し、出力から Pod 名を取得します。
kubectl get pod -l app=nginxいずれかの Pod に
tmpfileという名前のファイルを作成します。oss-static-66fbb85b67-d****という名前の Pod の場合:ReadWriteMany:/dataパスにtmpfileファイルを作成します。kubectl exec oss-static-66fbb85b67-d**** -- touch /data/tmpfileReadOnlyMany:OSS コンソールを使用するか、cp でファイルをアップロードして、tmpfileを OSS バケットの対応するパスにアップロードします。
別の Pod のマウントパスからファイルを表示します。
oss-static-66fbb85b67-l****という名前の Pod で、マウントパスが/dataの場合:kubectl exec oss-static-66fbb85b67-l**** -- ls /data | grep tmpfile出力
tmpfileは、Pod がデータを共有していることを確認します。tmpfile期待される出力が表示されない場合は、CSI コンポーネントのバージョンが v1.20.7 以降であることを確認してください。
永続ストレージの検証
Pod を削除して再作成し、新しい Pod にファイルがまだ存在するかどうかを確認して、データの永続性を検証します。
アプリケーション Pod を削除して再構築をトリガーします。kubectl delete pod oss-static-66fbb85b67-d****
kubectl delete pod oss-static-66fbb85b67-d****Pod を確認し、新しい Pod が起動して
Running状態になるのを待ちます。kubectl get pod -l app=nginx/dataパス内のファイルを確認します。oss-static-66fbb85b67-z****という名前の新しい Pod で、マウントパスが/dataの場合:kubectl exec oss-static-66fbb85b67-z**** -- ls /data | grep tmpfile出力
tmpfileは、ファイルがまだ存在することを確認し、データが永続化されていることを示します。tmpfile
重要な考慮事項
データ整合性リスク
同時書き込みの整合性リスク:書き込みの安定性を向上させるため、CSI コンポーネントを v1.28 以降にアップグレードすることを推奨します。ただし、単一ファイルへの同時書き込みシナリオでは、OSS の「上書きアップロード」機能によりデータが上書きされる可能性があります。アプリケーション層でデータ整合性を確保する必要があります。
データ同期と偶発的な削除のリスク:ボリュームがマウントされると、アプリケーション Pod またはホストノードのマウントパスでのファイルの削除や変更は、OSS バケット内のソースファイルと直接同期されます。偶発的なデータ損失を防ぐため、OSS バケットのバージョニングを有効にすることを推奨します。
アプリケーションの安定性リスク
Out of Memory (OOM) リスク:多数のファイル (例えば 100,000 以上、ノードのメモリに依存) に対して初めて
readdir操作 (シェルスクリプトのlsコマンドなど) を実行すると、ossfs はすべてのメタデータを一度に読み込むことで大量のメモリを消費する可能性があります。これにより Out of Memory (OOM) エラーがトリガーされ、プロセスが強制終了し、マウントポイントが利用できなくなることがあります。このリスクを軽減するために、OSS バケットのサブディレクトリをマウントするか、ディレクトリ構造を最適化することを推奨します。
マウント時間の増加:アプリケーションで
securityContext.fsgroupを設定すると、kubelet はボリュームのマウント時に再帰的にファイルの権限を変更 (chmod/chown) します。ファイル数が非常に多い場合、これによりマウント時間が大幅に増加し、Pod の起動が深刻に遅延する可能性があります。このパラメーターを設定しつつマウント時間を短縮する必要がある場合は、「OSS ボリュームのマウント時間の増加」をご参照ください。
キーの無効化リスク (AccessKey 認証):AccessKey が無効になったり、その権限が変更されたりすると、アプリケーションは即座にアクセスを失います。
アクセスを回復するには、Secret 内の認証情報を更新し、アプリケーション Pod を再起動して再マウントを強制する必要がありますが、これによりサービスが中断します。この操作はメンテナンスウィンドウ中に実行してください。詳細については、「ソリューション」をご参照ください。
コストリスク
パートコスト:
ossfsは 10 MB を超えるファイルをパートでアップロードします。アップロードが予期せず中断された場合 (例えば、アプリケーションの再起動による)、手動でパートを削除するか、ライフサイクルルールを使用して削除する必要があります。これにより、不完全なパートがストレージスペースを占有し、コストが発生するのを防ぎます。
関連ドキュメント
Container Network File System (CNFS) を通じて OSS ボリュームを管理し、パフォーマンスと QoS 制御を向上させることができます。詳細については、「OSS ボリュームのライフサイクル管理」をご参照ください。
OSS に保存されている機密データを保護するため、サーバーサイド暗号化を有効にすることを推奨します。詳細については、「ossfs 1.0 ボリュームの暗号化」をご参照ください。
ossfs と OSS に関するよくある質問については、「ossfs 1.0 (デフォルト)」および「ossfs 1.0 ボリュームに関するよくある質問」をご参照ください。
コンテナーストレージモニタリングを有効にし、アラートを設定して、ボリュームの異常やパフォーマンスボトルネックを迅速に検出します。
ossfs 1.0 は、ossfs 2.0 よりもランダムおよび同時書き込みシナリオでより信頼性の高いデータ整合性を提供します。ただし、ossfs 2.0 はシーケンシャル読み書きシナリオでより優れたパフォーマンスを提供します。