Bölgesel Enterprise SSD (ESSD) diskler, verileri aynı bölge içindeki birden fazla alanda otomatik ve eşzamanlı olarak çoğaltır. Bu sayede durum bilgisi tutan uygulamalarınız, bir alan arızalandığında herhangi bir kod değişikliği yapmadan çalışmaya devam eder. Bir düğüm veya tüm bir alan kullanılamaz hale geldiğinde Kubernetes etkilenen pod'ları başka bir alana yeniden planlar; pod'lar aynı birimi tekrar bağlar ve hemen çalışmaya devam eder.
Başlamadan önce
İlerlemeden önce aşağıdaki konuları inceleyin:
Disk overview — bölgesel ESSD'lere giriş
Limits — desteklenen bölgeler ve diğer kısıtlamalar
Elastic Block Storage billing — Kubernetes birimi olarak kullanıldığında bölgesel ESSD'ler disk kapasitesine göre kullandıkça öde modeliyle faturalandırılır
Bölgesel ESSD'lerin ne zaman kullanılacağı
| Standart disk | Bölgesel ESSD | |
|---|---|---|
| Çoğaltma | Tek alan | Birden fazla alanda eşzamanlı |
| Alan arızası yönetimi | — | Pod otomatik olarak başka bir alana yeniden planlanır |
| Kod değişikliği gerekliliği | — | Yok |
| Faturalama modeli | — | Yalnızca kullandıkça öde (Kubernetes birimi olarak) |
Durum bilgisi tutan uygulamanızın, manuel müdahale olmadan alan arızaları karşısında erişilebilir kalması gerektiğinde bölgesel ESSD kullanın.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Kubernetes 1.26 veya sonraki bir sürümü çalıştıran bir ACK managed cluster
csi-plugin ve csi-provisioner sürüm 1.33.4 veya üzeri
ACK'de bölgesel ESSD'leri kullanma
Adım 1: Düğüm desteğini onaylayın
Bölgesel ESSD'leri destekleyen tüm düğümleri listeleyin:
kubectl get node -lnode.csi.alibabacloud.com/disktype.cloud_regional_disk_auto=available
Alanlar arası yük devretmeyi doğrulamak için farklı alanlarda en az iki desteklenen düğüme ihtiyacınız vardır. Aşağıdaki adımlarda örnek olarak cn-beijing-i ve cn-beijing-l kullanılmıştır.
Adım 2: Bir StorageClass oluşturun
-
sc-regional.yamldosyasını oluşturun: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: trueTemel parametreler:
Parametre Değer Amaç typecloud_regional_disk_autoVerileri birden fazla alanda eşzamanlı olarak çoğaltan bir bölgesel ESSD sağlar volumeBindingModeWaitForFirstConsumerBirim oluşturmayı bir pod planlanana kadar erteler; böylece disk doğru alanda sağlanır. Bu ayar yapılmazsa disk yanlış alanda kilitlenebilir ve alanlar arası yük devretmeyi engelleyebilir reclaimPolicyDeleteKalıcı Birim Talebi (PVC) silindiğinde altta yatan diski siler allowVolumeExpansiontrueDisk kapasitesinin genişletilmesini etkinleştirir -
StorageClass'ı uygulayın:
kubectl apply -f sc-regional.yaml
Adım 3: Durum bilgisi tutan bir uygulama dağıtın
-
StorageClass'ı kullanan bir StatefulSet tanımlamak için
disk-test.yamldosyasını oluşturun: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 -
Uygulamayı dağıtın:
kubectl apply -f disk-test.yamlPod planlandığında CSI sürücüsü 20 GiB'lik bir bölgesel ESSD sağlar, bir Kalıcı Birim (PV) oluşturur ve bunu pod'a bağlar. Disk ardından verileri birden fazla alanda eşzamanlı olarak çoğaltmaya başlar.
Adım 4: Uygulamanın çalıştığını doğrulayın
-
PVC ve pod durumunu kontrol edin:
kubectl get pvc pvc-disk-disk-test-0 kubectl get pod disk-test-0Beklenen çıktı:
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 14mPVC bağlıdır ve pod çalışmaktadır; bu da bölgesel ESSD'nin başarıyla sağlandığını ve bağlandığını gösterir.
-
Pod'un çalıştığı düğümü ve alanı belirleyin:
kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zoneBeklenen çıktı:
NAME STATUS ROLES AGE VERSION ZONE cn-beijing.172.25.xxx.xx Ready <none> 6m32s v1.32.1-aliyun.1 cn-beijing-iPod
cn-beijing-ialanına planlanmıştır.
Adım 5: Bir alan arızasını simüle edin ve alanlar arası yük devretmeyi doğrulayın
Bu işlem, hedef alanda çalışan tüm pod'ları etkiler. Üretim ortamında gerçekleştirmeyin.
-
Bir alan arızasını simüle etmek için pod'un mevcut alanındaki tüm düğümlere taint uygulayın:
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing=regional:NoExecuteKubernetes Controller Manager (KCM) taint'i algılar, pod'u etkilenen düğümlerden çıkarır ve başka bir alandaki bir düğüme yeniden planlar.
-
Pod'un yeni durumunu ve konumunu kontrol edin:
kubectl get pod disk-test-0 kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zoneBeklenen çıktı:
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-lPod artık
cn-beijing-lalanında çalışmaktadır. Bölgesel ESSD otomatik olarak yeniden bağlanır ve veriler bozulmadan kalır; manuel senkronizasyon gerekmez.
Adım 6: Temizleme
-
cn-beijing-ialanında normal planlamayı geri yüklemek için taint'i kaldırın:kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing- -
Test kaynaklarını silin:
kubectl delete sts disk-test kubectl delete pvc pvc-disk-disk-test-0