Establezca umbrales en una StorageAutoScalerPolicy para que storage-auto-expander en storage-operator expanda automáticamente los volúmenes de disco.
Funcionamiento
Cuando storage-auto-expander detecta que el uso del disco PVC supera el umbral, expande el volumen en la siguiente secuencia:
Supervisa el uso del disco en los PVC que coinciden con el selector de etiquetas de la política.
Cuando el uso supera el umbral, selecciona la primera acción coincidente y envía una solicitud de cambio de tamaño al controlador CSI (Container Storage Interface).
El controlador CSI cambia el tamaño del disco en la nube e indica a Kubernetes que ajuste el tamaño del sistema de archivos.
La capacidad del PVC se actualiza después de que finaliza el cambio de tamaño del sistema de archivos.
Restricciones de tiempo: El intervalo de verificación del desencadenante es de máximo 2 minutos, y la expansión toma aproximadamente 1 minuto. No llene el disco dentro de los 3 minutos posteriores a una expansión anterior.
Límites
|
Límite |
Detalle |
|
Versión de Kubernetes |
Requiere Kubernetes 1.16 o posterior. Actualice el clúster si es necesario. |
|
Tipo de disco |
Los discos básicos no son compatibles. Consulte ResizeDisk para conocer los tipos de disco elegibles. |
|
StorageClass |
La StorageClass del PVC debe tener |
|
Estado del pod |
El pod de la aplicación que utiliza el disco debe estar en estado Running. |
Habilitar el módulo storage-auto-expander
El módulo storage-auto-expander en storage-operator gestiona la expansión automática. Para comprobar si storage-operator está instalado y conocer su versión, vaya a Operations > Add-ons > Volumes.
v1.33.1 y posteriores: El módulo está habilitado de forma predeterminada. No se requiere ninguna acción.
-
Anteriores a v1.33.1: Habilite el módulo:
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\"}"}}'Para actualizar
storage-operator, consulte Upgrade add-ons.
Configurar una política de expansión automática
Paso 1: Comprobar que la expansión de volúmenes está habilitada en su StorageClass
kubectl get sc
La columna ALLOWVOLUMEEXPANSION debe ser true. Ejemplo de salida:
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
Utilice alicloud-disk-topology-alltype siempre que sea posible. Selecciona automáticamente el tipo de disco según el tipo de instancia y la disponibilidad de la zona, lo que reduce los fallos de aprovisionamiento. Consulte Use dynamically provisioned volumes .
Paso 2: Crear una StorageAutoScalerPolicy
Cree un archivo llamado 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
Campos clave:
|
Campo |
Descripción |
|
|
Selecciona PVC por etiqueta. Ejemplo: |
|
|
Namespaces de los PVC objetivo. Múltiples valores utilizan lógica OR. Valor predeterminado: |
|
|
Condiciones de activación. Múltiples condiciones utilizan lógica AND. |
|
|
Acciones que se ejecutan cuando se cumplen las condiciones. Se ejecuta la primera acción coincidente y se omiten las demás. |
La política se activa cuando el uso del PVC supera el 80%:
action1 agrega 50 GiB (máximo 100 GiB). Se aplica mientras el PVC tenga menos de 100 GiB.
action2 agrega el 50% del tamaño actual (máximo 300 GiB). Se aplica una vez que el PVC alcanza los 100 GiB.
Paso 3: Aplicar la política
kubectl create -f StorageAutoScalerPolicy.yaml
Verificar la expansión automática
Los siguientes pasos desencadenan cinco eventos de expansión con un StatefulSet de prueba, utilizando la política definida anteriormente.
Paso 1: Crear un StatefulSet de prueba
Cree un archivo llamado StatefulSet.yaml:
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
Aplíquelo y confirme que el pod se esté ejecutando:
kubectl create -f StatefulSet.yaml
kubectl get pod -l app=nginx
Salida esperada:
NAME READY STATUS RESTARTS AGE
nginx-0 1/1 Running 0 99s
Compruebe la capacidad inicial del disco:
kubectl exec -it nginx-0 -- df -h /data
Salida esperada:
Filesystem Size Used Avail Use% Mounted on
/dev/vdb 25G 24K 25G 1% /data
Paso 2: Desencadenar la primera expansión (de 25 GiB a 75 GiB)
Escriba 22 GB de datos para elevar el uso por encima del 80%:
kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1
Revise los eventos de expansión:
kubectl get events
Dado que el disco es de 25 GiB y el uso supera el 80%, action1 agrega 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.
Verifique la capacidad del PVC:
kubectl get pvc
Salida esperada:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
pvc-disk-nginx-0 Bound d-uf66kkzltnq6xgi9**** 75Gi RWO alicloud-disk-topology-alltype <unset> 26m
Paso 3: Desencadenar la segunda expansión (de 75 GiB a 100 GiB)
Escriba 40 GB para elevar el uso por encima del 80% nuevamente:
kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2
action1 se activa de nuevo, pero su límite de 100 GiB restringe la expansión a 100 GiB:
kubectl get events
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.
Paso 4: Desencadenar la tercera expansión (de 100 GiB a 150 GiB)
Al llegar a 100 GiB, se alcanza el límite de action1, por lo que action2 toma el control y agrega el 50% del tamaño actual:
kubectl exec -it nginx-0 -- fallocate -l 20G /data/test3
kubectl get events
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.
Paso 5: Desencadenar la cuarta expansión (de 150 GiB a 225 GiB)
action2 se activa nuevamente y agrega el 50% de 150 GiB = 75 GiB:
kubectl exec -it nginx-0 -- fallocate -l 50G /data/test4
kubectl get events
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.
Paso 6: Desencadenar la quinta expansión (de 225 GiB a 300 GiB)
action2 se activa por última vez, limitada a su máximo de 300 GiB:
kubectl exec -it nginx-0 -- fallocate -l 50G /data/test5
kubectl get events
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
Ambas acciones han alcanzado sus limits. No se realizarán más expansiones.
Siguientes pasos
Para problemas relacionados con volúmenes de disco en la nube, consulte Cloud disk volume FAQ.