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

Container Service for Kubernetes:ディスクボリュームを自動的に拡張する (パブリックプレビュー)

最終更新日:Dec 11, 2024

ビジネスの発展やアプリケーションデータの拡大に伴い、ディスク容量が不足する場合があります。 この問題を解決するには、ディスクボリュームの使用率が指定されたしきい値を超えたときに自動的にディスクボリュームを拡張する1つ以上の拡張ポリシーを定義します。 このトピックでは、ディスクボリュームを自動的に拡張する方法について説明します。

前提条件

使用上の注意

  • Kubernetes 1.16以降を実行するACKクラスターのみがサポートされます。 ディスクは拡張できますが、ディスクは縮小できません。

  • 展開できるのは、ポッドにマウントされているディスクのみです。

  • サイズ変更可能なディスクのみを展開できます。 詳細は、「ResizeDisk」をご参照ください。

  • 2つの拡張操作の最大間隔は2分です。 ディスクの拡張プロセスには1分かかります。 3分以内にディスクスペースを使い果たさないようにしてください。

  • ディスクの最大容量は2,000 GiBです。

ステップ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. StorageClassで自動拡張ポリシーを設定します。

    各ACKクラスターにalicloud-disk-topology-alltype StorageClassを作成することを推奨します。 StorageClassは、ディスクタイプを自動的に選択して、インスタンスタイプの制限または指定されたゾーンのディスクストック不足によるディスク作成の失敗を回避できます。

    クラスターが以前のバージョンのKubernetesを実行している場合、次の方法を使用してalicloud-disk-topology-alltype StorageClassを手動で作成できます。

    1. 次のテンプレートを使用して、という名前のファイルを作成します。storageclass.yaml.

      allowVolumeExpansion: true
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: alicloud-disk-topology-alltype
      parameters:
        type: cloud_essd,cloud_ssd,cloud_efficiency
      provisioner: diskplugin.csi.alibabacloud.com
      reclaimPolicy: Delete
      volumeBindingMode: WaitForFirstConsumer
    2. 次のコマンドを実行してStorageClassを作成します。

      kubectl create -f storageclass.yaml
  1. カスタムリソース定義 (CRD) を使用して、自動拡張ポリシーを作成します。

    1. 次のテンプレートを使用して、StorageAutoScalerPolicy.yamlという名前のファイルを作成します。

      apiVersion: storage.alibabacloud.com/v1alpha1
      kind: StorageAutoScalerPolicy
      metadata:
        name: hybrid-expand-policy
      spec:
        pvcSelector:
          matchLabels:
            app: mysql
        namespaces:
          - default
          - mysql
        conditions:
          - name: condition1
            key: volume-capacity-used-percentage
            operator: Gt
            values:
              - "80"
        actions:
          - name: action1
            type: volume-expand
            params:
              scale: 50Gi
              limits: 100Gi
          - name: action2
            type: volume-expand
            params:
              scale: 50%
              limits: 300Gi

      パラメーター

      説明

      pvcSelector

      ラベルに基づいて永続ボリュームクレーム (PVC) を選択します。 この例では、mysqlが使用されています。

      名前空間

      PVCの名前空間を指定します。 複数の名前空間を指定した場合, 名前空間間の論理演算子はORです。 デフォルト値: Default。 この例では、defaultmysqlが指定されています。

      条件

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

      • key: メトリックのタイプを指定します。

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

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

      • values: しきい値を指定します。

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

      アクション

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

      • type: アクションのタイプを指定します。 有効値: volume-expand。

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

      • limits: アクションが実行された場合のPVCの最大容量を指定します。

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

      • この例では、action1は、ディスクサイズが100 GiB以下の場合、ディスクを50 GiB拡張することを指定します。 最大ディスクサイズは100 GiBです。

      • この例では、action2は、ディスクサイズが100 GiBより大きく300 GiBより小さい場合、ディスクを50% 拡張することを指定します。 最大ディスクサイズは300 GiBです。

    2. 次のコマンドを実行して、自動拡張ポリシーを作成します。

      kubectl create -f StorageAutoScalerPolicy.yaml
  2. StatefulSetを作成します。

    1. 次のテンプレートを使用して、という名前のファイルを作成します。StatefulSet.yaml.

       apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: mysql
      spec:
        selector:
          matchLabels:
            app: mysql
        serviceName: mysql
        replicas: 3
        template:
          metadata:
            labels:
              app: mysql
          spec:
            containers:
            - name: mysql
              image: mysql:5.7
              env:
              - name: MYSQL_ROOT_PASSWORD
                valueFrom:
                  secretKeyRef:
                    name: mysql-pass
                    key: password
              ports:
              - containerPort: 80
                name: mysql
              volumeMounts:
              - name: pvc-disk
                mountPath: /data
        volumeClaimTemplates:
          - metadata:
              name: pvc-disk
              labels:
                app: mysql
            spec:
              accessModes: [ "ReadWriteOnce" ]
              storageClassName: "alicloud-disk-topology-alltype"
              resources:
                requests:
                  storage: 25Gi
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: mysql-pass
      type: Opaque
      data:
        username: dGVz****             
        password: dGVzdDEt****     
    2. 次のコマンドを実行して、StatefulSetを作成します。

      kubectl create -f StatefulSet.yaml

