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

Container Service for Kubernetes:CNFSを使用してNASボリュームを自動的に拡張する

最終更新日:Sep 30, 2024

Container Network File System (CNFS) によって管理されるApsara File Storage NAS (NAS) ボリュームの自動拡張ポリシーを定義して、ストレージ使用量が特定のしきい値を超えたときにNASボリュームを自動的に拡張できます。 このトピックでは、CNFSを使用してNASボリュームを自動的に拡張する方法について説明します。

前提条件

  • Container Service for Kubernetes (ACK) が作成されました。 Container Storage Interface (CSI) プラグインは、クラスタのボリュームプラグインとして使用されます。

    • 新しいクラスターを使用する場合は、クラスターを作成するときに、[CSIボリュームプラグイン] と [デフォルトのNASファイルシステムとCNFSを使用してボリュームを動的にプロビジョニングする] 、[NASごみ箱を有効にし、高速データ復元をサポートする] オプションを選択します。

    • 既存のクラスターを使用し、デフォルトのNASファイルシステムとCNFSを使用してボリュームを動的にプロビジョニングし、NASごみ箱を有効にし、クラスターの作成時に高速データ復元をサポートするオプションが選択されていない場合は、CNFSを使用してNASファイルシステムを管理できます。 詳細については、「CNFSを使用したNASファイルシステムの管理」をご参照ください。

  • csi-pluginとcsi-provisionerのバージョンは1.20.5 ff6490f-aliyun以降です。 csi-pluginおよびcsi-provisionerを更新する方法の詳細については、「csi-pluginおよびcsi-provisionerの更新」をご参照ください。

  • csi-pluginのデフォルトのdnsPolicyClusterFirstです。 CNFSを使用してNASボリュームを自動的に拡張する場合は、デフォルトのdnsPolicyをClusterFirstからClusterFirstWithHostNetに変更する必要があります。

  • storage-operatorのバージョンは1.18.8.56-2aa33ba-aliyun以降です。 詳細は、「storage-operator」をご参照ください。

  • kubectlクライアントがクラスターに接続されています。

ステップ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\"}"}}'

ステップ2: 自動拡張ポリシーの設定

  1. CNFSオブジェクトのステータスを表示します。 CNFSオブジェクトの状態がAvailableであることを確認します。

    1. 次のコマンドを実行してCNFSオブジェクトを照会します。

      kubectl get cnfs

      期待される出力:

      NAME                                      AGE
      default-cnfs-nas-837d6ea-20210819155623   14d
    2. 次のコマンドを実行して、CNFSオブジェクトのステータスを表示します。

      kubectl get cnfs <The CNFS object queried in the previous step> -o yaml | grep Available

      期待される出力:

      status: Available
  2. 次のYAMLテンプレートを使用して、NASボリュームの自動拡張ポリシーを作成します。

    cat << EOF | kubectl apply -f -
    apiVersion: storage.alibabacloud.com/v1alpha1
    kind: StorageAutoScalerPolicy
    metadata:
      name: hybrid-expand-policy
    spec:
      pvcSelector:
        matchLabels:
          app: nginx      # You must specify the label that is added to the persistent volume claim (PVC) and the Deployment to which the NAS volume is mounted. In this example, app: nginx is specified. 
      namespaces:
        - default
        - nginx
      conditions:
        - name: condition1
          key: volume-capacity-used-percentage
          operator: Gt
          values:
            - "80"
      actions:
        - name: action1
          type: volume-expand
          params:
            scale: 100%
            limits: 500Gi
    EOF

    パラメーター

    説明

    pvcSelector

    拡張ポリシーをNASボリュームのマウントに使用されるPVCと一致させるために使用されるラベル。 この例では、nginxが使用されます。

    名前空間

    NASボリュームのマウントに使用されるPVCの名前空間。 複数の名前空間を指定した場合, 名前空間間の論理演算子はORです。 デフォルト値: Default。 この例では、defaultnginxが指定されています。

    条件

    アクションをトリガーする条件。 複数の条件間の論理演算子はANDです。 各条件には、次のパラメータが含まれます。

    • key: メトリックのタイプ。

    • volume-capacity-used-percentage: ストレージ使用量のしきい値をパーセンテージで表すことを指定します。

    • 演算子: Gt (より大きい) 、Lt (より小さい) 、Eq (等しい) 、またはNe (等しくない) とすることができる演算子。 パラメーター値は大文字と小文字を区別しません。

    • values: しきい値。

    この例では、条件は、PVCのストレージ使用率が80% を超えたときにアクションがトリガーされることを指定します。

    アクション

    上記の条件が満たされたときに実行されるアクション。 複数のアクションが許可されます。 各アクションには以下のパラメータが含まれます。

    • type: アクションのタイプ。 ボリューム拡張のみがサポートされています。

    • scale: ボリュームに追加するストレージのサイズ。 有効な単位: GiBとパーセンテージ (%) 。

    • limits: アクションが実行された場合のPVCの最大容量。

    actionsセクションで複数のアクションが指定されている場合、条件が満たされている最初のアクションが実行されます。 その他のアクションはスキップされます。

    この例では、action1は、条件が満たされた場合、NASボリュームが100% 拡張されることを指定します。 NASボリュームは最大500 GiBまで拡張できます。

  3. 次のYAMLテンプレートを使用して、PVCとデプロイを作成します。

    重要

    自動拡張ポリシーは、指定されたラベルを持つPVCと展開に適用されます。 この例では、自動拡張ポリシーでpvcSelector.matchLabelsapp: nginxに設定されています。 この場合、ポリシーは、labelsパラメーターがapp: nginxに設定されているPVCとDeploymentに適用されます。

    cat << EOF | kubectl apply -f -
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: cnfs-nas-pvc
      labels:
        app: nginx   # You must specify the same value as the pvcSelector.matchLabels parameter in the YAML template of the expansion policy. In this example, app: nginx is specified. 
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: alibabacloud-cnfs-nas
      resources:
        requests:
          storage: 50Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cnfs-nas-deployment
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx   # You must specify the same value as the pvcSelector.matchLabels parameter in the YAML template of the expansion policy. In this example, app: nginx is specified. 
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            volumeMounts:
            - mountPath: "/data"
              name: cnfs-nas-pvc
          volumes:
          - name: cnfs-nas-pvc
            persistentVolumeClaim:
              claimName: cnfs-nas-pvc
    EOF

