应用场景
在 Kubernetes 集群中,常见的应用部署模式是使用 Deployment 与 LoadBalancer 类型的Service 对外提供访问。在进行应用更新或升级时,Deployment 会创建新的 Pod 并逐步替换旧的 Pod,但在这个过程中可能会出现服务中断的情况。
解决方案
为了最大程度的减少服务中断,我们可以采取一系列措施:
- 设置滚动更新策略:通过设置Deployment的滚动更新策略来控制更新的速度,可以指定更新期间的最大不可用副本数(maxUnavailable)和同时可用的最大副本数(maxSurge),通过合理设置这些参数,可以确保在更新过程中保持足够的可用性。
- 健康检查和就绪探针:在容器中配置健康检查和就绪探针,确保新Pod在完全就绪之前不会接收流量,从而减少中断。
- 外部负载均衡器配置:如果使用LoadBalancer类型的Service对外提供访问,可以配置服务对外部请求的负载均衡行为,主要包括以下两种:
- Cluster:默认模式,外部流量可以转发到其它节点上的Pod,转发时会替换掉报文的源IP为上一个转发节点的地址。
- Local:外部流量只会发给本机的Pod,转发时会保留源IP。
实践
- 登录云容器引擎控制台,单击集群名称进入集群
- 左侧菜单栏选择工作负载,在工作负载列表中,单击无状态进入Deployment列表页,单击创建新Deployment,进入Deployment配置页面。
- 单击显示 高级设置,升级策略处可以自定义MaxSurge与MaxUnavailable。本示例中配置最大不可用副本数为25%,同时可用的最大副本数为25%,用于控制工作负载的滚动步长。
- 在实例内容器选框位置,单击显示 高级设置,容器健康检查选区可以设置存活检查与就绪检查。本示例为TCP端口检查,请根据应用实际情况进行设置,配置就绪检查的启动延时探测时间为20s,用于控制工作负载滚动更新的时间间隔。
- 在实例内容器选框位置,单击显示 高级设置,对容器进行停止前处理,可以设置为工作负载收到删除请求后休眠30s,使其具备充足的时间来处理剩余请求,保证服务正常运行。
- 左侧菜单栏选择网络,在网络列表中,单击服务进入Service列表,单击创建服务,进入Service配置页面。
- 服务类型选择负载均衡,下方访问设置处会出现外部流量策略选框,用户可以自行选择Cluster类型流量策略或Local类型流量策略。
- 单击显示 高级设置,可以选择Session Affinty方式。
- None:Kubernetes不会保持与特定客户端的会话状态,每个请求都根据负载均衡算法独立地路由到后端Pod,意味着即使是来自同一客户端的连续请求,也可能被发送到不同的后端Pod上,从而不会保持会话状态。
- 客户端IP:Kubernetes将使用客户端的IP地址来决定将请求路由到哪个后端Pod,同一个客户端的请求始终转发至同一个后端的Pod对象。
- 设置完成后,进入Deployment列表页,选择某个工作负载,单击右侧重新部署,重启方式选择滚动重启,可以看到新实例被首先创建出来,然后停止旧的实例,确保始终有实例正在运行。