すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ossfs 1.0 の静的プロビジョニングボリュームの使用

最終更新日:Dec 03, 2025

ossfs 1.0 を使用すると、静的プロビジョニングボリュームを作成することで、既存の Object Storage Service (OSS) バケットを永続ストレージとしてマウントできます。この方法は、設定ファイル、画像、ビデオ リソースのマウントなど、同時読み取り、頻度の低いランダム書き込み、変更されたファイル権限を伴う汎用的なユースケースに適しています。

前提条件

ご利用のクラスターと Container Storage Interface (CSI) コンポーネント (csi-plugin および csi-provisioner) がバージョン要件を満たしていることを確認してください:

クラスターをアップグレードするには、「クラスターの手動アップグレード」をご参照ください。コンポーネントをアップグレードするには、「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 を有効化

  1. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のペインで [クラスター情報] をクリックします。

  2. [基本情報] タブで、[セキュリティと監査] セクションを見つけます。[RRSA OIDC] の右側にある [有効化] をクリックします。画面の指示に従い、オフピーク時に RRSA を有効にします。

    クラスターのステータスが [更新中] から [実行中] に変わると、RRSA は正常に有効化されています。

    重要

    RRSA を有効にすると、クラスターで作成される新しい ServiceAccount トークンの最大有効期間は 12 時間に制限されます。

ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

2. RAM ロールの作成と権限付与

Pod が OSS ボリュームにアクセスするために引き受けることができる RAM ロールを作成します。

手順の表示

  1. RAM ロールを作成します。

    1. RAM コンソールの [ロールの作成] ページに移動します。[信頼できるエンティティタイプ] として [ID プロバイダー] を選択し、[エディターの切り替え] をクリックして [ビジュアルエディター] ページを開きます。

    2. [信頼できるエンティティ] として [ID プロバイダー] を選択し、[編集] をクリックします。以下のように設定を構成します。

      以下の主要な設定を構成します。他のパラメーターにはデフォルト値を使用できます。詳細については、「OIDC IdP の RAM ロールの作成」をご参照ください。

      パラメーター

      説明

      ID プロバイダータイプ

      [OIDC] を選択します。

      [ID プロバイダー]

      ack-rrsa-<cluster_id> を選択します。ここで、<cluster_id> はご利用のクラスター ID です。

      条件

      手動で oidc:sub を追加します。

      [ロール名]

      この例では、名前は demo-role-for-rrsa です。

  2. アクセスポリシーを作成します。

    最小権限の原則に従い、対象の OSS バケットへのアクセス (読み取り専用または読み書き権限) を許可するカスタムポリシーを作成します

    1. RAM コンソールの [ポリシーの作成] ページに移動し、[スクリプトエディター] に切り替えて、以下のポリシースクリプトを入力します。

      すでに OSS 権限を持つ RAM ロールがある場合は、その信頼ポリシーを変更して再利用できます。詳細については、「RRSA に基づく Pod の権限隔離」をご参照ください。

      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"
      }
    2. (オプション) KMS で管理されている特定の CMK ID を使用して OSS オブジェクトを暗号化する場合、ロールに KMS 権限も付与する必要があります。詳細については、「KMS で管理されている特定の CMK ID を使用した暗号化」をご参照ください。

  3. ポリシーを RAM ロールにアタッチします。

    1. RAM コンソールの [ロール] ページに移動します。対象のロールの [操作] 列で、[権限の追加] をクリックします。

    2. [アクセスポリシー] セクションで、作成したポリシーを検索して選択し、権限を付与します。

AccessKey の使用

