Defina limiares em uma StorageAutoScalerPolicy para que o componente storage-auto-expander do storage-operator expanda os volumes de disco automaticamente.
Como funciona
Quando o storage-auto-expander detecta que o uso de disco do PVC ultrapassou o limiar definido, ele expande o volume nesta sequência:
Monitora o uso de disco nos PVCs correspondentes ao seletor de rótulos da política.
Se o uso exceder o limiar, seleciona a primeira ação correspondente e envia uma solicitação de redimensionamento ao driver CSI (Container Storage Interface).
O driver CSI redimensiona o disco em nuvem e sinaliza ao Kubernetes para redimensionar o sistema de arquivos.
A capacidade do PVC é atualizada após a conclusão do redimensionamento do sistema de arquivos.
Restrições de tempo: O intervalo máximo entre verificações de gatilho é de 2 minutos, e a expansão leva cerca de 1 minuto. Evite preencher o disco dentro de 3 minutos após uma expansão anterior.
Limitações
|
Limitação |
Detalhe |
|
Versão do Kubernetes |
Requer Kubernetes 1.16 ou posterior. Se necessário, atualize o cluster. |
|
Tipo de disco |
Discos básicos não são suportados. Consulte ResizeDisk para verificar os tipos de disco elegíveis. |
|
StorageClass |
A StorageClass do PVC deve ter |
|
Estado do Pod |
O pod da aplicação que utiliza o disco deve estar no estado Running. |
Ative o módulo storage-auto-expander
O módulo storage-auto-expander no storage-operator gerencia a expansão automática. Para verifique se o storage-operator está instalado e consultar sua versão, acesse Operations > Add-ons > Volumes.
v1.33.1 e posteriores: O módulo vem ativado por padrão. Nenhuma ação é necessária.
-
Anteriores à v1.33.1: Ative o módulo executando o comando abaixo:
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 atualizar o
storage-operator, consulte Atualizar add-ons.
Configure uma política de expansão automática
Etapa 1: Verifique se a expansão de volume está habilitada na StorageClass
kubectl get sc
A coluna ALLOWVOLUMEEXPANSION deve apresentar o valor true. Exemplo de saída:
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
Sempre que possível, utilize a alicloud-disk-topology-alltype . Ela seleciona automaticamente o tipo de disco com base no tipo de instância e na disponibilidade da zona, reduzindo falhas de provisionamento. Consulte Usar volumes provisionados dinamicamente .
Etapa 2: Crie uma StorageAutoScalerPolicy
Crie um arquivo chamado 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
Principais campos:
|
Campo |
Descrição |
|
|
Seleciona PVCs por rótulo. Exemplo: |
|
|
Defina os namespaces dos PVCs alvo. Múltiplos valores seguem lógica OR. Padrão: |
|
|
Condições de acionamento. Múltiplas condições seguem lógica AND. |
|
|
Ações executadas quando as condições são atendidas. Apenas a primeira ação correspondente é executada; as demais são ignoradas. |
A política é acionada quando o uso do PVC ultrapassa 80%:
action1: Adiciona 50 GiB (limite de 100 GiB). Aplicável enquanto o PVC estiver abaixo de 100 GiB.
action2: Acrescenta 50% do tamanho atual (limite de 300 GiB). Entra em vigor assim que o PVC atinge 100 GiB.
Etapa 3: Aplicar a política
kubectl create -f StorageAutoScalerPolicy.yaml
Verifique a expansão automática
Os passos a seguir disparam cinco eventos de expansão usando um StatefulSet de teste, com base na política definida anteriormente.
Etapa 1: Crie um StatefulSet de teste
Crie um arquivo chamado 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
Aplique a configuração e confirme se o pod está em execução:
kubectl create -f StatefulSet.yaml
kubectl get pod -l app=nginx
Saída esperada:
NAME READY STATUS RESTARTS AGE
nginx-0 1/1 Running 0 99s
Verifique a capacidade inicial do disco:
kubectl exec -it nginx-0 -- df -h /data
Saída esperada:
Filesystem Size Used Avail Use% Mounted on
/dev/vdb 25G 24K 25G 1% /data
Etapa 2: Disparar a primeira expansão (25 GiB para 75 GiB)
Grave 22 GB de dados para elevar o uso acima de 80%:
kubectl exec -it nginx-0 -- fallocate -l 22G /data/test1
Consulte os eventos de expansão:
kubectl get events
Como o disco tem 25 GiB e o uso excede 80%, a action1 adiciona 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.
Confira a capacidade do PVC:
kubectl get pvc
Saída 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
Etapa 3: Disparar a segunda expansão (75 GiB para 100 GiB)
Grave mais 40 GB para levar o uso novamente acima de 80%:
kubectl exec -it nginx-0 -- fallocate -l 40G /data/test2
A action1 é acionada outra vez, mas seu limite de 100 GiB restringe a expansão a esse valor:
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.
Etapa 4: Disparar a terceira expansão (100 GiB para 150 GiB)
Ao atingir 100 GiB, o limite da action1 é alcançado. Assim, a action2 assume e adiciona 50% do tamanho atual:
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.
Etapa 5: Disparar a quarta expansão (150 GiB para 225 GiB)
A action2 é disparada novamente, somando 50% de 150 GiB, o que resulta em 75 GiB adicionais:
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.
Etapa 6: Disparar a quinta expansão (225 GiB para 300 GiB)
Por fim, a action2 é executada uma última vez, limitada ao seu teto 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 as ações atingiram seus respectivos limits. Portanto, nenhuma expansão adicional ocorrerá.
Próximos passos
Em caso de problemas com volumes de disco em nuvem, consulte as Perguntas frequentes sobre volumes de disco em nuvem.