ビジネスの発展やアプリケーションデータの拡大に伴い、ディスク容量が不足する場合があります。 この問題を解決するには、ディスクボリュームの使用率が指定されたしきい値を超えたときに自動的にディスクボリュームを拡張する1つ以上の拡張ポリシーを定義します。 このトピックでは、ディスクボリュームを自動的に拡張する方法について説明します。
前提条件
ストレージオペレーターコンポーネントはクラスターにインストールされており、コンポーネントのバージョンはv1.18.8.28-18cca7b-aliyun以降です。 詳細は、「storage-operator」をご参照ください。
使用上の注意
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: 自動拡張ポリシーの設定
StorageClassで自動拡張ポリシーを設定します。
各ACKクラスターにalicloud-disk-topology-alltype StorageClassを作成することを推奨します。 StorageClassは、ディスクタイプを自動的に選択して、インスタンスタイプの制限または指定されたゾーンのディスクストック不足によるディスク作成の失敗を回避できます。
クラスターが以前のバージョンのKubernetesを実行している場合、次の方法を使用してalicloud-disk-topology-alltype StorageClassを手動で作成できます。
次のテンプレートを使用して、という名前のファイルを作成します。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
次のコマンドを実行してStorageClassを作成します。
kubectl create -f storageclass.yaml
カスタムリソース定義 (CRD) を使用して、自動拡張ポリシーを作成します。
次のテンプレートを使用して、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。 この例では、defaultとmysqlが指定されています。
条件
アクションをトリガーする条件を指定します。 複数の条件間の論理演算子は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です。
次のコマンドを実行して、自動拡張ポリシーを作成します。
kubectl create -f StorageAutoScalerPolicy.yaml
StatefulSetを作成します。
次のテンプレートを使用して、という名前のファイルを作成します。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****
次のコマンドを実行して、StatefulSetを作成します。
kubectl create -f StatefulSet.yaml
ステップ3: 自動ディスク拡張の確認
マウントされたディレクトリにデータを書き込み、ディスク使用量を80% 以上に増やします。
次のコマンドを実行して、マウントされたディレクトリにデータを書き込みます。
dd if=<Data path> of=<Mounted directory>
次のコマンドを実行して、ディスクの詳細を照会します。
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
次のコマンドを実行して、ディスク拡張に関連するイベントを照会します。
ディスクの使用率が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.
次のコマンドを実行して、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に拡張されたことを示しています。手順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.
action1のlimitsパラメーターは、最大ディスク容量が100 GiBであることを指定します。 したがって、予想される出力に示すように、ディスクサイズは75 GiBから100 GiBに拡張されます。
手順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.
action1のlimitsパラメーターは100 GiBです。 したがって、このアクションは実行されません。 期待される出力は、action2が実行されてディスクサイズを100 GiBから150 GiBに拡張することを示しています。
手順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に拡張することを示しています。
手順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"
action2のlimitsパラメーターは、最大ディスク容量が300 GiBであることを指定します。 したがって、予想される出力に示すように、ディスクサイズは225 GiBから300 GiBに拡張されます。
ディスク使用量が再び80% を超えても、ディスクの拡張はトリガーされません。
参照
ディスクボリュームの使用時にご質問がある場合は、「ディスクボリュームに関するよくある質問」をご参照ください。