一、      需求分析

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

二、      效果图

三、      实现原理

为了实现上述的效果,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: storereplicas: 3template:metadata:labels:app: storespec:affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- 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有三种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是可以采用上述部署方式的。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

Pod在多可用区worker节点上的高可用部署 1相关推荐

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

    一.      需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布 ...

  2. 节点部署_Pod在多可用区worker节点上的高可用部署

    一. 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可 ...

  3. K3S系列文章-使用AutoK3s在腾讯云上安装高可用K3S集群

    开篇 <K3s 系列文章> <Rancher 系列文章> 方案 在腾讯云上安装 K3S 后续会在这套 K3S 集群上安装 Rancher 方案目标 高可用 3 台master ...

  4. Linux 上的高可用中间件

    原文地址:http://www.ibm.com/developerworks/cn/linux/l-halinux/ Linux 上的高可用中间件,第 1 部分: heartbeat 与 Apache ...

  5. 阿里云 mysql 高可用_如何在阿里云上构建高可用应用

    原标题:如何在阿里云上构建高可用应用 业务高可用是我们每个项目的需求,一个经常故障的项目,会让我们觉得不靠谱而选择放弃,从而导致项目的失败.今天,我们来聊一聊,如何让你自己的业务能够更加稳固的运行! ...

  6. 近几年在淘宝及阿里云上的高可用架构演进

    原文:架构之家 主要介绍了其近几年在阿里电商平台及阿里云上的高可用设计的经验,分为两个部分:第一部分主要包括传统的淘宝店铺稳定性体系的建设及相关的基础链路设计.缓存和容灾方案的设计及部署:第二部分主要 ...

  7. mysql主节点1593从节点正常_mysqlmha高可用架构的安装_MySQL

    MMM无法完全地保证数据的一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景对于那些对数据一致性要求很高的业务,非常不建议采用MMM的这种高可用性架构,那么可以 ...

  8. 构建Oracle高可用环境HA rac:企业级高可用数据库架构、实战与经验总结

    1.1  理解Oracle数据库 1.2  Oracle高可用特性(High Availability) 1.3  搭建高可用的周边辅助环境 1.4  高可用应用设计 1.5  高可用数据库设计 1. ...

  9. Hyper-V 2节点集群高可用的限制

    豆子使用学习windows 2012 Hyper-V的集群大概半年多了,这阶段看了很多人的博客,自己也搭建过实验环境,最后工作环境中也搭建了一个,但是直到上周,才发现双节点集群的在高可用方面的限制性. ...

最新文章

  1. github上搭建个人博客
  2. 【IOS】自定义UIAlertView样式,实现可替换背景和按钮
  3. 看完这篇不要告诉我不会封装ant design弹框组件了
  4. java sleep唤醒_JAVA wait(), notify(),sleep详解(转)
  5. 2015-10-07 jQuery2
  6. 99.6%屏占比 vivo NEX 3升级版入网:865+55W快充
  7. strace的简单用法
  8. java代码转python代码_如何实现Java代码转换成python代码
  9. linux下实现getch()函数的功能,Linux下实现getch()函数功能
  10. hive mapreduce reducer 调优
  11. android恢复微信好友,安卓微信好友误删怎么办?这样有效恢复!
  12. 使用Excel 提取文本中的数字
  13. 使用Xamarin实现跨平台移动应用开发(转载)
  14. 手机怎么共享已经连接到的wifi给电脑让电脑上网
  15. 解决MySQL CPU占用100%的经验总结 转
  16. c++ strstr函数的实现
  17. 利用JavaFX实现风险中性下股票价格的二叉树模型
  18. 点到超平面的距离公式
  19. 瓢城旅行社网页界面设计(HTML+CSS)
  20. 《架构即未来》-技术与商业须融汇贯通!前eBay CTO的实战真经

热门文章

  1. android找不到符号_快速搭建Android开发环境——Android Studio(附ADB找不到设备)...
  2. 黄金分割小数点后100位小数的c语言编程,黄金分割数小数点后100位
  3. jop怎么读音英语怎么说_“春晚”英语怎么说?
  4. c语言 把字符串转换为变量名_如何将抓取下来的unicode字符串转换为中文
  5. android属性动画缩放和平移同时,Android 实现属性动画平移,旋转,缩放,渐变 《H》...
  6. tabulate matlab,matlab中用于统计矩阵数据频率,出现次数的函数
  7. phpstudy能安装不带mysql的么_装了phpstudy还需要装mysql吗
  8. 把HTML代码上传到gitee,使用git上传项目到gitee以及VS使用git管理项目
  9. PPT下载下来是php,用php下载jpg,doc,ppt文件已损坏
  10. 人一生中最该看清的5个真相