Container Service for Kubernetes (ACK) は、ディスクボリュームの自動拡張をサポートしています。Custom Resource Definition (CRD) を使用して、ディスク使用率が指定のしきい値を超えたときにディスクボリュームを自動的に拡張するポリシーを定義できます。このトピックでは、このポリシーの設定方法と自動拡張の検証方法について説明します。
適用範囲
このトピックでは、CRD を使用して自動拡張ポリシー (StorageAutoScalerPolicy) を作成し、ディスクボリュームを自動的に拡張します。この方法を使用できるシナリオは次のとおりです:
ディスクの永続ボリューム (PV) にバインドされた永続ボリューム要求 (PVC) が StorageClass に関連付けられており、その StorageClass で
allowVolumeExpansion: trueパラメーターが指定されていること。説明デフォルトでは、ACK が提供する StorageClass には
allowVolumeExpansion: trueパラメーターが指定されています。ご自身で作成する StorageClass にはこのパラメーターを指定する必要があります。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 クラスターでデフォルトで作成される
alicloud-disk-topology-alltypeStorageClass の使用を推奨します。この 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 26hCRD を使用して自動拡張ポリシーを作成します。
次の 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
ステップ 2:ディスク自動拡張の検証
StatefulSet を作成して自動スケーリングをテストできます。
次の内容を使用して、`StatefulSet.yaml` という名前のファイルを作成します。
次の YAML は、25 GiB のディスクを
/dataパスにマウントした Pod を含む 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 volumeClaimTemplates: - metadata: name: pvc-disk labels: app: nginx spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alicloud-disk-topology-alltype" resources: requests: storage: 25GiStatefulSet を作成します。
kubectl create -f StatefulSet.yamlPod のデプロイメント状態を表示します。
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% 超にして最初の拡張をトリガーします。
マウントディレクトリにデータを書き込みます。
次のサンプルコマンドは、22 GB のデータを
/data/test1に割り当て、ディスク使用率が 80% を超えるようにします。kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1拡張イベントを表示します。
kubectl get eventsディスク使用率が 80% を超えると、ディスク容量は 25 GiB になります。これは action1 の条件を満たします。したがって、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
マウントディレクトリにデータを書き込み続け、クラウドディスクの使用率を再び 80% 超にして、2 回目のスケールアウトをトリガーできます。
マウントディレクトリにデータを書き込みます。
次のサンプルコマンドは、40 GB のデータを
/data/test2ディレクトリに割り当て、ディスク使用率を 80% 超にします。kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2拡張イベントを表示します。
kubectl get events75 GiB ディスクの使用率が 80% を超えると、action1 の条件が満たされます。したがって、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 回目の拡張をトリガーします。
マウントディレクトリにデータを書き込みます。
次のサンプルコマンドは、20 GB のデータを
/data/test3ディレクトリに割り当て、ディスク使用率を 80% 超にします。kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3拡張イベントを表示します。
kubectl get events100 GiB ディスクの使用率が 80% を超えると、action2 の条件が満たされます。したがって、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 回目の拡張をトリガーします。
マウントディレクトリにデータを書き込みます。
次のサンプルコマンドは、50 GB のデータを
/data/test4ディレクトリに割り当て、ディスク使用率を 80% 超にします。kubectl exec -it nginx-0 -- fallocate -l 50G /data/test4拡張イベントを表示します。
kubectl get eventsディスク使用率が 80% を超えると、ディスク容量は 150 GiB となり、action2 の条件を満たします。したがって、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 回目の拡張をトリガーします。
マウントディレクトリにデータを書き込みます。
次のサンプルコマンドは、50 GB のデータを
/data/test5ディレクトリに割り当て、ディスク使用率が 80% を超えるようにします。kubectl exec -it nginx-0 -- fallocate -l 50G /data/test5拡張イベントを表示します。
kubectl get eventsこの時点で、ディスク容量は 225 GiB です。ディスク使用率が 80% を超えると、action2 の条件が満たされます。したがって、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% を超えても、これらの操作のトリガー条件はもはや満たされないため、スケールアウトはトリガーされません。
関連ドキュメント
ディスクボリュームに関する問題が発生した場合は、「ディスクボリュームに関するよくある質問」をご参照ください。