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

:CNFS を使用した NAS ボリュームの自動スケールアウト

最終更新日:Mar 27, 2026

Container Network File System (CNFS) の自動スケーリングを使用すると、一度ポリシーを定義するだけで、storage-operator が NAS ボリュームの使用量を監視し、使用量がしきい値を超えると自動的に容量を拡張します。コード変更、手動介入、ストレージレベルの自己監視は不要です。

仕組み

自動スケーリングワークフローは、storage-operator コンポーネントによって完全に処理されます。

image
  1. ポリシーの定義。 ターゲット PersistentVolumeClaim (PVC)、トリガー条件、およびスケールアウトアクションを指定する StorageAutoScalerPolicy リソースを作成します。

    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 コンポーネントの管理」をご参照ください。

  • cnfs-controller がインストールされていること。これはデフォルトでインストールされるマネージドコンポーネントです。アンインストールされていないことを確認してください。

  • Available ステータスの CNFS があること。作成するには、「CNFS を使用した NAS ファイルシステムの管理」をご参照ください。

storage-operator のバージョンが v1.33.1 より前の場合: 続行する前に、次のコマンドを実行して 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 ステータスを確認するには:

# すべての CNFS オブジェクトを一覧表示します
kubectl get cnfs

# 特定の CNFS のステータスを確認します
kubectl get cnfs <CNFS_NAME> -o yaml | grep Available

予想される出力:

NAME                                      AGE
default-cnfs-nas-837d6ea-20210819155623   14d
status: Available

ステップ 1: スケールアウトポリシーの定義

StorageAutoScalerPolicy リソースを作成して、storage-operator が NAS ボリュームをいつ、どのように拡張するかを指定します。

次の例では、app: nginx というラベルが付いた PVC ( default または nginx 名前空間内) の容量使用量が 80% を超えたときにスケールアウトをトリガーします。各拡張は現在の容量を倍増させ、最大 200 GiB まで拡張します。

cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1alpha1
kind: StorageAutoScalerPolicy
metadata:
  name: hybrid-expand-policy
spec:
  # ラベルセレクターで PVC を照合します。
  pvcSelector:
    matchLabels:
      app: nginx  # PVC および Deployment のラベルと一致する必要があります。
  # このポリシーが適用される名前空間。
  namespaces:
    - default
    - nginx
  # スケールアウトをトリガーする条件。
  conditions:
    - name: condition1
      key: volume-capacity-used-percentage  # メトリック: 容量使用率。
      operator: Gt                          # より大きい。
      values:
        - "80"                              # しきい値: 80%。
  # 条件が満たされたときに実行するアクション。
  actions:
    - name: action1
      type: volume-expand
      params:
        scale: 100%    # 現在のサイズの 100% で容量を増やします。
        limits: 200Gi  # 合計容量を 200 GiB に制限します。
EOF

ポリシーパラメーター:

パラメーター 説明
pvcSelector このポリシーが適用される PVC と一致するラベルセレクター。
namespaces ポリシーがアクティブな名前空間。複数の名前空間は OR ロジックを使用します。設定されていない場合、デフォルトは default です。
conditions 1 つ以上のトリガー条件。複数の条件は AND ロジックを使用します。ポリシーがトリガーされる前にすべて満たされる必要があります。
actions 条件が満たされたときに実行するアクション。システムは最初の一致するアクションを実行します。

conditions パラメーター:

パラメーター 説明
key volume-capacity-used-percentage 使用済み容量がしきい値を超えたときにトリガーされます。
volume-capacity-free-size 空き領域がしきい値を下回ったときにトリガーされます。
volume-capacity-pvc-size 元の要求された容量 (pvc.spec.resources.requests.storage) がしきい値を下回ったときにトリガーされます。
operator GtLtEqNe 比較演算子。大文字と小文字は区別されません。
values 数値文字列 条件のしきい値。

actions パラメーター:

パラメーター 説明
type アクションタイプ。現在、volume-expand のみがサポートされています。
scale 拡張ステップサイズ。パーセンテージ (例: 50%) または静的値 (例: 100Gi) を使用します。
limits 拡張後の最大合計容量。コストを制御し、暴走的な増加を防ぐためにこれを設定します。

ステップ 2: StorageClass の作成

既存の CNFS NAS ファイルシステムを参照する StorageClass を作成します。allowVolumeExpansion: true を設定します。これは、自動スケーリングポリシーが使用量を計算するために使用する容量ベースラインを確立します。

