ACK では、ディスク永続ボリュームの自動拡張が可能です。 CRD を使用してディスク自動拡張ポリシーを定義することで、永続ボリュームの使用率が指定されたしきい値を超えた場合に拡張プロセスを自動化できます。 このガイドでは、ディスク自動拡張ポリシーの構成と、ディスク永続ボリュームの自動拡張の検証について詳しく説明します。
適用範囲
このガイドでは、CRD を使用した自動拡張ポリシー (StorageAutoScalerPolicy) の作成について説明し、ディスク永続ボリュームの自動拡張を容易にします。 適用可能なシナリオは次のとおりです。
-
ディスクにバインドされた PV に関連付けられた PVC は、StorageClass にリンクされている必要があり、StorageClass に
allowVolumeExpansion: true
が構成されている必要があります。説明ACK によってデフォルトで提供される StorageClass は、
allowVolumeExpansion: true
で構成されています。 StorageClass のプロパティは作成後に変更できないため、自分で作成する StorageClass を構成する必要があります。代わりに新しいものを作成する必要があります。 -
ディスクがマウントされているアプリケーション ポッドは、実行中状態である必要があります。
-
このメソッドは、基本ディスクの拡張をサポートしていません。
-
クラスタのバージョンが 1.16 より前の場合、拡張はサポートされていません。 クラスタをアップグレードするには、「クラスタのアップグレード」をご参照ください。
-
このメソッドは、ディスクのサイズ変更機能を利用します。 詳細については、「ResizeDisk」をご参照ください。
注意事項
拡張がトリガーされる最大間隔は 2 分で、ディスク拡張プロセスには約 1 分かかります。 3 分以内にディスクがいっぱいにならないようにしてください。
手順 1:storage-operator ウィジェットを構成して自動拡張を有効にする
-
storage-operator ウィジェットがクラスタにインストールされており、そのバージョンが v1.18.8.28-18cca7b-aliyun 以降であることを確認します。
説明storage-operator ウィジェットは通常、クラスタにプリインストールされています。 インストール ステータスとバージョンを確認するには、クラスタ管理ページの左側のナビゲーションウィンドウで Storage-Operator ウィジェットの管理」をご参照ください。
に移動し、[ストレージ] タブを選択します。 詳細な手順については、「 -
クラスタに接続し、次のコマンドを実行して storage-operator の ConfigMap を変更し、自動拡張機能を有効にします。
storage-operator ウィジェット内の storage-auto-expander は、ストレージ リソースの自動拡張を担当します。 例:
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:ディスク自動拡張ポリシーを構成する
-
StorageClass を調べて、拡張が許可されていることを確認します。
kubectl get sc
説明ACK のデフォルト StorageClass である
alicloud-disk-topology-alltype
は、インスタンスタイプの制限やゾーンのディスク在庫不足による作成の問題を回避するために適切なディスクタイプを自動的に選択するため、推奨されます。 StorageClass の作成手順については、「動的ディスク永続ボリュームの使用」をご参照ください。期待される出力は、
ALLOWVOLUMEEXPANSION
がtrue
に設定されていることを示し、拡張が有効になっていることを確認します。NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE alicloud-disk-efficiency diskplugin.csi.alibabacloud.com Delete Immediate true 26h alicloud-disk-essd diskplugin.csi.alibabacloud.com Delete Immediate true 26h alicloud-disk-ssd diskplugin.csi.alibabacloud.com Delete Immediate true 26h alicloud-disk-topology-alltype diskplugin.csi.alibabacloud.com Delete WaitForFirstConsumer true 26h
-
CRD を使用して自動拡張ポリシーを確立します。
-
次の YAML コンテンツを含む StorageAutoScalerPolicy.yaml という名前のファイルを作成します。
apiVersion: storage.alibabacloud.com/v1alpha1 kind: StorageAutoScalerPolicy metadata: name: hybrid-expand-policy spec: pvcSelector: matchLabels: app: nginx namespaces: - default - nginx 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
アプリケーションと PVC の要件に合わせて構成を調整します。 パラメータは次の表で説明されています。
パラメータ
説明
pvcSelector
ラベルを使用してターゲット PVC を選択します。 この例では、
app: nginx
です。namespaces
ターゲット PVC の名前空間を指定します。 複数の名前空間が指定されている場合、名前空間間の論理演算子は OR です。 構成されていない場合、デフォルトは default です。
conditions
ルールをトリガーするための条件。 複数の条件が指定されている場合、条件間の論理演算子は AND です。 各条件には、次のパラメータが含まれます。
name
: 条件の名前。ユーザー定義です。key
: メトリックのタイプを定義します。volume-capacity-used-percentage
は、使用されている容量の割合を示します。operator
: ルールを定義します。Gt
(より大きい)、Lt
(より小さい)、Eq
(等しい)、またはNe
(等しくない) を含みます。 大文字と小文字は区別されません。values
: ルールの具体的な値。
この例は、PVC 容量の使用率が 80% を超えると、アクションがトリガーされることを示しています。
actions
条件が満たされたときに実行される操作。 複数の操作を指定できます。 構成には、次のパラメータが含まれます。
name
: アクションの名前。ユーザー定義です。type
: 操作のタイプを示します。 現在、volume-expand
のみがサポートされており、これは拡張を示します。params
: 操作パラメータを示します。scale
は拡張のサイズを GiB 単位またはパーセンテージで示します。limits
は、このアクションにおける PVC の最大制限を示します。
複数のアクションが指定されている場合、条件を満たす最初のアクションが実行され、残りのアクションはスキップされます。
たとえば、この例の action1 が条件を満たしている場合、action1 が実行され、action2 は実行されません。 action1 が条件を満たしていない場合、action2 が実行されます。
Action1 は、ディスク容量が 100 GiB 未満の場合、拡張がトリガーされるたびに 50 GiB が追加され、最大 100 GiB まで拡張されることを示します。
Action2 は、ディスク容量が 100 GiB 以上 300 GiB 未満の場合、各拡張で現在の容量が 50% 増加することを示します。つまり、各拡張後の合計容量は拡張前の容量の 150% になり、最大 300 GiB まで拡張されます。
-
以下のコマンドを実行して、自動拡張ポリシーを適用します。
kubectl create -f StorageAutoScalerPolicy.yaml
-
手順 3:ディスクの自動拡張を確認する
-
StatefulSet を設定して、自動拡張機能をテストします。
-
以下に示すコンテンツで StatefulSet.yaml ファイルを生成します。
この YAML は、
/data
パスに 25 GiB のディスクをマウントするポッドを含む StatefulSet を作成します。apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: selector: matchLabels: app: nginx serviceName: nginx replicas: 1 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-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc ports: - containerPort: 80 name: nginx volumeMounts: - name: pvc-disk mountPath: /data volumeClaimTemplates: - metadata: name: pvc-disk labels: app: nginx spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alicloud-disk-topology-alltype" resources: requests: storage: 25Gi
-
次のコマンドを使用して StatefulSet をデプロイします。
kubectl create -f StatefulSet.yaml
-
ポッドのデプロイ プロセスを監視します。
kubectl get pod -l app=nginx
予想される出力:
NAME READY STATUS RESTARTS AGE nginx-0 1/1 Running 0 99s
-
ディスクの容量を確認します。
kubectl exec -it nginx-0 -- df -h /data
期待される出力:
Filesystem Size Used Avail Use% Mounted on /dev/vdb 25G 24K 25G 1% /data
-
-
マウント ディレクトリにデータを入力して、最初の拡張のためにディスク使用率を 80% 以上にします。
-
マウント ディレクトリにデータを追加します。
たとえば、
/data/test1
に 22 GB を書き込んで、ディスク使用率を 80% 以上にします。kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test1 bs=1G count=22
-
拡張イベントを確認します。
kubectl get events
ディスク使用率が 80% を超え、容量が 25 GiB の場合、action1 の条件が満たされ、50 GiB の自動拡張がトリガーされます。 イベント リストには、関連するイベントが表示されます。
2m1s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 25Gi to 75Gi, usedCapacityPercentage:90%, freeSize:2498MB. 2m1s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 2m1s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 118s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on node 116s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 is expanding status from 25Gi to 75Gi, this action action2 will skip.
-
PVC の容量を調べます。
kubectl get pvc
予想される結果は次のとおりです。action1 の後、ディスクは 25 GiB から 75 GiB に増加しました。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-disk-nginx-0 Bound d-uf66kkzltnq6xgi9**** 75Gi RWO alicloud-disk-topology-alltype <unset> 26m
-
-
マウント ディレクトリにデータを追加し続けて、2 回目の拡張のためにディスク使用率を 80% 以上にします。
-
マウント ディレクトリにデータを追加します。
たとえば、
/data/test2
に 40 GB を書き込んで、ディスク使用率を 80% 以上にします。kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test2 bs=1G count=40
-
拡張イベントを確認します。
kubectl get events
ディスク使用率が再び 80% を超え、容量が 75 GiB になったため、action1 がもう一度トリガーされ、50 GiB が追加されます。 ただし、action1 の制限は 100 GiB であるため、ディスクは 75 GiB から 100 GiB にしか拡張できません。 イベント リストには、関連するイベントが表示されます。
7m4s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 75Gi to 100Gi, usedCapacityPercentage:84%, freeSize:11927MB. 7m4s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 7m4s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 7m1s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on node 5m59s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 is expanding status from 75Gi to 100Gi, this action action2 will skip.
-
-
マウント ディレクトリにデータを書き込み続けて、3 回目の拡張のためにディスク使用率を 80% 以上にします。
-
マウント ディレクトリにデータを追加します。
たとえば、
/data/test3
に 20 GB を書き込んで、ディスク使用率を 80% 以上にします。kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test3 bs=1G count=20
-
拡張イベントを確認します。
kubectl get events
ディスク使用率が 80% を超え、容量が 100 GiB であるため、action2 の基準が満たされ、150 GiB に拡張されます。 イベント リストには、これらの関連イベントが反映されます。
2m40s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 100Gi to 150Gi, usedCapacityPercentage:83%, freeSize:16637MB. 2m40s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 2m40s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 2m37s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on node 109s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 is expanding status from 100Gi to 150Gi, this action action2 will skip.
-
-
マウント ディレクトリにデータを追加し続けて、4 回目の拡張のためにディスク使用率を 80% 以上にします。
-
マウント ディレクトリにデータを書き込みます。
たとえば、
/data/test4
に 50 GB を書き込んで、ディスク使用率を 80% 以上にします。kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test4 bs=1G count=50
-
拡張イベントを確認します。
kubectl get events
ディスク使用率が再び 80% を超え、容量が 150 GiB であるため、action2 がトリガーされ、容量が 50% 増加します。 この拡張により、ディスクは 150 GiB から 225 GiB になります。 イベント リストには、これらの関連イベントが記録されます。
2m42s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 150Gi to 225Gi, usedCapacityPercentage:87%, freeSize:19621MB. 2m42s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 2m42s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 2m38s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on node 114s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 is expanding status from 150Gi to 225Gi, this action action2 will skip.
-
-
マウント ディレクトリにデータを追加し続けて、5 回目の拡張のためにディスク使用率を 80% 以上にします。
-
マウント ディレクトリにデータを書き込みます。
たとえば、
/data/test5
に 50 GB を書き込んで、ディスク使用率を 80% 以上にします。kubectl exec -it nginx-0 -- dd if=/dev/zero of=/data/test5 bs=1G count=50
-
拡張イベントを確認します。
kubectl get events
ディスク容量が 80% を超え、225 GiB に達したため、action2 の条件が再び満たされ、さらに 50% 増加します。 ただし、action2 の制限は 300 GiB であるため、ディスクは 225 GiB から 300 GiB にしか拡張できません。 イベント リストには、対応するイベントが表示されます。
17m Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 Start to expand of pvc pvc-disk-nginx-0 from 225Gi to 300Gi, usedCapacityPercentage:82%, freeSize:40351MB. 17m Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 waiting for an external controller to expand this PVC 17m Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 External resizer is resizing volume d-uf66kkzltnq6xgi9**** 17m Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 Require file system resize of volume on node
この時点で、action1 と action2 の両方が実行されました。 ディスク容量が再び 80% を超えると、どちらの条件も満たされなくなり、それ以上の拡張は行われません。
-
関連情報
ディスク永続ボリュームに関連する問題については、「ディスク永続ボリュームに関するよくある質問」をご参照ください。