Os discos Enterprise SSD (ESSD) regionais replicam dados automática e sincronizadamente entre várias zonas na mesma região. Assim, suas aplicações com estado continuam em execução mesmo durante falhas de zona, sem necessidade de alterações no código. Se um nó ou uma zona inteira ficar indisponível, o Kubernetes reagenda os pods afetados para outra zona, onde remontam o mesmo volume e retomam as operações imediatamente.
Antes de começar
Leia os tópicos a seguir antes de prosseguir:
Visão geral de discos — introdução aos ESSDs regionais
Limites — regiões suportadas e outras restrições
Faturamento do Elastic Block Storage — ESSDs regionais usados como volumes do Kubernetes são faturados por capacidade de disco no modelo pagamento conforme o uso
Quando usar ESSDs regionais
|
Disco padrão |
ESSD regional |
|
|
Replicação |
Zona única |
Síncrona entre várias zonas |
|
Tratamento de falha de zona |
— |
Reagendamento automático do pod para outra zona |
|
Alterações de código necessárias |
— |
Nenhuma |
|
Modelo de faturamento |
— |
Apenas pagamento conforme o uso (como volume do Kubernetes) |
Utilize um ESSD regional quando sua aplicação com estado precisar manter a disponibilidade durante falhas de zona, sem intervenção manual.
Pré-requisitos
Antes de iniciar, verifique se você possui:
Um cluster gerenciado ACK executando Kubernetes 1.26 ou superior
csi-plugin e csi-provisioner na versão 1.33.4 ou superior
Uso de ESSDs regionais no ACK
Etapa 1: Confirme o suporte dos nós
Liste todos os nós compatíveis com ESSDs regionais:
kubectl get node -lnode.csi.alibabacloud.com/disktype.cloud_regional_disk_auto=available
Para verificar o failover entre zonas, são necessários pelo menos dois nós compatíveis em zonas diferentes. Os exemplos abaixo utilizam cn-beijing-i e cn-beijing-l.
Etapa 2: Crie uma StorageClass
-
Crie o arquivo
sc-regional.yaml:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alibabacloud-disk-regional parameters: type: cloud_regional_disk_auto provisioner: diskplugin.csi.alibabacloud.com reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: trueParâmetros principais:
Parâmetro
Valor
Finalidade
typecloud_regional_disk_autoProvisiona um ESSD regional que replica dados sincronizadamente entre várias zonas
volumeBindingModeWaitForFirstConsumerAdia a criação do volume até o agendamento do pod, garantindo o provisionamento do disco na zona correta; sem isso, o disco pode ficar bloqueado na zona errada e impedir o failover entre zonas
reclaimPolicyDeleteExclui o disco subjacente ao excluir a Persistent Volume Claim (PVC)
allowVolumeExpansiontruePermite expandir a capacidade do disco
-
Aplique a StorageClass:
kubectl apply -f sc-regional.yaml
Etapa 3: Implantar uma aplicação com estado
-
Crie o arquivo
disk-test.yamlpara definir um StatefulSet que utiliza a StorageClass:apiVersion: apps/v1 kind: StatefulSet metadata: name: disk-test spec: replicas: 1 selector: matchLabels: app: nginx 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 volumeClaimTemplates: - metadata: name: pvc-disk spec: accessModes: [ "ReadWriteOnce" ] storageClassName: alibabacloud-disk-regional resources: requests: storage: 20Gi -
Implante a aplicação:
kubectl apply -f disk-test.yamlApós o agendamento do pod, o driver CSI provisiona um ESSD regional de 20 GiB, cria um Persistent Volume (PV) e o monta no pod. Em seguida, o disco inicia a replicação síncrona de dados entre várias zonas.
Etapa 4: Verifique se a aplicação está em execução
-
Verifique o status da PVC e do pod:
kubectl get pvc pvc-disk-disk-test-0 kubectl get pod disk-test-0Saída esperada:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-disk-disk-test-0 Bound d-2ze5xxxxxxxxxxxxxxxx 20Gi RWO alibabacloud-disk-regional <unset> 14m NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 14mA PVC está vinculada e o pod está em execução, confirmando o provisionamento e a montagem bem-sucedidos do ESSD regional.
-
Identifique o nó e a zona onde o pod está em execução:
kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zoneSaída esperada:
NAME STATUS ROLES AGE VERSION ZONE cn-beijing.172.25.xxx.xx Ready <none> 6m32s v1.32.1-aliyun.1 cn-beijing-iO pod foi agendado em
cn-beijing-i.
Etapa 5: Simular uma falha de zona e verifique o failover entre zonas
Esta operação afeta todos os pods em execução na zona de destino. Não execute este procedimento em um ambiente de produção.
-
Adicione um taint a todos os nós na zona atual do pod para simular uma falha de zona:
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing=regional:NoExecuteO Kubernetes Controller Manager (KCM) detecta o taint, remove o pod dos nós afetados e o reagenda para um nó em outra zona.
-
Verifique o novo status e a localização do pod:
kubectl get pod disk-test-0 kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zoneSaída esperada:
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 20s NAME STATUS ROLES AGE VERSION ZONE cn-beijing.172.26.xxx.xx Ready <none> 32m v1.32.1-aliyun.1 cn-beijing-lO pod agora está em execução em
cn-beijing-l. O ESSD regional é reconectado automaticamente e os dados permanecem intactos, sem necessidade de sincronização manual.
Etapa 6: Limpeza
-
Remova o taint para restaurar o agendamento normal em
cn-beijing-i:kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing- -
Exclua os recursos de teste:
kubectl delete sts disk-test kubectl delete pvc pvc-disk-disk-test-0