为了应对集群单点宕机故障,分布式容器云平台CCE One的集群联邦提供多集群多活应用、秒级流量接管能力。业务应用的实例可以多集群多活的部署在不同容器集群服务中,当集群单点宕机故障发生时,集群联邦可以秒级自动完成应用实例的弹性迁移以及流量的切换,业务的可靠性大大提升。
多活容灾方案示意如下图所示,通过创建域名访问规则,将应用分发到多个Kubernetes集群,包括两个天翼云CCE集群(部署在不同Region)和一个其他云的Kubernetes集群,实现应用的多活容灾。
前提条件
已开通一个天翼云CCE集群和一个三方云集群。
已订购具备策略解析能力的公网DNS服务,例如GTM等;天翼云当前无此类产品售卖,因此需用户自行准备,或找专门的DNS服务提供商购买。
适用场景
对应用容灾高可用有较高要求,希望实现业务极致弹性及高可用的场景。
操作指引
本文将基于天翼云CCE集群和阿里云ACK集群,演示如何实现多集群应用容灾与自动迁移能力。
步骤一:将天翼云CCE集群及三方云集群,注册到CCE One,并加入到联邦成员中
在【集群资源】->【注册集群】页面,选择天翼云类型注册集群,并根据指引将提前创建的天翼云CCE集群和阿里云ACK集群关联进来;
进入【舰队管理】页面,创建舰队并添加上面关联的两个CCE One注册集群;
进入【联邦管理】页面,根据指引订购集群联邦实例,并将联邦实例与上面的舰队进行关联;
由于舰队中成员集群与联邦存在跨资源池情况,联邦联通网络可能需要用户手工干预才能联通;具体可参考指引 打通注册集群与联邦实例之间的联通网络
如下图所示: 已成功注册到联邦的成员集群,其【接入联邦状态】应为“已连接”;若连接状态为“添加失败”,则可以参考上面指引进行网络配置调整,并修改【联邦网络类型】到对应类型后,触发后台再次自动尝试连接。
步骤二:创建联邦工作负载及其访问路由
为展示流量切换的效果,本文中两个集群的容器镜像版本不同(实际生产环境中并不会存在此差异)。
集群cce-cceone-demo1:示例应用使用nginx:cce镜像,返回“this is cce cluster application”。
集群cceone-thi-ib1bcj:示例应用使用nginx:aliyun镜像,返回“this is aliyun cluster application”。
在开始操作之前,您需要将示例应用的镜像上传到对应集群所在区域的镜像仓库中(也就是说,nginx:cce镜像需要上传至天翼云华东1,nginx:aliyun镜像上传至阿里云),否则联邦工作负载会因拉取不到镜像而异常。
1. 登录CCE One控制台,选择左侧导航栏中的“舰队联邦”->“联邦管理”。
2. 单击对应联邦实例名称,进入详情页面。
3. 在左侧导航栏选择“工作负载->无状态”,单击右上角“创建Deployment”。
4. 填写基本信息并配置容器参数,镜像可以任意设置,单击“下一步:调度与差异化”。
5. 设置集群调度策略,完成集群差异化配置,单击“创建工作负载”。
调度方式:选择“集群权重”,并设置两个集群的权重为1:1。
差异化配置:单击集群左侧的开关图标开启差异化配置,设置集群cce-cceone-demo1的镜像名称为“registry-huadong1.crs-internal.ctyun.cn/open-source/nginx:cce”(nginx:cce镜像在镜像仓库中的地址,请以实际为准),集群cceone-thi-ib1bcj的镜像名称请改为上传到阿里云中的实际镜像地址。
6. 创建LoadBalancer访问service
登录天翼云CCE One控制台,选择左侧导航栏中的“舰队联邦”->“联邦管理”。
单击对应联邦实例名称,进入详情页面。
在左侧导航栏选择“服务”,单击左上角“创建服务”。
完成参数填写,单击“确认”。
访问类型:选择“负载均衡”。
端口配置:选择TCP协议,填写服务端口、容器端口,如8800、80。
需要结合差异化策略,确保service下发到成员集群后,可以触发对应成员集群中LB 类型Service的正常创建;
7. 创建域名访问
可以基于IDC自建DNS或专业供应商的DNS解析服务进行配置,需要具备策略解析能力;
获取上一步各个成员集群中最终创建LB类型Service访问IP,并配置到DNS解析记录中,配置对应解析权重1:1;
步骤三:多活容灾场景验证
按照上述集群应用部署操作,示例应用分别部署在集群“cce-cceone-demo1”和“cceone-thi-ib1bcj”中,并以“负载均衡”类型的服务对外提供访问。步骤二中域名访问创建成功后,可以得到一个可以公网解析和访问的域名,我们可以基于该域名来验证其实际访问和容灾能力。
1. 获取验证测试访问域名。假设为“cceone-test.ctyun.cn”;
2. 在一台已连接公网的机器上执行如下命令,持续访问域名地址,查看集群应用处理状态;正常情况下,两个集群上的应用均接收流量,并且各处理50%流量。
while true;do wget -q -O- cceone-test.ctyun.cn:8800; done
this is cce cluster application.
this is aliyun cluster application.
this is cce cluster application.
this is aliyun cluster application.
this is cce cluster application.
this is aliyun cluster application.
...
注意
测试命令应使用wget而非ping,以便每次访问目标服务均可完整的经历域名解析逻辑。
3. 当集群cceone-thi-ib1bcj上的应用异常时(通过集群节点关机来模拟应用异常),系统将所有的流量路由到cce-cceone-demo1集群处理,用户感知不到异常。
while true;do wget -q -O- cceone-test.ctyun.cn:8800; done
this is cce cluster application.
this is cce cluster application.
this is cce cluster application.
this is cce cluster application.
this is cce cluster application.
this is cce cluster application.
...