本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
ESSD同城冗余云盘是一种全新的ESSD云盘,写入该云盘的数据会自动存放在多个可用区,可用区的IDC、机柜、电力等均实现物理隔离。基于ESSD同城冗余部署应用,有状态的应用可以零改造成本,从单可用区应用升级为具有跨可用区级容灾能力的应用,当节点或可用区发生故障,或单可用区资源不足时,均可将该容器迁移到其他可用区,无需进行复杂的数据同步和数据校验,帮您实现更加简化的数据高可用架构。
阅读前提示
为了使您更好地了解ESSD同城冗余云盘,建议您在阅读本文之前,了解以下内容:
前提条件
已创建ACK托管集群,且集群为1.26及以上版本。集群中csi-plugin和csi-provisioner组件版本为1.31.3及以上,请参见csi-plugin、csi-provisioner。
使用方法
确认支持ESSD同城冗余云盘的节点,并为该节点打标,以确保相关调度策略正常。
请在ECS网页控制台上尝试创建新实例,或为已有实例挂载ESSD同城冗余云盘,若可以挂载成功则说明该节点支持挂载ESSD同城冗余云盘。具体操作,请参见创建ESSD同城冗余云盘。
执行以下命令,为节点打标。
kubectl label node <node-name> node.csi.alibabacloud.com/disktype.cloud_regional_disk_auto=available
如需验证跨可用区迁移能力,则至少需要准备2个处于不同可用区的节点。下文以cn-beijing-i和cn-beijing-l为例。
创建StorageClass。
使用以下内容,创建sc-regional.yaml文件。
其中,
type
参数为cloud_regional_disk_auto
。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: true
执行以下命令,创建StorageClass。
kubectl apply -f sc-regional.yaml
创建测试应用。
使用以下内容,创建disk-test.yaml文件。
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
执行以下命令,创建应用并申请所需的云盘。
kubectl apply -f disk-test.yaml
确认应用正常运行,并确认当前可用区。
执行以下命令查看PVC和Pod状态:
kubectl get pvc pvc-disk-disk-test-0 kubectl get pod disk-test-0
预期输出:
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 14m
可见同城冗余云盘已申请成功,Pod已挂载云盘并正常运行。
执行以下命令查看它调度到的Node:
kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zone
预期输出:
NAME STATUS ROLES AGE VERSION ZONE cn-beijing.172.25.xxx.xx Ready <none> 6m32s v1.32.1-aliyun.1 cn-beijing-i
说明该Pod调度到了cn-beijing-i可用区。
为节点添加污点,模拟可用区故障。观察Pod可以带着云盘在另一可用区成功拉起。
警告这会影响该可用区中所有正在运行的Pod,请勿在生产环境操作。
执行以下命令,为Pod当前运行的可用区的所有节点添加污点:
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing=regional:NoExecute
KCM将驱逐该可用区上的Pod,然后它会在其他可用区重建。执行以下命令以观察Pod状态和它调度到的新节点:
kubectl get pod disk-test-0 kubectl get node $(kubectl get pod disk-test-0 -ojsonpath='{.spec.nodeName}') -Ltopology.kubernetes.io/zone
预期输出:
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-l
可见该Pod已成功在cn-beijing-l可用区拉起。云盘中的数据也均可以在新可用区访问。
执行以下命令,清理测试所使用的污点和资源:
kubectl taint node -ltopology.kubernetes.io/zone=cn-beijing-i testing- kubectl delete sts disk-test kubectl delete pvc pvc-disk-disk-test-0