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

Container Service for Kubernetes:NAS 永続ボリュームの CNFS による自動スケールアウト

最終更新日:Feb 11, 2026

NAS 永続ボリュームの手動でのスケールアウトには、人間による介入が必要です。Container Network File System (CNFS) の自動スケーリング機能は、より効率的です。ストレージ使用量がしきい値に達したときに、自動的にスケールアウトをトリガーするポリシーを設定できます。これにより、弾力的な容量管理が実現されます。

仕組み

NAS 永続ボリュームの自動スケーリングは、storage-operator コンポーネントによって処理され、ビジネスコードの変更は不要です。コアワークフローは次のとおりです。

image
  1. ポリシーの定義: storage-operator にスケールアウトの指示を提供するために、StorageAutoScalerPolicy リソースを作成します。ポリシーには、ターゲット PersistentVolumeClaim (PVC)、トリガー条件、およびスケールアウトアクションが含まれます。

    PVC で使用される StorageClass には、allowVolumeExpansion: true が構成されている必要があります。
  2. 継続的なモニタリング: storage-operator は、ポリシーに基づいてターゲット PVC のリアルタイムストレージ使用量を継続的にモニタリングします。

  3. スケールアウトのトリガー: トリガー条件が満たされると、storage-operator は自動的に PVC にスケールアウト要求を送信します。

  4. スケールアウトの実行: 要求は Container Storage Interface (CSI) ドライバーによって処理されます。その後、基盤となる Alibaba Cloud NAS サービスが実際のファイルシステムのスケールアウト操作を実行します。

  5. ステータスの同期: スケールアウトが完了すると、PVC のステータスは新しい容量を反映するように自動的に更新されます。

適用範囲

  • ストレージコンポーネントは、次の要件を満たしている必要があります。

    • csi-plugin および csi-provisioner: バージョン v1.20.5-ff6490f-aliyun 以降。

      コンポーネントをアップグレードするには、「CSI コンポーネントのアップグレード」をご参照ください。
    • storage-operator: バージョン v1.18.8.56-2aa33ba-aliyun 以降。

      コンポーネントをアップグレードするには、「storage-operator コンポーネントの管理」をご参照ください。

      v1.33.1 より前の storage-operator バージョンを使用している場合は、自動スケーリング機能を有効にするために ConfigMap を手動で変更する必要もあります。

      [詳細を表示]

      storage-operator の ConfigMap を変更してこの機能をデプロイおよび有効にするには、次のコマンドを実行します。

      kubectl patch configmap/storage-operator \
        -n kube-system \
        --type merge \
        -p '{"data":{"storage-auto-expander":"{\"imageRep\":\"acs/storage-auto-expander\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-auto-expander/install.yaml\",\"type\":\"deployment\"}"}}'
    • cnfs-controller: コンポーネントがインストールされています。

      これはデフォルトでインストールされるマネージドコンポーネントです。アンインストールされていないことを確認してください。
  • CNFS が作成され、そのステータスが Available です。詳細については、「CNFS を使用した NAS ファイルシステムの管理」の CNFS の作成に関するセクションをご参照ください。

    [CNFS ステータスの照会]

    1. CNFS オブジェクトを表示します。

      kubectl get cnfs

      期待される出力:

      NAME                                      AGE
      default-cnfs-nas-837d6ea-20210819155623   14d
    2. CNFS オブジェクトのステータスを表示します。

      kubectl get cnfs <CNFS_NAME> -o yaml | grep Available

      期待される出力:

      status: Available

ステップ 1: NAS 永続ボリュームのスケールアウトポリシーの定義

スケールアウトポリシーの定義は、自動スケーリングの中心です。このステップでは、トリガー条件とスケールアウト動作を指定するポリシーを作成します。

次の YAML テンプレートを使用して、StorageAutoScalerPolicy を作成します。

このポリシーは、default または nginx 名前空間内の app: nginx というラベルが付いた PVC の容量使用量が 80% を超えたときに、自動スケーリング操作をトリガーします。各スケールアウトは、現在の容量を 100% 増加させ、最大 200 GiB まで拡張します。
cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1alpha1
kind: StorageAutoScalerPolicy
metadata:
  name: hybrid-expand-policy
