场景一:应用容器化改造(流量平滑迁移)
对于一个CLB,支持向集群内和集群外的节点传输通信量 1 )操作步骤 登录到CLB控制台以创建CLB,然后使用clbid(lb- 3359 www.Baidu.com /更多 ')服务创建将服务. beta.kubernetes.io/Ali云负载平衡器-强制-复盖-监听器设置为false,不管理拦截信息。 CCM自动创建对应的虚拟服务器组。 CAT EOF|Kube CTL应用程序- f - API版本: v1 kind:服务 元数据: 注释: service.beta.kubernetes.io/Alibaba -云负载平衡器- id : ' l B-xxxx ' service.beta.kubernetes.io/Ali云-负载平衡-聚合-监听器3360 '假' 标签: app: nignx name: my-nginx-svc namespace :默认设置 spec: 端口: -端口: 80 协议:芯片 目标端口: 80 选择器: app: nginx 类型:负载平衡器 EOF登录CLB控制台,创建监听,与虚拟服务器组关联登录CLB控制台,向虚拟服务器组手动添加集群外ECS,设置预期结果2 ) 配置完成后,CLB的虚拟服务组中将同时显示集群中的节点和集群外的ECS。 集群内APP进行缩放时,集群外的ECS节点不会受到影响。 支持场景二:金丝雀发布
金丝雀发行版,将通信按比例传输到群集内和群集外的节点 在迁移过程中,通常需要逐步将通信从库存ECS迁移到Kubernetes集群。 cm支持通过annotation service.beta.Kubernetes.io/Ali云负载平衡器权重为kubernetes群集设置权重,从而实现对通信的 1 )注意事项 不能跨越cxxxxxLB 复用虚拟服务器组一个虚拟服务器组只能与一个端口关联集群内节点权重由 CCM 组件设置,集群外 ECS 权重需要用户手动设置
2)操作步骤
登录 CLB 控制台创建 CLB、监听及虚拟服务器组,记录 CLB ID ("lb-xxxx") 及虚拟服务器组 Id ("rsp-xxx")手动在虚拟服务器组中添加集群外 ECS 并设置权重创建 ServiceapiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alicloud-loadbalancer-id: "lb-xxxxx" service.beta.kubernetes.io/alicloud-loadbalancer-vgroup-ids: "80:rsp-xxx" # 集群内部权重为20% service.beta.kubernetes.io/alicloud-loadbalancer-weight: "20" name: nginx-svc namespace: default spec: ports: - name: http port: 80 protocol: TCP targetPort: 80 selector: app: nginx sessionAffinity: None type: LoadBalancer3)预期结果
配置完成后,在 CLB 的虚拟服务组里既可以看到集群内的节点,也可以看到集群外的 ECS,集群节点的权重按照 annotation 配置。集群内应用进行扩缩容时,集群外的 ECS 节点不受影响。
场景三:多集群业务流量多活与灾备
对于一个 CLB,支持将流量转发至多个 Kubernetes 集群内
企业用户会采取多种措施以保障应用的高可用性,如创建多个集群进行备份、容灾等。这要求业务流量可以通过一个 CLB 接入多个 Kubernetes 集群中,并且支持为 Kubernetes 集群设置不同的权重,如下图所示。
1)注意事项
不能跨 CLB 复用虚拟服务器组一个虚拟服务器组只能与一个端口关联两个集群均已配置 Cluster Id,否则两个集群中的 service 需要不同名称2)操作步骤
登录 CLB 控制台创建 CLB、监听及虚拟服务器组,记录 CLB ID ("lb-xxxx") 及虚拟服务器组 Id ("rsp-xxx")集群 A 中创建 Serivce-A,权重设置为 20%apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alicloud-loadbalancer-id: "lb-xxxxx" service.beta.kubernetes.io/alicloud-loadbalancer-vgroup-ids: "80:rsp-xxx" service.beta.kubernetes.io/alicloud-loadbalancer-weight: "20" name: service-A namespace: default spec: ports: - name: http port: 80 protocol: TCP targetPort: 80 selector: app: nginx sessionAffinity: None type: LoadBalancer3)预期结果
配置完成后,在 clb 的虚拟服务组里既可以看到集群 A 内的节点,也可以看到集群 B 的节点。集群节点的权重按照 annotation 自动设置。集群内应用进行扩缩容时,CLB 后端虚拟服务器组会自动更新。
总结
出于降本增效的考虑,越来越多的企业采用容器化方式部署应用。在业务迁移过程中,如何保障业务流量不受损成为一大难题。对于电商类应用而言,业务流量下跌往往会导致交易量下跌,造成重大损失。游戏类应用对业务流量也十分敏感,短暂的流量中断都会明显地影响游戏用户体验;交通类应用的流量下跌会影响交通流量管制、交通故障排险效率。保障业务流量不受损是保障用户业务正常运转的底线。
CCM 发布的支持在同一个 CLB 后端挂载集群内节点和集群外 ECS 的功能,可以一举解决迁移过程中流量中断的难题。同时,还支持将业务流量转发至多个 Kubernetes 集群内,支撑备份、容灾等需求,保障业务高可用。
作者 | gtdpy(xhdbz)
本文为阿里云原创内容,未经允许不得转载。