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

Container Service for Kubernetes:ossfs 1.0 を使用して動的にプロビジョニングされた OSS ボリュームをマウントする

最終更新日:Jul 02, 2025

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 ボリュームをマウントしたことがある場合は、この手順をスキップしてください。

  1. ACK コンソール にログインし、RRSA を有効にします。詳細については、「RRSA を有効にする」をご参照ください。

  2. 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 ロールに権限を付与する

  1. RAM ユーザーに OSS アクセス権限を付与するカスタムポリシーを作成します。詳細については、「カスタムポリシーを作成する」をご参照ください。

    ビジネス要件に基づいて、読み取り専用ポリシーまたは読み書きポリシーを選択します。mybucket は、作成したバケットの名前に置き換えます。

    • OSS に対する読み取り専用権限を提供するポリシー

      クリックしてポリシーの内容を表示する

      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ]
              }
          ],
          "Version": "1"
      }
    • OSS に対する読み書き権限を提供するポリシー

      クリックしてポリシーの内容を表示する

      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ]
              }
          ],
          "Version": "1"
      }
  2. オプション。OSS バケット内のオブジェクトが Key Management Service (KMS) の指定されたカスタマーマスターキー (CMK) を使用して暗号化されている場合は、RAM ユーザーに KMS アクセス権限を付与する必要があります。詳細については、「暗号化」をご参照ください。

  3. 必要な権限を demo-role-for-rrsa ロールに付与します。詳細については、「RAM ロールに権限を付与する」をご参照ください。

    説明

    OSS アクセス権限を持つ既存の RAM ロールを使用する場合は、RAM ロールの信頼ポリシーを変更できます。詳細については、「既存の RAM ロールを使用し、必要な権限を RAM ロールに付与する」をご参照ください。

ステップ 3:StorageClass の作成

  1. 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 をリクエストするための署名バージョン。有効な値:

  2. 次のコマンドを実行して、StorageClass を作成します。

    kubectl apply -f sc-oss-rrsa.yaml

ステップ 4:PVC の作成

  1. 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 の名前。

  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            oss-rrsa             <unset>                 4d20h

ステップ 5:アプリケーションの作成

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

    kubectl apply -f oss-dynamic.yaml
  3. アプリケーションレプリカのステータスをクエリします。

    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 ユーザーに付与します。

  1. RAM ユーザーを作成します。既存の RAM ユーザーがいる場合は、この手順をスキップできます。RAM ユーザーの作成方法の詳細については、「RAM ユーザーを作成する」をご参照ください。

  2. RAM ユーザーに OSS アクセス権限を付与するカスタムポリシーを作成します。詳細については、「カスタムポリシーを作成する」をご参照ください。

    ビジネス要件に基づいて、読み取り専用ポリシーまたは読み書きポリシーを選択します。mybucket は、作成したバケットの名前に置き換えます。

    • OSS に対する読み取り専用権限を提供するポリシー

      クリックしてポリシーの内容を表示する

      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ]
              }
          ],
          "Version": "1"
      }
    • OSS に対する読み書き権限を提供するポリシー

      クリックしてポリシーの内容を表示する

      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ]
              }
          ],
          "Version": "1"
      }
  3. オプション。OSS バケット内のオブジェクトが Key Management Service (KMS) の指定されたカスタマーマスターキー (CMK) を使用して暗号化されている場合は、RAM ユーザーに KMS アクセス権限を付与する必要があります。詳細については、「暗号化」をご参照ください。

  4. RAM ユーザーに OSS アクセス権限を付与します。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

  5. RAM ユーザーの AccessKey ペアを作成します。詳細については、「AccessKey ペアの作成」をご参照ください。

ステップ 2:StorageClass と PVC を作成し、StorageClass と PVC を使用して OSS バケットをアプリケーションにマウントする

ACK コンソールの使用

1. StorageClass の作成

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

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のペインで、[ボリューム] > [StorageClass] を選択します。

  3. [StorageClass] ページで、[作成] をクリックします。

  4. 表示されるダイアログボックスで、パラメーターを構成し、[作成] をクリックします。

    パラメーター

    説明

    [名前]

    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 の作成

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

  2. [永続ボリュームクレーム] ページの右上隅にある [作成] をクリックします。

  3. 表示されるダイアログボックスで、パラメーターを設定し、[作成] をクリックします。

    パラメーター

    説明

    PVC タイプ

    OSS を選択します。

    OSS

    名前

    PVC の名前。

    pvc-oss

    割り当てモード

    この例では、[StorageClass を使用する] が選択されています。

    Use StorageClass

    既存の StorageClass

    1. リソースグループを作成する注:アクション をクリックします。使用する PV を見つけ、[アクション] 列の をクリックします。

    Select StorageClass

    容量

    アプリケーションの再利用容量。このパラメーターの値は、アプリケーションで使用できる最大容量の制限を指定するものではありません。

    20Gi

    アクセスモード

    アクセスモード。有効な値:ReadOnlyMany および ReadWriteMany。

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

    ReadOnlyMany

3. アプリケーションを作成する

  1. [クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、[ワークロード] > [デプロイメント] を選択します。

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

  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.

    image.png

  4. 次のコマンドを実行して、アプリケーションのデプロイの進行状況をクエリします。

    1. [デプロイメント] ページで、作成したアプリケーションの名前をクリックします。

    2. [ポッド] タブで、ポッドが [実行中] 状態であるかどうかを確認します。

kubectl を使用する

1. StorageClass を作成する

  1. シークレットは、PV を使用するアプリケーションがデプロイされている名前空間に作成する必要があります。

    akId パラメーターと akSecret パラメーターを、前の手順で取得した AccessKey ID と AccessKey シークレットに置き換えます。

    kubectl create secret generic oss-secret --from-literal='akId=<yourAccessKey ID>' --from-literal='akSecret=<yourAccessKey Secret>'
  2. 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 をリクエストするための署名バージョン。有効な値:

2. PVC を作成する

PVC を作成する操作は、「RRSA 認証を使用して動的にプロビジョニングされた OSS ボリュームをマウントする」セクションの操作と同じです。詳細については、「手順 4: StorageClass を作成する」をご参照ください。

3. アプリケーションを作成する

アプリケーションを作成する操作は、「RRSA 認証を使用して動的にプロビジョニングされた OSS ボリュームをマウントする」セクションの操作と同じです。詳細については、「手順 5: アプリケーションを作成する」をご参照ください。

OSS ボリュームでデータの永続化と共有ができるかどうかの確認

  1. 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
  2. ポッドを 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 バケットの対応するパスにアップロードします。

  3. 各ポッドにログオンし、マウントパス内のファイルにアクセスします。

    この例では、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」をご参照ください。

  4. ポッドを再作成します。

    kubectl delete pod oss-dynamic-68f4945c46-h****

    期待される出力:

    pod "oss-dynamic-68f4945c46-h****" deleted
  5. ポッドの削除後もファイルが OSS バケットに存在することを確認します。

    1. 再作成されたポッドの名前をクエリします。

      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
    2. ポッドの /data パス内のファイルをクエリします。

      kubectl exec oss-dynamic-68f4945c46-z**** -- ls /data | grep tmpfile

      期待される出力:

      tmpfile

      この出力は、tmpfile ファイルがまだ存在することを示しています。これは、OSS ボリュームがデータを永続化できることを意味します。

参照資料