spec:
   # Apply this policy to matching PVCs using a label selector.
  pvcSelector:
    matchLabels:
      app: nginx  # Must be the same as the labels configured for the PVC and deployment.
   # The namespaces where the policy takes effect.
  namespaces:
    - default
    - nginx
   # The conditions that trigger a scale-out.
  conditions:
    - name: condition1
      key: volume-capacity-used-percentage  # Monitoring metric: capacity usage percentage.
      operator: Gt  # Comparison operator: Gt (Greater than).
      values:
        - "80"   # Threshold: 80%.
   # The actions to perform when the conditions are met.
  actions:
    - name: action1
      type: volume-expand  # Action type: scale out.
      params:
        scale: 100%   # Scaling step size: Increase by 100% of the current capacity.
        limits: 200Gi   # Capacity limit: The total capacity after scaling out cannot exceed 200 GiB.
EOF

パラメーター

説明

pvcSelector

ラベルセレクターを使用して、このスケールアウトポリシーが適用される PVC と一致させます。

namespaces

ポリシーが有効になる名前空間のリストです。複数の名前空間には OR ロジックが適用されます。このパラメーターが構成されていない場合、デフォルト値は `default` です。

conditions

1 つ以上の条件付きステートメント (condition) で構成されるトリガールールです。複数の condition ステートメントには AND ロジックが適用されます。このルールは、すべての condition ステートメントが満たされた場合にのみトリガーされます。

  • key: モニタリングメトリックの種類。

    • volume-capacity-used-percentage: 使用済み容量のパーセンテージ。この条件は、永続ボリュームの実際の使用済み容量のパーセンテージが指定されたしきい値を超えた場合に満たされます。

    • volume-capacity-free-size: 空き領域の量。この条件は、永続ボリュームの空き領域が指定されたしきい値よりも少ない場合に満たされます。

    • volume-capacity-pvc-size: PVC の要求された容量。この条件は、PVC の元の要求された容量 (pvc.spec.resources.requests.storage) が指定されたしきい値よりも少ない場合に満たされます。

  • operator: 比較演算子。サポートされている値は、Gt (より大きい)、Lt (より小さい)、Eq (等しい)、Ne (等しくない) です。値は大文字と小文字を区別しません。

  • values: ルールの特定の値。

actions

条件が満たされたときに実行する操作のリストです。システムは、条件を満たす最初の操作を実行します。

  • type: 操作の種類。現在、volume-expand (スケールアウト) のみがサポートされています。

  • scale: 拡張のステップサイズ。値は、100Gi のような静的フィールド、または 50% のようなパーセンテージにすることができます。

  • limits: 容量制限。スケールアウト後の PVC の総容量は、この値を超えることはできません。コストを管理するために、このパラメーターを設定することを推奨します。

ステップ 2: StorageClass の作成

既存の NAS ファイルシステムに基づいて永続ボリュームを動的に作成するためのストレージテンプレートを定義するために、StorageClass を作成します。永続ボリューム (PV) の明確な容量ベースラインを提供するために、allowVolumeExpansion パラメーターを true に設定する必要があります。自動スケーリングポリシーは、このベースラインに依存して使用量を計算します。

cat << EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-cnfs-nas  # The name of the StorageClass. It will be referenced in the PVC later.
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
  volumeAs: subpath
  # The server field format is <nas-server-address>:/<path>.
  server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
  archiveOnDelete: "true"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# Must be set to true to enable volume expansion. This is a prerequisite for the auto-scaling feature.
allowVolumeExpansion: true
EOF
パラメーターの詳細については、「CNFS を使用した NAS ファイルシステムの管理」をご参照ください。

ステップ 3: アプリケーションと関連 PVC のデプロイ

ポリシーを作成したら、ポリシーを対応する PVC に関連付けるために、一致するラベルを持つアプリケーションをデプロイする必要があります。

次の YAML テンプレートを使用して、PVC と Deployment を作成します。両方のオブジェクトの labels (app: nginx) が、ポリシーの pvcSelector.matchLabels 構成と正確に一致していることを確認してください。

cat << EOF | kubectl apply -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cnfs-nas-pvc
  labels:
    app: nginx   # Must be the same as the pvcSelector.matchLabels configuration in the scale-out policy.
spec:
  accessModes:
    - ReadWriteMany
  # Reference the StorageClass created earlier.
  storageClassName: alibabacloud-cnfs-nas
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-nas-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx  # Must be the same as the pvcSelector.matchLabels configuration in the scale-out policy.
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
        volumeMounts:
        - mountPath: "/data"
          name: cnfs-nas-pvc
      volumes:
      - name: cnfs-nas-pvc
        persistentVolumeClaim:
          claimName: cnfs-nas-pvc
EOF

ステップ 4: 自動スケーリング結果の確認

