容器故障
随着云原生技术的发展,越来越多的应用采用容器,微服务技术,以istio为代表的服务网格就是其中最广泛使用的一种。在业务容器创建时,自动向业务服务的pod中注入proxy容器边车,经由proxy容器处理后再进行下一步转发。当proxy容器自身或其依赖的服务出现问题时,因其流量劫持动作,往往会造成整个服务不可用。
现有处理方案及缺陷
- 人工干预:当服务不可用时,通过告警通知运维人员,运维人员进行现场问题定位及处理,需要额外的人力排查成本,解决效率低。
- 自动化检测:通过中控组件从外部对proxy进行观测和判断,判断proxy故障后,直接停止proxy的流量劫持,使流量直通业务容器。但该方法仍存在很多问题,比如无法指定哪些业务应用适合进行此类检测和处理等。
故障自检与恢复方案
故障自检与恢复的关键为利用网格proxy边车自行检测并做细粒度故障处理,在检测时无需依赖外部中控系统,通过注入的检测模块进行proxy问题的判断,并在判定问题发生时,执行细粒度的流量修改,合理放通流量,保证服务可用性。
边车容器在运行时完全依赖自身主动运行自检模块,可根据预定义规则判断故障和性能问题。同时,在业务容器健康而自身无法运行而退出时,直接判断为故障。当边车容器判断自身故障时,通过预定义动作采取细粒度故障处理操作。
检测及处理步骤
- 通过namespace + labelSelector,根据自身应用的特性,自主选择自检模块管理的对象集,可精准定位到适合该场景的应用;
- 通过Policy定义边车故障的判定条件,支持通过customPolicy来自定义检测命令;
- 通过定义检测频率和失败窗口时长,避免单次抖动带来的误判;
- 通过action定义故障定位后的处理方法。
实践案例
- 自定义边车自检及处理的应用对象,自选预定义规则,持续性判断窗口。
- 通过wasm插件,在istio proxy嵌入自定义命令,通过该命令扩展自检方式和处理方式。
- proxy发生定义中的问题,并持续指定时间,自检模块快速进行流量处理,保证业务流量合理放通。