当前位置: 首页 > 后端技术 > Node.js

Pod在多可用区worker节点上的高可用部署

时间:2023-04-03 21:10:34 Node.js

1.需求分析目前kubernetes集群中的worker节点可以支持在多可用区添加ECS。这种部署方式的目的是让多个Pod(至少两个)可以分布在不同的可用区,至少不在同一个可用区,并且已经实现了高可用或者同城容灾部署。2.效果图3.实现原理为了实现以上效果,kubernetes提供了pod亲和性和反亲和性,保证pod在node级别和可用区级别的高可用部署;具体值为topologyKey:failure-domain.beta.kubernetes.io/zone。4.实现步骤在ACK上创建集群后,无论节点是从哪个可用区添加的,都会为该节点打上对应的可用区标签。比如一个节点属于北京可用区a,那么加入kubernetes集群后,节点上会有这样一个标签:failure-domain.beta.kubernetes.io/zone:cn-beijing-a。有了上面的标签,我们在将应用程序部署到多个可用区时,就可以使用yaml文件将不同的pod分配到不同的可用区。Yaml文件示例:apiVersion:apps/v1kind:Deploymentmetadata:name:redis-cachespec:selector:matchLabels:app:storereplicas:3template:metadata:labels:app:storespec:affinity:podAntiAffinity:preferredDuringSchedulingIgnoredionDuringExecution:expression:m-key:appoperator:Invalues:-storetopologyKey:"failure-domain.beta.kubernetes.io/zone"containers:-name:redis-serverimage:redis:3.2-alpine上述yaml文件中的podAntiAffinity:部分规定的采用node的反亲和性,由于使用topologyKey:"failure-domain.beta.kubernetes.io/zone",如果failure-domain.beta.kubernetes.io/zone的key有3个值,如如cn-beijing-a,cn-beijing-b,cn-beijing-c;然后pod将被分配到这三个不同的可用性区域中。并且因为使用了preferredDuringSchedulingIgnoredDuringExecution,所以如果pod的数量大于可用区的数量,pod会尽可能的放在不同的可用区,最终多余的pod会和原来的pod在同一个可用区。有很多方法可以使用上面的方法,包括节点级别。具体可以参考:https://kubernetes.io/docs/co...由于云盘不能跨可用区挂载,如果一个pod使用了一个存储卷,则需要将pod调度到某个机器上与存储卷相同的可用区。其他存储卷如NAS、OSS可以使用上述部署方式。本文作者:朱延生阅读原文本文为云栖社区原创内容,未经许可不得转载。