ポリシーがデプロイされたら、アナログデータを書き込んでスケールアウトをトリガーします。その後、関連イベントとモニタリングメトリックを監視して、ポリシーが有効であることを確認します。

  1. default 名前空間内のすべての Pod を表示します。

    kubectl get pods -l app=nginx

    期待される出力:

    NAME                                                            READY   STATUS    RESTARTS   AGE
    cnfs-nas-deployment-56dbcc7fb7-wh79z   1/1      Running            0          20m
  2. アプリケーション Pod にログインし、マウントされたディレクトリに 20 GiB のテストデータを書き込みます。これにより、ストレージ使用量が 80% のしきい値を超えます。

    書き込み操作には、ネットワークスループットやバックエンドストレージパフォーマンスなどの要因に応じて、時間がかかる場合があります。
    kubectl exec -it <POD_NAME> -- dd if=/dev/zero of=/data/testfile bs=1G count=20
  3. スケールアウトをトリガーしたイベントを表示します。

    kubectl get events | grep cnfs-nas-pvc

    スケールアウトがトリガーされると、システムは関連イベントを生成します。期待される出力には、StartExpandVolumeResizeSuccessful などのイベントが含まれるはずです。これらのイベントは、スケールアウトが正常にトリガーおよび完了し、容量が 20 GiB から 40 GiB にスケールアウトされたことを示します。

    12s         Warning   StartExpand                  persistentvolumeclaim/cnfs-nas-pvc          Start to expand of pvc cnfs-nas-pvc from 20Gi to 40Gi, usedCapacityPercentage:99%, freeSize:204MB.
    12s         Normal    ExternalExpanding            persistentvolumeclaim/cnfs-nas-pvc          waiting for an external controller to expand this PVC
    12s         Normal    Resizing                     persistentvolumeclaim/cnfs-nas-pvc          External resizer is resizing volume nas-462db2b2-717d-44fe-b0b6-fb4db03a****
    12s         Normal    VolumeResizeSuccessful       persistentvolumeclaim/cnfs-nas-pvc          Resize volume succeeded

    kubectl get pvc を実行して、PVC の容量が更新されたかどうかを確認することもできます。

  4. CSI NAS モニタリングダッシュボードで永続ボリュームの使用状況情報を表示します。

    Alibaba Cloud Prometheus Monitoring を有効にする必要があります。
    1. [Prometheus Monitoring] ページで、[Storage Monitoring] タブをクリックし、次に [CSI NAS] タブをクリックします。

    2. [CSI NAS] ダッシュボードで、NAS 永続ボリュームが配置されている [名前空間] および [PVC 名] を選択します。その後、[合計容量] エリアで NAS 永続ボリュームの現在の容量を表示できます。

      この例では、[Namespace]default に、[PVC]cnfs-nas-pvc に設定します。NAS存储卷容量

      上記の図は、スケールアウトが 10:23:30 にトリガーされ、スケールアウト後の容量が 100 GiB であることを示しています。

本番環境での推奨事項

本番環境で NAS 永続ボリュームの自動スケーリング機能をより効果的に使用するには、次のベストプラクティスに従ってください。

ディメンション

説明

コスト最適化

  • 容量制限の設定: スケールアウトポリシーの actions で、ビジネス例外や構成エラーによる無制限の容量増加を防ぐために、limits に適切な値を設定します。

  • 適切な拡張のステップサイズを設定します:scale パラメーターは、パーセンテージまたは静的容量値をサポートします。非常に大規模な永続ボリュームの場合、200 Gi などの静的フィールドを使用すると、50% などのパーセンテージを使用する場合と比較して、より正確なコスト制御が可能になります。

ポリシーと信頼性

  • 安全バッファーを確保する: conditions のスケールアウトのしきい値を 95% のように高すぎないように設定しないでください。75% ~ 80% の範囲に設定することを推奨します。これにより、システムがスケールアウト プロセスを完了するための時間と容量が確保され、スケールアウト完了前に空き容量不足によってアプリケーションが障害を起こすことを防ぎます。

  • モニタリングとアラート: コンテナーのストレージモニタリングを有効にし、メトリックに基づいてモニタリングダッシュボードを表示し、Alibaba Cloud Prometheus Monitoring に接続して構成します。

  • 詳細な管理: 異なるアプリケーションまたは環境に対して異なる StorageAutoScalerPolicy オブジェクトを作成し、詳細でシナリオベースの容量管理を実装します。

パフォーマンスに関する考慮事項

容量とパフォーマンスのバランス: 自動スケーリングは容量の問題を解決しますが、パフォーマンスボトルネックは解決しません。1 秒あたりの入出力操作 (IOPS) や多数の小さなファイルの読み書き操作が原因でアプリケーションの速度が低下する場合は、より高いパフォーマンスを持つ NAS タイプを選択することを検討してください。