OSS アクセス権限を持つ RAM ユーザーを作成し、その AccessKey を取得します。これにより、ユーザーは OSS バケットに対する操作を実行する権限を得ます。

  1. RAM ユーザーを作成します (すでに存在する場合はこのステップをスキップします)。

    RAM コンソールの [ユーザーの作成] ページに移動します。画面の指示に従って RAM ユーザーを作成します。ログイン名とパスワードを設定する必要があります。

  2. アクセスポリシーを作成します。

    この例では、最小権限の原則に従います。対象の OSS バケットへのアクセス (読み取り専用または読み書き権限) を許可するカスタムポリシーを作成します

    1. RAM コンソールの [ポリシーの作成] ページに移動します。[スクリプトエディター] タブに切り替えて、ポリシースクリプトを入力します。

      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": "*"
      }
    2. (オプション) KMS で管理されているカスタマーマスターキー (CMK) ID を使用して OSS オブジェクトを暗号化する場合、RAM ユーザーに KMS 権限も設定する必要があります。詳細については、「KMS で管理されている特定の CMK ID を使用した暗号化」をご参照ください。

  3. ポリシーを RAM ユーザーに付与します。

    1. RAM コンソールの [ユーザー] ページに移動します。対象のユーザーの [操作] 列で、[権限の追加] をクリックします。

    2. [アクセスポリシー] セクションで、前のステップで作成したポリシーを検索して選択し、権限に追加します。

  4. RAM ユーザーの AccessKey を作成します。これを PV が使用する Secret として保存します。

    1. RAM コンソールの [ユーザー] ページに移動します。対象のユーザーをクリックします。次に、[AccessKey] セクションで、[AccessKey の作成] をクリックします。

    2. 表示されるダイアログボックスで、画面の指示に従って AccessKey を作成します。AccessKey ID と AccessKey Secret を取得し、安全に保管する必要があります。

ステップ 2:PV の作成

Persistent Volume (PV) を作成して、既存の OSS バケットをクラスターに登録します。