ステップ3: NASボリュームが自動的に拡張できることを確認する

  1. 次のコマンドを実行して、default名前空間のすべてのポッドを照会します。

    kubectl get pod

    期待される出力:

    NAME                                                            READY   STATUS    RESTARTS   AGE
    cnfs-nas-deployment-56dbcc7fb7-wh79z   1/1      Running            0          20m
  2. 次のコマンドを実行して、アプリケーションポッドにログインします。

    kubectl exec cnfs-nas-deployment-56dbcc7fb7-wh79z -ti sh
  3. 次のコマンドを実行して、NASボリュームがマウントされているディレクトリに50 GiBのデータを書き込みます。

    cd /data
    dd if=<data path> of=<mounted path>
  4. 次のコマンドを実行して、ボリューム拡張に関連するイベントを確認します。

    kubectl get events

    期待される出力:

    default    0s    Warning   NotEnoughDiskSpace           persistentvolumeclaim/cnfs-nas-pvc              Pvc cnfs-nas-pvc is not enough disk space, namespace: default, totalSize:50Gi, usedSize:49Gi, usedPercentage:98.00%, threshold:85.00%
    default    1s    Warning   StartExpand                  persistentvolumeclaim/cnfs-nas-pvc              Start to expand of pvc cnfs-nas-pvc from 50Gi to 100Gi, usedCapacityPercentage:98%, freeSize:1024MB.
    default    0s    Normal    Resizing                     persistentvolumeclaim/cnfs-nas-pvc              External resizer is resizing volume nas-1acba306-e626-46f3-8441-110c10a6****
    default    0s    Warning   ExternalExpanding            persistentvolumeclaim/cnfs-nas-pvc              Ignoring the PVC: didn't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC.
    default    0s    Normal    FileSystemResizeRequired     persistentvolumeclaim/cnfs-nas-pvc              Require file system resize of volume on node
    default    0s    Normal    FileSystemResizeSuccessful   pod/cnfs-nas-deployment-56dbcc7fb7-wh79z        MountVolume.NodeExpandVolume succeeded for volume "nas-1acba306-e626-46f3-8441-110c10a6****"

    上記の出力は、NASボリュームのストレージ使用量が80% を超えたことを示しています。 NASボリュームは50 GiBから100 GiBに拡張されます。

  5. CSIノードダッシュボードでCNFSに関するモニタリング情報を確認します。

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

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[操作] > [Prometheusモニタリング] を選択します。

    3. Prometheusモニタリングページで、ストレージモニタリングタブをクリックし、CSI-ノードタブをクリックします。

    4. [CSI-ノード] タブで、NASボリュームに基づいて [StorageType][名前空間] を設定し、NASボリュームのマウントに使用するPVCを選択します。 次に、[合計容量] チャートでNASボリュームの容量を確認できます。

      この例では、StorageTypenas名前空間defaultPvccnfs-nas-pvcに設定します。 NAS存储卷容量

      上のグラフは、16:55:30に拡張が発生し、NASボリュームが100 GiBに拡張されたことを示しています。