Container Service for Kubernetes (ACK) は、クラウドディスクボリュームの自動拡張をサポートしています。CRD を使用して自動拡張ポリシーを定義することで、ボリュームの使用率が指定されたしきい値を超えたときに自動的にボリュームを拡張できます。このトピックでは、クラウドディスクの自動拡張ポリシーを設定し、ボリュームが自動的に拡張されることを確認する方法について説明します。
適用範囲
このトピックでは、CRD を使用して、ディスクボリュームを自動的に拡張する自動拡張ポリシー (StorageAutoScalerPolicy) を作成します。次のセクションでは、このメソッドを使用できるシナリオについて説明します。
ディスクの永続ボリューム (PV) にバインドされた永続ボリューム要求 (PVC) は StorageClass に関連付けられており、その StorageClass で
allowVolumeExpansion: trueパラメーターが指定されている必要があります。説明デフォルトでは、ACK が提供する StorageClass には
allowVolumeExpansion: trueパラメーターが指定されています。お客様が作成する StorageClass にはこのパラメーターを指定する必要があります。StorageClass のプロパティは変更できず、作成のみ可能です。ディスクがアタッチされているアプリケーション Pod は、Running 状態である必要があります。
ディスクが基本ディスクの場合、この方法でディスクボリュームを拡張することはできません。
クラスターの Kubernetes バージョンが 1.16 より前の場合、この方法でディスクボリュームを拡張することはできません。クラスターの Kubernetes バージョンをアップグレードする方法の詳細については、「クラスターのアップグレード」をご参照ください。
サイズ変更が可能なディスクのボリュームのみを拡張できます。詳細については、「ResizeDisk」をご参照ください。
注意事項
拡張トリガー間の最大間隔は 2 分で、ディスクの拡張には約 1 分かかります。3 分以内にディスクを一杯にしないでください。
事前準備
開始する前に、storage-operator のステータスを確認し、ご利用のバージョンに応じて必要であれば自動拡張を有効にしてください。
-
コンポーネントがインストールされていることを確認します。
storage-operator は、デフォルトでご利用のクラスターにインストールされています。クラスター管理コンソールで、 に移動し、ボリューム タブでインストールステータスとバージョンを確認します。アップグレードについては、「アドオンのアップグレード」をご参照ください。
-
ご利用のバージョンに基づいて自動拡張を有効にします。
storage-operator の storage-auto-expander モジュールが、ストレージリソースの自動拡張を処理します。
-
v1.33.1 以降:デフォルトで有効です。操作は不要です。
-
v1.33.1 より前: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\"}"}}'
-
ステップ 1:クラウドディスクの自動拡張ポリシーの設定
-
StorageClass を確認し、ボリューム拡張が有効になっていることを確認します。
kubectl get sc説明ACK クラスターでは、デフォルトの StorageClass である
alicloud-disk-topology-alltypeを使用することを推奨します。この StorageClass は、ご利用のインスタンスタイプとゾーンの可用性に基づいて適切なディスクタイプを自動的に選択するため、インスタンスの制限やディスク在庫の不足による障害の回避に役立ちます。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 が一致した場合、それが実行され action2 はスキップされます。action1 が一致しない場合、action2 が実行されます。
-
Action1:現在のサイズが 100 GiB 未満の場合、ディスクを 50 GiB 拡張します (合計 100 GiB まで)。
-
Action2:現在のサイズが 100 GiB から 300 GiB の間の場合、ディスクを現在のサイズの 50% 増加させます (元のサイズの 150% になります)。最大 300 GiB までです。
-
-
自動拡張ポリシーを作成します。
kubectl create -f StorageAutoScalerPolicy.yaml
-
ステップ 2:クラウドディスクの自動拡張の検証
-
自動拡張をテストするために StatefulSet を作成します。
-
次の内容で StatefulSet.yaml という名前のファイルを作成します。
この YAML は、1 つの Pod を持つ StatefulSet を作成し、25 GiB のクラウドディスクを
/dataにマウントします。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 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 -
Pod のデプロイメントステータスを確認します。
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 -- fallocate -l 22G /data/test1 -
拡張イベントを確認します。
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期待される出力は、ディスクが 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
-
-
さらにデータを書き込み、再度使用率を 80% 以上にして 2 回目の拡張をトリガーします。
-
マウントパスにデータを書き込みます。
次のコマンドは、
/data/test2に 40 GB のデータを割り当て、クラウドディスクの使用率が 80% を超えるようにします。kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2 -
拡張イベントを確認します。
kubectl get events75 GiB のクラウドディスクの使用率が 80% を超えると、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.
-
-
さらにデータを書き込み、再度使用率を 80% 以上にして 3 回目の拡張をトリガーします。
-
マウントパスにデータを書き込みます。
次のコマンド例では、
/data/test3に 20 GB のデータを割り当て、クラウドディスクの使用率が 80% を超えるようにします。kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3 -
拡張イベントを確認します。
kubectl get events100 GiB のクラウドディスクの容量使用率が 80% を超えると、action2 が自動的に実行され、ディスクが 100 GiB から 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.
-
-
さらにデータを書き込み、再度使用率を 80% 以上にして 4 回目の拡張をトリガーします。
-
マウントパスにデータを書き込みます。
次のコマンドは、
/data/test4に 50 GB のデータを割り当て、クラウドディスクの容量使用率が 80% を超えるようにします。kubectl exec -it nginx-0 -- fallocate -l 50G /data/test4 -
拡張イベントを確認します。
kubectl get events150 GiB で使用率が 80% を超えると、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.
-
-
さらにデータを書き込み、再度使用率を 80% 以上にして 5 回目の拡張をトリガーします。
-
マウントパスにデータを書き込みます。
次のコマンドは、
/data/test5に 50 GB のデータを割り当て、クラウドディスクの容量使用率が 80% を超えるようにします。kubectl exec -it nginx-0 -- fallocate -l 50G /data/test5 -
拡張イベントを確認します。
kubectl get events225 GiB で使用率が 80% を超えると、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% を超えても、これらのアクションをトリガーする条件はもはや満たされないため、スケールアウトはトリガーされません。
-
参考資料
クラウドディスクボリュームの使用中に問題が発生した場合は、「クラウドディスクボリュームに関するよくある質問」をご参照ください。