RRSA 方式

  1. pv-oss-rrsa.yaml という名前のファイルを作成します。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # PV 名
      name: pv-oss   
      # PV ラベル
      labels:    
        alicloud-pvname: pv-oss
    spec:
      capacity:
        # ボリューム容量を定義
        storage: 10Gi  
      # アクセスモード
      accessModes:  
        - ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        # PV 名 (metadata.name) と同じである必要があります
        volumeHandle: pv-oss  
        volumeAttributes:
          # 実際のバケット名に置き換えます
          bucket: "your-bucket-name"  
          # バケットのルートディレクトリまたは指定したサブディレクトリをマウントします
          path: /  
          # バケットが配置されているリージョンのエンドポイント
          url: "http://oss-cn-hangzhou-internal.aliyuncs.com"  
          otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other"
          authType: "rrsa"
          # 作成または変更した RAM ロール
          roleName: "demo-role-for-rrsa"
          # OSS リクエスト署名バージョン
          sigVersion: "v4"  

    パラメーター

    説明

    storage

    OSS ボリュームの容量を定義します。この値は、PV と PVC を一致させるためにのみ使用されます。

    accessModes

    アクセスモードを設定します。ReadOnlyManyReadWriteMany をサポートします。

    ReadOnlyMany を選択すると、ossfs は OSS バケットを読み取り専用モードでマウントします。

    persistentVolumeReclaimPolicy

    PV のリクレームポリシー。OSS ボリュームは現在 Retain のみをサポートしており、PVC が削除された後も PV と OSS バケット内のデータは保持されます。

    driver

    ドライバーのタイプを定義します。Alibaba Cloud OSS CSI プラグインを使用する場合、ossplugin.csi.alibabacloud.com である必要があります。

    volumeHandle

    PV 名 (metadata.name) と同じである必要があります。

    bucket

    マウントする OSS バケット。

    path

    CSI コンポーネントのバージョン v1.14.8.32-c77e277b-aliyun 以降が必要です。

    バケットのルートディレクトリからの相対マウントパスを指定します。デフォルトは / で、バケット全体をマウントします。

    ossfs のバージョンが 1.91 より前の場合、指定された path は OSS バケットにすでに存在している必要があります。詳細については、「ossfs 1.91 以降の新機能」をご参照ください。

    url

    OSS バケットへのアクセスエンドポイント

    • クラスターノードとバケットが同じリージョンにある場合、または 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

    otherOpts

    OSS ボリュームのカスタムパラメーターを -o *** -o *** の形式で入力します。例:-o umask=022 -o max_stat_cache_size=100000 -o allow_other

    説明の表示

    • umask:ossfs ファイルの読み取り権限を変更します。

      例えば、umask=022 は ossfs ファイルの権限を 755 に変更します。これにより、SDK や OSS コンソールなど他の方法でアップロードされたファイルの権限問題 (デフォルトは 640) を解決します。読み書き分離や複数ユーザーアクセスの場合にこのパラメーターを設定することを推奨します。

    • max_stat_cache_size:メタデータキャッシュエントリの上限を設定します (例:100000)。オブジェクトのメタデータをメモリにキャッシュし、lsstat などの操作のパフォーマンスを向上させます。

      ただし、このキャッシュは OSS コンソール、SDK、または ossutil を介して行われたファイルの変更を即座に検出できません。これにより、アプリケーションが不整合なデータを読み取る可能性があります。厳密なデータ整合性が要件の場合は、このパラメーターを 0 (キャッシュを無効にする) に設定するか、stat_cache_expire パラメーターでキャッシュの有効期限を短くします。これにより、読み取りパフォーマンスは低下します。

    • allow_other:マウントしたユーザー以外のユーザーがマウントポイント内のファイルやディレクトリにアクセスできるようにします。これは、マウントしていないユーザーもデータにアクセスする必要がある複数ユーザー共有環境に適しています。

    その他のオプションパラメーターについては、「マウントオプション」および「ossfs 1.0 設定のベストプラクティス」をご参照ください。

    authType

    RRSA 認証を使用するために rrsa に設定します。

    roleName

    作成または変更した RAM ロールに設定します。

    異なる PV に異なる権限を設定するには、異なる RAM ロールを作成し、PV で異なる roleName 値を指定します。

    sigVersion

    OSS サーバーへのリクエストの署名バージョン。

    デフォルトの RRSA 認証が要件を満たさない場合 (例えば、デフォルト以外の ServiceAccount やサードパーティの OIDC を使用する場合)、PV 設定を変更して特定の ARN または ServiceAccount を指定できます。詳細については、「RRSA 認証で指定の ARN または ServiceAccount を使用するにはどうすればよいですか?」をご参照ください。
  2. PV を作成します。

    kubectl create -f pv-oss-rrsa.yaml

AccessKey 方式