ステップ3: 自動ディスク拡張の確認

  1. マウントされたディレクトリにデータを書き込み、ディスク使用量を80% 以上に増やします。

    1. 次のコマンドを実行して、マウントされたディレクトリにデータを書き込みます。

      dd if=<Data path> of=<Mounted directory>
    2. 次のコマンドを実行して、ディスクの詳細を照会します。

      df -h | grep d-****1

      期待される出力:

      Filesystem    Size   Used   Avail   Use%    Mounted on
      /dev/vde      25G    24G    1.5G    95%     /var/lib/kubelet/plugins/kubernetes.io/csi/pv/d-****1/globalmount
  2. 次のコマンドを実行して、ディスク拡張に関連するイベントを照会します。

    ディスクの使用率が80% を超えると、ディスクの拡張がトリガーされます。 この場合、action1は制限を満たします。 したがって、ディスクを拡張するためにaction1が実行されます。

    kubectl get events

    期待される出力:

    101s     Warning     StartExpand                persistentvolumeclaim/pvc-disk-mysql-1     Start to expand of pvc pvc-disk-mysql-1 from 25Gi to 75Gi, usedCapacityPercentage:94%, freeSize:1472MB.
    101s     Warning     ExternalExpanding          persistentvolumeclaim/pvc-disk-mysql-1     Ignoring the PVC: did't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC.
    101s     Normal      Resizing                   persistentvolumeclaim/pvc-disk-mysql-1     External resizer is resizing volume d-****1
    97s      Normal      FileSystemResizeRequired   persistentvolumeclaim/pvc-disk-mysql-1     Require file system resize of volume on node
    96s      Warning     SkipExpand                 persistentvolumeclaim/pvc-disk-mysql-1     Pvc pvc-disk-mysql-1 is expanding status from 25Gi to 75Gi, this action action2 will skip.
  3. 次のコマンドを実行して、PVCの容量を照会します。

    kubectl get pvc

    期待される出力:

    NAME               STATUS     VOLUME     CAPACITY     ACCESS MODES     STORAGECLASS                      AGE
    pvc-disk-mysql-0   Bound      d-****0    25Gi         RWO              alicloud-disk-topology-alltype    22m
    pvc-disk-mysql-1   Bound      d-****1    75Gi         RWO              alicloud-disk-topology-alltype    21m
    pvc-disk-mysql-2   Bound      d-****2    25Gi         RWO              alicloud-disk-topology-alltype    21m

    予想される出力は、ディスクd-**** 1が75 GiBに拡張されたことを示しています。

  4. 手順1を繰り返して、ディスク使用量を80% 以上に増やします。 これにより、ディスクが再び拡張されます。

    次のコマンドを実行して、ディスク拡張に関連するイベントを照会します。

    kubectl get events

    期待される出力:

    7m22s    Warning     StartExpand                persistentvolumeclaim/pvc-disk-mysql-1     Start to expand of pvc pvc-disk-mysql-1 from 100Gi to 150Gi, usedCapacityPercentage:95%, freeSize:3732MB.
    5m2s     Warning     ExternalExpanding          persistentvolumeclaim/pvc-disk-mysql-1     Ignoring the PVC: did't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC.
    2m4s     Normal      Resizing                   persistentvolumeclaim/pvc-disk-mysql-1     External resizer is resizing volume d-****1
    3m4s     Normal      FileSystemResizeRequired   persistentvolumeclaim/pvc-disk-mysql-1     Require file system resize of volume on node
    5m59s    Warning     SkipExpand                 persistentvolumeclaim/pvc-disk-mysql-1     Pvc pvc-disk-mysql-1 is expanding status from 100Gi to 150Gi, this action action1 will skip.

    action1limitsパラメーターは、最大ディスク容量が100 GiBであることを指定します。 したがって、予想される出力に示すように、ディスクサイズは75 GiBから100 GiBに拡張されます。

  5. 手順1を繰り返して、ディスク使用量を80% 以上に増やします。 これにより、ディスクが3回目に拡張されます。

    次のコマンドを実行して、ディスク拡張に関連するイベントを照会します。

    kubectl get events

    期待される出力:

    7m22s    Warning     StartExpand                persistentvolumeclaim/pvc-disk-mysql-1     Start to expand of pvc pvc-disk-mysql-1 from 100Gi to 150Gi, usedCapacityPercentage:95%, freeSize:3732MB.
    5m2s     Warning     ExternalExpanding          persistentvolumeclaim/pvc-disk-mysql-1     Ignoring the PVC: did't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC.
    2m4s     Normal      Resizing                   persistentvolumeclaim/pvc-disk-mysql-1     External resizer is resizing volume d-****1
    3m4s     Normal      FileSystemResizeRequired   persistentvolumeclaim/pvc-disk-mysql-1     Require file system resize of volume on node
    5m59s    Warning     SkipExpand                 persistentvolumeclaim/pvc-disk-mysql-1     Pvc pvc-disk-mysql-1 is expanding status from 100Gi to 150Gi, this action action1 will skip.

    action1limitsパラメーターは100 GiBです。 したがって、このアクションは実行されません。 期待される出力は、action2が実行されてディスクサイズを100 GiBから150 GiBに拡張することを示しています。

  6. 手順1を繰り返して、ディスク使用量を80% 以上に増やします。 これにより、ディスクが4回目に拡張されます。

    次のコマンドを実行して、ディスク拡張に関連するイベントを照会します。

    kubectl get events

    期待される出力:

    0s     Warning     StartExpand                persistentvolumeclaim/pvc-disk-mysql-1     Start to expand of pvc pvc-disk-mysql-1 from 150Gi to 225Gi, usedCapacityPercentage:94%, freeSize:7637MB.
    0s     Warning     ExternalExpanding          persistentvolumeclaim/pvc-disk-mysql-1     Ignoring the PVC: did't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC.
    0s     Normal      Resizing                   persistentvolumeclaim/pvc-disk-mysql-1     External resizer is resizing volume d-****1
    0s     Normal      FileSystemResizeRequired   persistentvolumeclaim/pvc-disk-mysql-1     Require file system resize of volume on node
    0s     Warning     SkipExpand                 persistentvolumeclaim/pvc-disk-mysql-1     Pvc pvc-disk-mysql-1 is expanding status from 150Gi to 225Gi, this action action1 will skip.

    期待される出力は、action2が実行されてディスクサイズを150 GiBから225 GiBに拡張することを示しています。

  7. 手順1を繰り返して、ディスク使用量を80% 以上に増やします。 これはディスクを5回拡張します。

    次のコマンドを実行して、ディスク拡張に関連するイベントを照会します。

    kubectl get events

    期待される出力:

    0s     Warning     StartExpand                 persistentvolumeclaim/pvc-disk-mysql-1     Start to expand of pvc pvc-disk-mysql-1 from 225Gi to 300Gi, usedCapacityPercentage:94%, freeSize:7637MB.
    0s     Warning     ExternalExpanding           persistentvolumeclaim/pvc-disk-mysql-1     Ignoring the PVC: did't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC.
    0s     Normal      Resizing                    persistentvolumeclaim/pvc-disk-mysql-1     External resizer is resizing volume d-****1
    0s     Normal      FileSystemResizeRequired    persistentvolumeclaim/pvc-disk-mysql-1     Require file system resize of volume on node
    0s     Warning     FileSystemResizeSuccessful  persistentvolumeclaim/pvc-disk-mysql-1     MountVolume.NodeExpandVolume succeeded for volume "d-****1"

    action2limitsパラメーターは、最大ディスク容量が300 GiBであることを指定します。 したがって、予想される出力に示すように、ディスクサイズは225 GiBから300 GiBに拡張されます。

    ディスク使用量が再び80% を超えても、ディスクの拡張はトリガーされません。

参照

ディスクボリュームの使用時にご質問がある場合は、「ディスクボリュームに関するよくある質問」をご参照ください。