cat << EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-cnfs-nas  # 次のステップで PVC で参照されます。
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
  volumeAs: subpath
  # 形式: <nas-server-address>:/<path>
  server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
  archiveOnDelete: "true"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
allowVolumeExpansion: true  # 自動スケーリングに必要です。
EOF

StorageClass パラメーターの完全なリストについては、「CNFS を使用して NAS ファイルシステムを管理する」をご参照ください。

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

ポリシーの pvcSelector.matchLabels (app: nginx) と一致するラベルを持つ PVC と Deployment を作成します。storage-operator はこれらのラベルを使用して、ポリシーを正しい PVC に関連付けます。

cat << EOF | kubectl apply -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cnfs-nas-pvc
  labels:
    app: nginx  # ポリシーの pvcSelector.matchLabels と一致する必要があります。
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: alibabacloud-cnfs-nas  # 以前に作成した StorageClass を参照します。
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-nas-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx  # ポリシーの pvcSelector.matchLabels と一致する必要があります。
  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. Pod が実行中であることを確認します。

    kubectl get pods -l app=nginx

    予想される出力:

    NAME                                       READY   STATUS    RESTARTS   AGE
    cnfs-nas-deployment-56dbcc7fb7-wh79z       1/1     Running   0          20m
  2. データを書き込む前に、初期 PVC 容量を記録します。

    kubectl get pvc cnfs-nas-pvc

    予想される出力 (初期状態、20 GiB):

    NAME           STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS             AGE
    cnfs-nas-pvc   Bound    ...          20Gi       RWX            alibabacloud-cnfs-nas    2m
  3. 20 GiB のテストデータを書き込み、使用量を 80% のしきい値以上に押し上げます。

    書き込み操作は、ネットワークスループットとストレージパフォーマンスに応じて数分かかる場合があります。
    kubectl exec -it <POD_NAME> -- dd if=/dev/zero of=/data/testfile bs=1G count=20
  4. スケールアウトによって生成されたイベントを確認します。

    kubectl get events | grep cnfs-nas-pvc

    StartExpand および VolumeResizeSuccessful イベントは、拡張が完了したことを確認します。この例では、PVC は 20 GiB から 40 GiB にスケールしました (100% 増加)。

    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 cnfs-nas-pvc
  5. (オプション) CSI NAS モニタリングダッシュボードで利用傾向を表示します。この例では、スケールアウトは 10:23:30 にトリガーされ、拡張後の容量は 100 GiB です。

    Alibaba Cloud Prometheus Monitoring が必要です。詳細については、「Alibaba Cloud Prometheus Monitoring」をご参照ください。
    1. [クラスター] ページで、クラスター名をクリックします。左側のナビゲーションウィンドウで、[運用] > [Prometheus モニタリング] を選択します。

    2. [Storage Monitoring] タブをクリックし、次に [CSI NAS] をクリックします。

    3. [名前空間] を [デフォルト] に設定し、[PVC 名] を cnfs-nas-pvc に設定すると、[合計容量] エリアで容量を表示できます。

    NAS存储卷容量

ベストプラクティス

本番環境で NAS ボリュームの自動スケーリングを使用する際に、これらの推奨事項を適用します。

ディメンション ガイダンス
コスト管理 スケールアウトポリシーで limits を設定し、合計容量を制限します。非常に大きなボリュームの場合、より予測可能なコスト管理のために、パーセンテージの代わりに静的な scale 値 (例: 200Gi) を使用します。
しきい値のチューニング トリガーしきい値を 75% から 80% の間に設定します。95% 以上のしきい値では、ボリュームの空き容量がなくなる前に拡張が完了するのに十分な時間がありません。
モニタリング コンテナストレージモニタリングを有効にし、ストレージメトリックのアラート機能のために Alibaba Cloud Prometheus Monitoring を設定します。詳細については、「コンテナストレージモニタリング」および「Alibaba Cloud Prometheus Monitoring の設定」をご参照ください。
詳細なポリシー アプリケーションまたは環境ごとに個別の StorageAutoScalerPolicy オブジェクトを作成し、容量を個別に管理します。
パフォーマンス 自動スケーリングは容量の制約に対処するものであり、パフォーマンスボトルネックではありません。IOPS 制限や多数の小さなファイル操作によりアプリケーションが遅い場合は、より高性能な NAS ティアを選択してください。