kubectl

  1. ステップ 1 で取得した AccessKey を PV が使用する Secret として保存するために、oss-secret.yaml という名前のファイルを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      # アプリケーションが存在する名前空間と同じである必要があります
      namespace: default
    stringData:
      # 取得した AccessKey ID に置き換えます
      akId: <your AccessKey ID>
      # 取得した AccessKey Secret に置き換えます
      akSecret: <your AccessKey Secret>
  2. Secret を作成します。

    kubectl create -f  oss-secret.yaml
  3. pv-oss-ram.yaml という名前のファイルを作成します。

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # PV 名
      name: pv-oss
      # PV ラベル
      labels:
        alicloud-pvname: pv-oss
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        # PV 名 (metadata.name) と同じである必要があります
        volumeHandle: pv-oss  
        # AccessKey 情報を取得するために Secret オブジェクトを指定します
        nodePublishSecretRef:
          name: oss-secret
          namespace: default
        volumeAttributes:
          # 実際のバケット名に置き換えます
          bucket: "your-bucket-name"  
          url: "http://oss-cn-hangzhou-internal.aliyuncs.com"
          otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other"
          path: "/"

    パラメーター

    説明

    storage

    OSS ボリュームの容量を定義します。この値は、PV と PVC を一致させるためにのみ使用されます。

    accessModes

    アクセスモードを設定します。ReadOnlyManyReadWriteMany をサポートします。

    ReadOnlyMany を選択すると、ossfs は OSS バケットを読み取り専用モードでマウントします。

    persistentVolumeReclaimPolicy

    PV のリクレームポリシー。OSS ボリュームは現在 Retain のみをサポートしており、PVC が削除された後も PV と OSS バケット内のデータは保持されます。

    driver

    ドライバーのタイプを定義します。Alibaba Cloud OSS CSI プラグインを使用する場合、ossplugin.csi.alibabacloud.com である必要があります。

    nodePublishSecretRef

    PV をマウントする際に AccessKey 情報を提供する Secret を指定します。

    volumeHandle

    PV 名 (metadata.name) と同じである必要があります。

    bucket

    マウントする OSS バケット。

    url

    OSS バケットへのアクセスエンドポイント

    • クラスターノードとバケットが同じリージョンにある場合、または 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

    otherOpts

    OSS ボリュームのカスタムパラメーターを -o *** -o *** の形式で入力します。例:-o umask=022 -o max_stat_cache_size=100000 -o allow_other

    説明の表示

    • umask:ossfs ファイルの読み取り権限を変更します。

      例えば、umask=022 は ossfs ファイルの権限を 755 に変更します。これにより、SDK や OSS コンソールなど他の方法でアップロードされたファイルの権限問題 (デフォルトは 640) を解決します。読み書き分離や複数ユーザーアクセスの場合にこのパラメーターを設定することを推奨します。

    • max_stat_cache_size:メタデータキャッシュエントリの上限を設定します (例:100000)。オブジェクトのメタデータをメモリにキャッシュし、lsstat などの操作のパフォーマンスを向上させます。

      ただし、このキャッシュは OSS コンソール、SDK、または ossutil を介して行われたファイルの変更を即座に検出できません。これにより、アプリケーションが不整合なデータを読み取る可能性があります。厳密なデータ整合性が要件の場合は、このパラメーターを 0 (キャッシュを無効にする) に設定するか、stat_cache_expire パラメーターでキャッシュの有効期限を短くします。これにより、読み取りパフォーマンスは低下します。

    • allow_other:マウントしたユーザー以外のユーザーがマウントポイント内のファイルやディレクトリにアクセスできるようにします。これは、マウントしていないユーザーもデータにアクセスする必要がある複数ユーザー共有環境に適しています。

    その他のオプションパラメーターについては、「マウントオプション」および「ossfs 1.0 設定のベストプラクティス」をご参照ください。

    path

    CSI コンポーネントのバージョン v1.14.8.32-c77e277b-aliyun 以降が必要です。

    バケットのルートディレクトリからの相対マウントパスを指定します。デフォルトは / で、バケット全体をマウントします。

    ossfs のバージョンが 1.91 より前の場合、指定された path は OSS バケットにすでに存在している必要があります。詳細については、「ossfs 1.91 以降の新機能」をご参照ください。

    sigVersion

    OSS サーバーへのリクエストの署名バージョン。

  4. PV を作成します。

    kubectl create -f pv-oss-ram.yaml

コンソール

ステップ 1 で取得した AccessKey を PV が使用する Secret として保存します。

  1. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のペインで、[ワークロード] > [Deployment] を選択します。

