CCE Turbo集群使用云原生网络2.0,用户在集群中部署工作负载应用时,容器网络将 使用弹性网卡/辅助弹性网卡能力,应用发布成了LoadBalance类型的Service或Ingress 且对接的独享型ELB,经过ELB的访问流量支持直通到容器中;当应用进行滚动升级或 者弹性扩缩容,通过配置容器探针,最短就绪时间等可以做到优雅升级,从而实现优 雅弹性扩缩容(在升级或者扩缩容过程中业务不会出现5xx的错误响应)。
操作步骤
下文以nginx的无状态工作负载为例子,提供了CCE Turbo集群中应用进行优雅滚动升 级或者弹性扩缩容最佳实践。
步骤1 在CCE控制台,单击左侧栏目树中的“工作负载 > 无状态负载 Deployment”,单击 右上角“创建无状态工作负载”。
图3-47 创建 nginx 无状态应用
步骤2 在容器设置步骤中,单击展开“健康检查”,如下图设置工作负载业务探针。
该配置的作用:检查用户业务是否就绪,不就绪则不转发流量到当前实例。
图3-48 配置业务探针
步骤3 单击展开“生命周期”,配置容器的“停止前处理”,保证容器在退出过程中能够对 外提供服务。
该配置的作用:保证业务容器在退出过程中能够对外提供服务。
图3-49 配置停止前处理
步骤4 单击“下一步:工作负载访问设置”,如下图设置访问类型和端口配置。
图3-50 创建 nginx 的 Service 服务
步骤5 单击“下一步”并完成工作负载的创建,配置最短就绪时间,最短就绪时间用于指定 新创建的Pod在没有任意容器崩溃情况下的最小就绪时间,只有超出这个时间Pod才被 视为可用,推荐的配置时长为业务容器的启动预期时间加上ELB服务下发member到生 效的时间。
图3-51 配置最短就绪时间
步骤6 存量工作负载可在工作负载详情中修改,修改方式请单击右上角的“编辑YAML”进行 配置。如下图所示:
图3-52 配置最短就绪时间(YAML 方式)
说明
最短就绪时间用于指定新创建的Pod在没有任意容器崩溃情况下的最小就绪时间,只有超出这个 时间Pod才被视为可用。
步骤7 创建对接独享型负载均衡类型的service。
图3-53 创建对接独享型负载均衡类型的 service
步骤8 配置完成后,我们对应用进行升级和弹性扩缩容的打流测试:准备一台集群外的客户 端节点(集群的节点访问service会进行集群内转发而不经过ELB),预置检测脚本 detection_script.sh,将下列内容拷贝到脚本中,其中192.168.12.82:80为service的访 问地址:
#! /bin/bash for (( ; ; ))
do curl -I 192.168.12.82:80 | grep "200 OK"
if [ $? -ne 0 ]; then
echo "response error!"
exit 1
fi done
步骤9 运行检测脚本:bash detection_script.sh,并在CCE界面触发应用的滚动升级,如下 方例子为增加了容器的环境变量,触发了应用的滚动升级。
图3-54 触发应用的滚动升级
步骤10 我们可以观察到,滚动升级的过程中,应用的访问并未中断,且返回的请求都是200 ok,证明我们的升级过程是优雅升级,是没有中断的。
图3-55 优雅升级结果
----结束
3.14 LoadBalancer 类型 Service 使用 pass-through 能力
应用现状
Kubernetes集群可以将运行在一组Pod上的应用程序发布为服务,提供统一的四层访 问入口。对于Loadbalancer类型的service,kube-proxy默认会将Service的status中 LoadbalanceIP地址配置到节点本地的转发规则中,集群内部访问ELB的地址,流量就 会在集群内部转发,而不会经过ELB转发。
集群内部转发功能是kube-proxy组件负责,kube-proxy有iptables和IPVS两种转发模 式,iptables是一种简单的轮询转发,IPVS虽有多种转发模式,但也需要修改kube-proxy的启动参数,不能像ELB那样灵活配置转发策略,且无法利用ELB的健康检查能 力。
解决方案
CCE服务支持pass-through能力,通过Loadbalance类型Service配置kubernetes.io/
elb.pass-through的annotation实现集群内部访问Service的ELB地址时绕出集群,并通 过ELB的转发最终转发到后端的Pod。
图3-56 pass-through 访问示例
● 针对CCE集群:
– 集群内部访问LB类型service,默认行为是通过iptables/ipvs转发到后端的容 器实例。
– LB类型service配置elb.pass-through,集群内访问Service地址流量能支持先 转发到ELB,利用了ELB的负载均衡能力回到节点。
● 针对CCE Turbo集群:
– 集群内部访问LB类型service,默认行为是通过iptables/ipvs转发到后端的容 器实例。
– LB类型service配置elb.pass-through,集群内访问Service地址流量能支持先 转发到ELB,利用了ELB的负载均衡能力流量直通到容器中。