Les disques Enterprise SSD (ESSD) régionaux répliquent automatiquement et de manière synchrone les données sur plusieurs zones au sein d'une même région. Vos applications avec état continuent ainsi de fonctionner en cas de panne d'une zone, sans aucune modification du code. Si un nœud ou une zone entière devient indisponible, Kubernetes replanifie les pods concernés vers une autre zone, où ils remontent le même volume et reprennent leur activité immédiatement.
Avant de commencer
Consultez les rubriques suivantes avant de poursuivre :
Présentation des disques — introduction aux disques ESSD régionaux
Limites — régions prises en charge et autres restrictions
Facturation d'Elastic Block Storage — les disques ESSD régionaux sont facturés selon la capacité du disque, en paiement à l'utilisation, lorsqu'ils sont utilisés comme volumes Kubernetes
Quand utiliser des disques ESSD régionaux
| Disque standard | Disque ESSD régional | |
|---|---|---|
| Réplication | Zone unique | Synchrone sur plusieurs zones |
| Gestion des pannes de zone | — | Le pod est automatiquement replanifié dans une autre zone |
| Modifications de code requises | — | Aucune |
| Modèle de facturation | — | Paiement à l'utilisation uniquement (en tant que volume Kubernetes) |
Utilisez un disque ESSD régional lorsque votre application avec état doit rester disponible en cas de panne de zone, sans intervention manuelle.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster ACK managé exécutant Kubernetes 1.26 ou une version ultérieure
csi-plugin et csi-provisioner en version 1.33.4 ou ultérieure
Utiliser des disques ESSD régionaux dans ACK
Étape 1 : Vérifier la prise en charge par les nœuds
Listez tous les nœuds prenant en charge les disques ESSD régionaux :
kubectl get node -lnode.csi.alibabacloud.com/disktype.cloud_regional_disk_auto=available
Pour vérifier le basculement inter-zones, vous avez besoin d'au moins deux nœuds pris en charge situés dans des zones différentes. Les étapes ci-dessous utilisent cn-beijing-i et cn-beijing-l à titre d'exemple.
Étape 2 : Créer une StorageClass
-
Créez le fichier
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: trueParamètres clés :
Paramètre Valeur Objectif typecloud_regional_disk_autoProvisionne un disque ESSD régional qui réplique les données de manière synchrone sur plusieurs zones volumeBindingModeWaitForFirstConsumerRetarde la création du volume jusqu'à ce qu'un pod soit planifié, afin que le disque soit provisionné dans la bonne zone ; sans cela, le disque peut être verrouillé dans la mauvaise zone et bloquer le basculement inter-zones reclaimPolicyDeleteSupprime le disque sous-jacent lorsque la Persistent Volume Claim (PVC) est supprimée allowVolumeExpansiontrueActive l'extension de la capacité du disque -
Appliquez la StorageClass :
kubectl apply -f sc-regional.yaml
Étape 3 : Déployer une application avec état
-
Créez le fichier
disk-test.yamlpour définir un StatefulSet utilisant la 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 -
Déployez l'application :
kubectl apply -f disk-test.yamlLorsque le pod est planifié, le pilote CSI provisionne un disque ESSD régional de 20 GiB, crée un Persistent Volume (PV) et le monte sur le pod. Le disque commence alors à répliquer les données de manière synchrone sur plusieurs zones.
Étape 4 : Vérifier que l'application est en cours d'exécution
-
Vérifiez l'état de la PVC et du pod :
kubectl get pvc pvc-disk-disk-test-0 kubectl get pod disk-test-0Sortie attendue :
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 14mLa PVC est liée et le pod est en cours d'exécution, ce qui confirme que le disque ESSD régional a été provisionné et monté avec succès.
-
Identifiez le nœud et la zone où le pod s'exécute :
kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zoneSortie attendue :
NAME STATUS ROLES AGE VERSION ZONE cn-beijing.172.25.xxx.xx Ready <none> 6m32s v1.32.1-aliyun.1 cn-beijing-iLe pod est planifié sur
cn-beijing-i.
Étape 5 : Simuler une panne de zone et vérifier le basculement inter-zones
Cette opération affecte tous les pods s'exécutant dans la zone cible. Ne l'effectuez pas dans un environnement de production.
-
Appliquez un taint à tous les nœuds de la zone actuelle du pod pour simuler une panne de zone :
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing=regional:NoExecuteLe Kubernetes Controller Manager (KCM) détecte le taint, expulse le pod des nœuds concernés et le replanifie sur un nœud situé dans une autre zone.
-
Vérifiez le nouvel état et l'emplacement du pod :
kubectl get pod disk-test-0 kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zoneSortie attendue :
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-lLe pod s'exécute désormais dans
cn-beijing-l. Le disque ESSD régional est rattaché automatiquement et les données restent intactes, sans synchronisation manuelle requise.
Étape 6 : Nettoyer les ressources
-
Supprimez le taint pour restaurer la planification normale dans
cn-beijing-i:kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing- -
Supprimez les ressources de test :
kubectl delete sts disk-test kubectl delete pvc pvc-disk-disk-test-0