[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>
  1. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のペインで、[ボリューム] > [Persistent Volume Claim] を選択します。

  2. [PersistentVolume] ページで、[作成] をクリックします。[ボリュームタイプ] を OSS に設定し、パラメーターを構成してから送信します。

    以下の表に主要なパラメーターをリストします。

    パラメーター

    説明

    [合計容量]

    作成するボリュームの容量。

    アクセスモード

    アクセスモードを設定します。ReadOnlyManyReadWriteMany をサポートします。

    ReadOnlyMany を選択すると、ossfs は OSS バケットを読み取り専用モードでマウントします。

    アクセス資格情報

    OSS にアクセスするために必要な Secret を設定します。これは ステップ 1 で取得した AccessKey ID と AccessKey Secret です。

    [オプションパラメーター]

    OSS ボリュームのカスタムパラメーターを -o *** -o *** の形式で入力します。例:-o umask=022 -o max_stat_cache_size=100000 -o allow_other

    説明の表示

    • umask:ossfs ファイルの読み取り権限を変更します。

      例えば、umask=022 は ossfs ファイルの権限を 755 に変更します。これにより、SDK や OSS コンソールなど他の方法でアップロードされたファイルの権限問題 (デフォルトは 640) を解決します。読み書き分離や複数ユーザーアクセスの場合にこのパラメーターを設定することを推奨します。

    • max_stat_cache_size:メタデータキャッシュエントリの上限を設定します (例:100000)。オブジェクトのメタデータをメモリにキャッシュし、lsstat などの操作のパフォーマンスを向上させます。

      ただし、このキャッシュは OSS コンソール、SDK、または ossutil を介して行われたファイルの変更を即座に検出できません。これにより、アプリケーションが不整合なデータを読み取る可能性があります。厳密なデータ整合性が要件の場合は、このパラメーターを 0 (キャッシュを無効にする) に設定するか、stat_cache_expire パラメーターでキャッシュの有効期限を短くします。これにより、読み取りパフォーマンスは低下します。

    • allow_other:マウントしたユーザー以外のユーザーがマウントポイント内のファイルやディレクトリにアクセスできるようにします。これは、マウントしていないユーザーもデータにアクセスする必要がある複数ユーザー共有環境に適しています。

    その他のオプションパラメーターについては、「マウントオプション」および「ossfs 1.0 設定のベストプラクティス」をご参照ください。

    バケット ID

    使用する OSS バケット。

    設定された AccessKey でアクセスできるバケットのみがここに表示されます。

    [OSS パス]

    CSI コンポーネントのバージョン v1.14.8.32-c77e277b-aliyun 以降が必要です。

    バケットのルートディレクトリからの相対マウントパスを指定します。デフォルトは / で、バケット全体をマウントします。

    ossfs のバージョンが 1.91 より前の場合、指定された path は OSS バケットにすでに存在している必要があります。詳細については、「ossfs 1.91 以降の新機能」をご参照ください。

    エンドポイント

    OSS バケットへのアクセスエンドポイント

    • クラスターノードとバケットが同じリージョンにある場合、または 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

    内部ネットワーク経由でアクセスする場合、デフォルトで HTTP プロトコルが使用されます。HTTPS を使用するには、kubectl 方式を使用してください。

手順3:PVC の作成

アプリケーションで必要な永続ストレージ容量を要求するために、PersistentVolumeClaim (PVC) を作成します。

kubectl

  1. pvc-oss.yaml という名前のファイルを作成します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      # PVC 名
      name: pvc-oss
      namespace: default
    spec:
      # アクセスモードを設定します。ReadOnlyMany は、ossfs が OSS バケットを読み取り専用モードでマウントすることを示します。
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          # ストレージ容量を宣言します。これは、ボリュームの合計容量を超えることはできません。
          storage: 10Gi
      selector:
        matchLabels:
          # ラベルで PV を照合します
          alicloud-pvname: pv-oss
  2. PVC を作成します。

    kubectl create -f pvc-oss.yaml
  3. PVC のステータスを確認します。

    kubectl get pvc pvc-oss

    出力結果から、PVC のステータスが Bound になり、PV にバインドされたことがわかります。

    NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-oss   Bound    pv-oss   10Gi       ROX                           <unset>                 6s

コンソール

  1. クラスター ページで、目的のクラスターを見つけ、その名前をクリックします。 左側のペインで、[ボリューム] > [永続ボリューム要求] を選択します。

  2. [永続ボリューム要求] ページで、[作成] をクリックします。 [PVC タイプ] として [OSS] を選択し、指示に従ってパラメーターを設定します。

    主要なパラメーターは次のとおりです。

    パラメーター

    説明

    プロビジョニングモード

    [既存の PersistentVolume を使用] を選択します。

    PV を作成していない場合は、[プロビジョニングモード][PersistentVolume の作成] に設定し、PV パラメーターを設定できます。

    合計容量

    PVC の容量です。PV の容量を超えることはできません。

手順4:アプリケーションの作成とボリュームのマウント

アプリケーションで PVC を参照してマウントを完了します。

kubectl

  1. 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
  2. アプリケーションを作成します。

    kubectl create -f oss-static.yaml
  3. マウント結果を確認します。

    • Pod のステータスが Running であることを確認します。

      kubectl get pod -l app=nginx
    • Pod に入り、マウントポイントを検査します。

      kubectl exec -it <pod-name> -- ls /data

      出力には、OSS マウントパスのデータが表示されます。

コンソール

  1. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。 左側のナビゲーションペインで、[ワークロード] > [デプロイメント] を選択します。

  2. [デプロイメント] ページの右上隅にある [イメージから作成] をクリックします。

  3. プロンプトに従って、アプリケーションのパラメーターを設定します。

    主要なパラメーターを以下に示します。 その他のパラメーターはデフォルト値のままでかまいません。 詳細については、「ステートレスワークロード (Deployment) の作成」をご参照ください。

    設定ページ

    パラメーター

    説明

    [基本情報]

    [レプリカ数]

    Deployment のレプリカ数。

    [コンテナー設定]

    イメージ名

    アプリケーションのデプロイに使用するイメージのアドレス。例:anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    [必須リソース]

    必須の vCPU およびメモリリソース。

    ボリューム

    [クラウドストレージ要求の追加] をクリックし、パラメーターを設定します。

    • [マウントソース]:先ほど作成した PVC を選択します。

    • [コンテナーパス]:OSS ボリュームをマウントするコンテナー内のパスを入力します。例:/data

    ラベルおよびアノテーション

    Pod ラベル

    たとえば、名前が app で、値が nginx のラベルです。

  4. アプリケーションのデプロイステータスを確認します。

    [デプロイメント] ページで、アプリケーション名をクリックします。[ポッド] タブで、ポッドが正常に実行されていること (ステータス: 実行中) を確認します。

手順5:共有ストレージと永続ストレージの確認

共有ストレージの確認

1つの Pod にファイルを作成し、別の Pod でそのファイルを表示することで、共有ストレージ機能を確認します。

  1. Pod 情報を表示し、出力から Pod 名を取得します。

    kubectl get pod -l app=nginx
  2. いずれかの Pod に tmpfile という名前のファイルを作成します。 Pod 名が oss-static-66fbb85b67-d**** の場合を例にします。

  3. 別の Pod のマウントパスからファイルを表示します。

    Pod 名が oss-static-66fbb85b67-l**** で、マウントパスが /data の場合を例にします。

    kubectl exec oss-static-66fbb85b67-l**** -- ls /data | grep tmpfile

    出力として tmpfile が返され、Pod がデータを共有していることが確認できます。

    tmpfile
    期待される出力が表示されない場合は、ご利用の CSI コンポーネントのバージョンが v1.20.7 以降であることを確認してください。

永続ストレージの確認

Pod を削除して再作成し、新しい Pod にファイルがまだ存在するかどうかを確認することで、データの永続性を検証します。

  1. アプリケーション Pod を削除して、再構築をトリガーします。

    kubectl delete pod oss-static-66fbb85b67-d****
  2. Pod を確認し、新しい Pod が起動して Running 状態になるまで待ちます。

    kubectl get pod -l app=nginx
  3. /data パスでファイルを確認します。

    新しい Pod 名が oss-static-66fbb85b67-z**** で、マウントパスが /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 は、シーケンシャル読み取りおよび書き込みのシナリオで、より優れたパフォーマンスを提供します。