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

Container Service for Kubernetes:Mount an OSS Bucket by using an ossfs 1.0 dynamically provisioned volume

最終更新日:Dec 04, 2025

ossfs 1.0 は、動的プロビジョニングボリュームをサポートしています。StorageClass と永続ボリューム要求 (PVC) を使用して、永続ボリューム (PV) を自動的に作成し、Object Storage Service (OSS) バケットをマウントできます。この機能により、手動で PV を設定する必要がなくなり、ストレージ管理が簡素化されます。マルチテナント環境や、オンデマンドでのストレージ作成が頻繁に必要なシナリオに最適です。

前提条件

ご利用のクラスターと 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. ACK クラスターページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[クラスター情報] をクリックします。

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

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

    重要

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

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 コンソールの [ポリシーの作成] ページに移動し、[JSON] に切り替えて、以下のポリシースクリプトを入力します。

      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 コンソールの [ポリシーの作成] ページに移動します。[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": "*"
      }
    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 を取得し、安全に保管する必要があります。

ステップ 1:StorageClass の作成

永続ボリュームを作成するためのテンプレートを定義するために、StorageClass を作成します。

RRSA メソッド

  1. 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 バケット。

    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

    authType

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

    roleName

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

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

    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 設定のベストプラクティス」をご参照ください。

    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>/ に保存されます。

    sigVersion

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

  2. StorageClass を作成します。

    kubectl apply -f sc-oss.yaml

AccessKey メソッド

kubectl

1. ストレージクラスの作成

  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>'
  2. StorageClass を作成します。

    1. 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
      

      パラメーター

      説明

      name

      StorageClass の名前。

      bucket

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

      path

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

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

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

      url

      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

      csi.storage.k8s.io/node-publish-secret-name

      AccessKey 情報を保存する Secret の名前。

      csi.storage.k8s.io/node-publish-secret-namespace

      AccessKey 情報を保存する Secret が存在する名前空間。

      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 設定のベストプラクティス」をご参照ください。

      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>/ に保存されます。

      sigVersion

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

    2. StorageClass を作成します。

      kubectl apply -f sc-oss.yaml

コンソール

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

    1. クラスター ページで、変更したいクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[設定] > シークレット を選択します。

    2. [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>
  2. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[ボリューム] > [StorageClass] を選択します。

  3. [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

    説明の表示

    • 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 設定のベストプラクティス」をご参照ください。

ステップ 2: PVC の作成

PVC を作成してストレージリソースを動的に要求します。CSI プラグインは StorageClass に基づいて自動的に PV を作成します。

kubectl

  1. 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

    アクセスモードを設定します。ReadOnlyManyReadWriteMany がサポートされています。

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

    storage

    ボリュームに要求するストレージ容量を宣言します。この値は、OSS 永続ボリュームの実際の容量を制限するものではありません。

    storageClassName

    参照する StorageClass。

  2. PVC を作成します。

    kubectl apply -f pvc-oss.yaml
  3. 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            sc-oss             <unset>                 4d20h

コンソール

  1. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[ボリューム] > [永続ボリューム要求] を選択します。

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

    パラメーター

    説明

    割り当てモード

    [StorageClass を使用] を選択します。

    既存のストレージクラス

    [選択] をクリックし、作成した StorageClass を選択します。

    容量

    ボリュームに要求するストレージ容量を宣言します。この値は、OSS 永続ボリュームの実際の容量を制限するものではありません。

    アクセスモード

    アクセスモードを設定します。ReadOnlyManyReadWriteMany がサポートされています。

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

ステップ 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. クラスター ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[ワークロード] > [Deployment] を選択します。

  2. [Deployment] ページで、[イメージから作成] をクリックします。

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

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

    設定ステップ

    パラメーター

    説明

    基本情報

    レプリカ

    Deployment のレプリカ数。

    コンテナー

    イメージ名

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

    必須リソース

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

    ボリューム

    [PVC の追加] をクリックし、パラメーターを構成します。

    • [マウントソース]:以前に作成した PVC を選択します。

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

    詳細設定

    Pod ラベル

    例えば、名前が app で値が nginx のラベル。

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

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

ステップ 5:共有ストレージと永続ストレージの検証

共有ストレージの検証

1 つの Pod でファイルを作成し、別の Pod でそれを表示して、共有ストレージ機能を検証します。

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

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

    • ReadWriteMany/data パスに tmpfile ファイルを作成します。

      kubectl exec oss-static-66fbb85b67-d**** -- touch /data/tmpfile
    • ReadOnlyManyOSS コンソールを使用するか、cp でファイルをアップロードして、tmpfile を OSS バケットの対応するパスにアップロードします。

  3. 別の 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 にファイルがまだ存在するかどうかを確認して、データの永続性を検証します。

  1. アプリケーション Pod を削除して再構築をトリガーします。kubectl delete pod oss-static-66fbb85b67-d****

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

    kubectl get pod -l app=nginx
  3. /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 はシーケンシャル読み書きシナリオでより優れたパフォーマンスを提供します。