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

简介: 当前很多公有云客户都有通过多可用区部署应用来解决应用高可用或者容灾的相关问题,在kubernetes上也可以通过pod的亲和性和反亲和性将pod分布在不同的可用区,已达到高可用或容灾的目的,本文主要是简单介绍下这种情况下,如何实现pod的多可用区高可用部署。

 

一、      需求分析

当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用区,已达到高可用或者同城灾备的部署。

 

二、      效果图

8482bb2adea11a65a5143df914c6b5750259d3a2

三、      实现原理

为了实现上述的效果,kubernetes提供了pod的亲和性和反亲和性来保证pod在节点级别,可用区级别的高可用部署;具体的值为topologyKey:failure-domain.beta.kubernetes.io/zone。

 

四、      实现步骤

在ACK上创建完集群后,不论从哪个可用区添加节点,都会对该节点打上对应的可用区标签,比如,一个节点是属于北京可用区a的,那么在加入到kubernetes集群后,该节点上会有一个这样的标签:failure-domain.beta.kubernetes.io/zone: cn-beijing-a。

在有了上述标签后,对应用进行多可用区部署时,我们就可以使用一下yaml文件来使不同的pod分配到不同的可用区。

     Yaml文件示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-cache
spec:
  selector:
    matchLabels:
      app: store
  replicas: 3
  template:
    metadata:
      labels:
        app: store
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - store
            topologyKey: "failure-domain.beta.kubernetes.io/zone"
      containers:
      - name: redis-server
        image: redis:3.2-alpine

上面yaml文件中的podAntiAffinity:部分规定了node的反亲和性,并且由于使用了topologyKey: "failure-domain.beta.kubernetes.io/zone",如果failure-domain.beta.kubernetes.io/zone这个key有三种value,比如cn-beijing-a,cn-beijing-b,cn-beijing-c;那么pod会被分配在这三个不同的可用区。并且由于使用了preferredDuringSchedulingIgnoredDuringExecution,所以如果pod个数大于可用区个数的话,pod会尽可能的放在不同的可用区,最后会出现多出来的pod会与原有pod在同一个可用区。

上面的使用方式还有很多种,包括node级别的,详细请参考:https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity


五、      注意问题(云盘)

    由于云盘不能跨可用区挂载,如果有pod使用了存储卷,该pod需要被调度到与存储卷相同的可用区的机器上。

    其他存储卷比如NAS,OSS是可以采用上述部署方式的。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
2026最新丨1688新手开店必做的操作指南,运营自学全流程!
2025倒计时开启,计划在1688开店?本文为新手商家梳理八大必备操作:完善企业信息、下载商家工具、关联收款账户、开通买家保障与先采后付、设置自动回复、配置运费模板、持续上新商品。从信任建立到服务优化,助力新店快速提升竞争力,获取平台流量支持。细节决定成败,专业成就未来,掌握【1688超级运营成长手册】,实现店铺持续增长!
|
2天前
|
人工智能 IDE API
从Prompt工程到Skill工程:Agent Skills开放标准彻底改变了AI协作方式
本文介绍了 Agent Skill 这一新兴的 AI 开放标准,将带你从是什么到怎么用在实际工作中,彻底掌握这个比 Prompt 更高级、比 MCP 更易用的 AI 编程神器。
164 2
|
虚拟化
【错误记录】VMware 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )
【错误记录】VMware 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )
8559 0
【错误记录】VMware 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )
|
7月前
|
Arthas 监控 Java
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
|
数据可视化 搜索推荐 大数据
Plotly Express可视化图表
【10月更文挑战第19天】Plotly Express 是 Plotly 的高级 API,提供了一种简单直观的方法来创建各种类型的交互式图表。本文介绍了如何使用 Plotly Express 快速生成从简单散点图到复杂大数据集图表的多种可视化效果,包括安装方法、基本示例、复杂图表、动态图表和子图布局等内容。通过本文,您将学会如何利用 Plotly Express 进行高效的数据可视化。
|
传感器 物联网 开发工具
低功耗蓝牙和 Wi-Fi 哪个成本更低
低功耗蓝牙和Wi-Fi在成本上各有优势。低功耗蓝牙芯片成本较低,功耗更小,适合简单数据传输;而Wi-Fi传输速率高,但芯片成本和功耗相对较高,适用于复杂网络环境。具体选择需根据应用场景决定。
|
缓存 网络协议 Unix
Linux 内核参数
Linux 内核参数
675 1
关闭阿里云的短信提醒
阿里云方便是方便,但是有太多的短信骚扰,所以可以考虑关闭一些阿里云的短信提醒 找到消息中心  如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.
3038 0
|
缓存 自然语言处理 Java
Elasticsearch 断路器报错了,怎么办?
Elasticsearch 断路器报错了,怎么办?
|
前端开发 Java 开发工具
盘点Java GUI框架
盘点Java GUI框架
1063 0