当前位置: 首页 > article >正文

利用k8s Infra 容器,解决pod网络故障注入的问题

目录

一、infra容器作用

二、pod网络故障注入问题

三、充分利用pod infra容器


一、infra容器的作用

我们知道,在kubernetes中,pod中容器的资源隔离主要通过namespace和cgroup来实现。那如果我们需要为pod中的容器共享某种资源应该怎么做。kubernetes 中的 pause 容器就提供了以下功能:

  • 在 pod 中担任 Linux 命名空间共享的基础;
  • 启用 pid 命名空间,开启 init 进程。

二、pod网络故障注入问题

背景:

在给pod注入网络故障,模拟pod网络延迟,丢包的场景下,会出现注入故障的目标container重启,进而导致故障恢复失败,最后只能重启相应pod来恢复故障。

如上图所示,注入故障后显示0/1的pod。

问题分析:

是什么原因导致目标pod会重启呢?故障注入本身是由tc实现的,并不会引起该问题。然后想到容器具有探针机制,当用户容器配置了livenessProbe探针时,由于容器被注入了各种网络延迟或者丢包,会导致探针失败,从而使kubelet重启container,导致后续一系列依赖之前容器的操作失败。

三、充分利用pod infra容器

思考:

那有没有一种办法可以既可以注入故障,又可以不受重启container的影响?这边想到两种方案。

1.重启查询新启动的container,对新的目标container进行故障恢复。

2.通过前面infra容器的前置知识,可以知道infra container是和pod所有容器共享networknamespace的,因此可以直接把故障做在infra容器上,并且infra容器的生命周期是和pod相同的。

解决:

有了上述两种方案,我们再对其进行比较。

在方案1中,有下面几种情况仍然会出现恢复失败:

1.在恢复过程中,恰巧目标container重启了。

2.恢复时间点在新旧container重启的间隙。

3.尝试重试并且成功的时间间隔和新旧container重启并启动的时间间隔相关。

因此,需要不停重试,直到恢复成功为止,并不是一个看上去很好的解决方案。

再看看方案2,和没有重启的故障注入、恢复假设一模一样。通过分析和尝试最后选择了方案2。

四、参考

  • The Almighty Pause Container
  • Pause 容器 · Kubernetes 中文指南——云原生应用架构实战手册


http://www.kler.cn/a/228038.html

相关文章:

  • 7.抽象工厂(Abstract Factory)
  • Git图形化工具【lazygit】
  • C语言连接Mysql
  • 推动知识共享的在线知识库实施与优化指南
  • WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)
  • 大屏 UI 设计风格的未来趋势
  • Python第十五章(文件)
  • spring boot打完jar包后使用命令行启动,提示.jar 中没有主清单属性
  • flink实战--flink的job_listener使用解析
  • 【Docker】Docker Registry(镜像仓库)
  • HTTPS之使用acme.sh申请免费ssl证书
  • Vue实现视频播放
  • 项目安全问题及解决方法-----xss处理
  • gerrit(2) | 为什么使用 gerrit
  • 蓝桥杯刷题--python-1
  • vue前端+nodejs后端通信-简单demo
  • 网络安全面试题收集
  • 线程池,定时器以及阻塞队列(生产者/消费者模型)
  • 春节技术特辑:一体化运维管理系统,让节日更放心
  • unordered_map和unordered_set
  • Spring面试大全-IOC容器03
  • deb 打包
  • 【计算机网络】Socket的SO_TIMEOUT与连接超时时间
  • 套路化编程 C# winform 自适应缩放布局
  • 【MATLAB源码-第136期】基于matlab的变色龙群优化算法CSA)无人机三维路径规划,输出做短路径图和适应度曲线
  • 乐意购项目前端开发 #7