Container Service for Kubernetes (ACK) では、ディスクボリュームを自動的に拡張できます。カスタムリソース定義 (CRD) を使用して、自動ディスク拡張ポリシーを定義できます。この方法で、ボリュームの使用率が指定されたしきい値を超えたときに、ディスクのサイズを自動的に変更できます。このトピックでは、自動ディスク拡張ポリシーを設定し、ディスクボリュームの自動拡張を確認する方法について説明します。
適用範囲
このトピックでは、CRD を使用して自動拡張ポリシー (StorageAutoScalerPolicy) を作成し、ディスクボリュームを自動的に拡張します。次のセクションでは、この方法を使用できるシナリオについて説明します。
ディスクの永続ボリューム (PV) にバインドされている PVC は StorageClass に関連付けられており、StorageClass に
allowVolumeExpansion: true
パラメーターが指定されています。説明デフォルトでは、ACK が提供する StorageClass に
allowVolumeExpansion: true
パラメーターが指定されています。作成する StorageClass にはこのパラメーターを指定する必要があります。 StorageClass のプロパティは変更できません。 StorageClass を作成することのみ可能です。ディスクがアタッチされているアプリケーション ポッドは、実行中状態である必要があります。
ディスクが基本ディスクの場合、この方法でディスク ボリュームを拡張することはできません。
クラスタの Kubernetes バージョンが 1.16 より前の場合、この方法を使用してディスク ボリュームを拡張することはできません。クラスタの Kubernetes バージョンをアップグレードする方法の詳細については、「クラスタをアップグレードする」をご参照ください。
サイズ変更可能なディスクのディスク ボリュームのみを拡張できます。詳細については、「ResizeDisk」をご参照ください。
注意事項
2 つの拡張操作の最大間隔は 2 分です。ディスク拡張プロセスには 1 分かかります。3 分以内にディスク容量を使い果たさないようにしてください。
手順 1: storage-operator コンポーネントを設定して自動拡張を有効にする
storage-operator コンポーネントがクラスタにインストールされており、コンポーネントのバージョンが v1.18.8.28-18cca7b-aliyun 以降であること。
説明デフォルトでは、storage-operator コンポーネントはクラスタにインストールされています。クラスタ管理ページの左側のナビゲーションウィンドウで、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 クラスタでは、
alicloud-disk-topology-alltype
StorageClass を作成することをお勧めします。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 を使用して自動拡張ポリシーを作成します。
次のテンプレートを使用して、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
は、拡張される PVC の容量を示します。単位: 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 テンプレートを使用して StatefulSet を作成します。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
ポッドのデプロイメントを表示します。
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 pvc pvc-disk-nginx-0 の 25Gi から 75Gi への拡張を開始します。usedCapacityPercentage:90%、freeSize:2498MB。 2m1s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 この PVC を拡張するために外部コントローラーを待機しています 2m1s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています 118s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 ノード上のボリュームのファイルシステムのサイズ変更が必要です 116s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 は 25Gi から 75Gi に拡張中です。このアクション action2 はスキップされます。
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 番目の拡張がトリガーされます。
マウントされたディレクトリにデータを書き込みます。
次のサンプルコマンドは、
/data/test2
ディレクトリに 40 GB のデータが割り当てられ、ディスク使用率が 80% を超えていることを示しています。kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2
拡張イベントを表示します。
kubectl get events
ディスク使用率が 80% を超えると、ディスク容量は 75 GiB になり、action1 の条件を満たします。そのため、action1 が自動的に実行され、容量が 50 GiB 増加します。action1 の limits パラメーターでは、最大ディスク容量が 100 GiB に指定されています。そのため、予期される出力に示すように、ディスク容量は 75 GiB から 100 GiB に拡張されます。イベントリストには、次のイベントが表示されます。
7m4s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 pvc pvc-disk-nginx-0 の 75Gi から 100Gi への拡張を開始します。usedCapacityPercentage:84%、freeSize:11927MB。 7m4s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 この PVC を拡張するために外部コントローラーを待機しています 7m4s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています 7m1s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 ノード上のボリュームのファイルシステムのサイズ変更が必要です 5m59s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 は 75Gi から 100Gi に拡張中です。このアクション action2 はスキップされます。
マウントされたディレクトリにデータを書き込んで、ディスク使用率を 80% 以上に増やします。これにより、3 番目の拡張がトリガーされます。
マウントされたディレクトリにデータを書き込みます。
次のコマンド例は、40 GB のデータが
/data/test2
ディレクトリに割り当てられ、ディスク使用率が 80% を超えることを示しています。kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3
拡張イベントを表示します。
kubectl get events
ディスク使用率が 80% を超えると、ディスク容量は 100 GiB になり、action2 の条件を満たします。そのため、action2 が自動的に実行され、ディスクのサイズが 100 GiB から 150 GiB に変更されます。イベントリストには、次のイベントが表示されます。
2m40s Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 pvc pvc-disk-nginx-0 の 100Gi から 150Gi への拡張を開始します。usedCapacityPercentage:83%、freeSize:16637MB。 2m40s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 この PVC を拡張するために外部コントローラーを待機しています 2m40s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています 2m37s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 ノード上のボリュームのファイルシステムのサイズ変更が必要です 109s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 は 100Gi から 150Gi に拡張中です。このアクション action2 はスキップされます。
マウントされたディレクトリにデータを書き込んで、ディスク使用率を 80% 以上に増やします。これにより、4 番目の拡張がトリガーされます。
マウントされたディレクトリにデータを書き込みます。
次のコマンド例は、20 GB のデータが
/data/test3
ディレクトリに割り当てられ、ディスク使用率が 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 pvc pvc-disk-nginx-0 の 150Gi から 225Gi への拡張を開始します。usedCapacityPercentage:87%、freeSize:19621MB。 2m42s Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 この PVC を拡張するために外部コントローラーを待機しています 2m42s Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています 2m38s Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 ノード上のボリュームのファイルシステムのサイズ変更が必要です 114s Warning SkipExpand persistentvolumeclaim/pvc-disk-nginx-0 Pvc pvc-disk-nginx-0 は 150Gi から 225Gi に拡張中です。このアクション action2 はスキップされます。
マウントされたディレクトリにデータを書き込んで、ディスク使用率を 80% 以上に増やします。これにより、5 番目の拡張がトリガーされます。
マウントされたディレクトリにデータを書き込みます。
次のサンプル コマンドは、50 GB のデータが
/data/test5
ディレクトリに割り当てられ、ディスク使用率が 80% を超えていることを示しています。kubectl exec -it nginx-0 -- fallocate -l 50G /data/test5
拡張イベントを表示します。
kubectl get events
ディスク使用率が 80% を超えると、ディスク容量は 225 GiB になり、action2 の条件を満たします。そのため、action2 が自動的に実行され、現在の容量が 50% 増加します。action2 の limits パラメーターでは、最大ディスク容量が 300 GiB に指定されています。そのため、予期される出力に示すように、ディスク容量は 225 GiB から 300 GiB に拡張されます。イベントリストには、次のイベントが表示されます。
17m Warning StartExpand persistentvolumeclaim/pvc-disk-nginx-0 pvc pvc-disk-nginx-0 の 225Gi から 300Gi への拡張を開始します。usedCapacityPercentage:82%、freeSize:40351MB。 17m Normal ExternalExpanding persistentvolumeclaim/pvc-disk-nginx-0 この PVC を拡張するために外部コントローラーを待機しています 17m Normal Resizing persistentvolumeclaim/pvc-disk-nginx-0 外部リサイザーがボリューム d-uf66kkzltnq6xgi9**** のサイズを変更しています 17m Normal FileSystemResizeRequired persistentvolumeclaim/pvc-disk-nginx-0 ノード上のボリュームのファイルシステムのサイズ変更が必要です
この時点で、action1 と action2 の両方が制限までトリガーされています。ディスク容量が再び 80% を超えると、2 つのアクションの条件が満たされなくなり、拡張操作はトリガーされなくなります。
関連情報
ディスク ボリュームの使用時に発生する可能性のある問題の詳細については、「ディスク ボリュームに関する FAQ」をご参照ください。