生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法?

k8s考点灵魂拷问9连击之5

考点之简单描述一下k8s副本集ReplicaSet有什么作用?
考点之为什么ReplicaSet将取代ReplicationController控制器?
考点之编写 ReplicaSet 的 spec 有什么需要注意的点?
考点之k8s集群中创建非模板 Pod 为什么可能会被副本集自动收纳?
考点之线上预警k8s集群循环创建、删除Pod副本,一直无法稳定指定目标副本数量?

如果排除了是Pod内部发生了故障,从RS角度你猜测可能是什么原因?

上一期,讨论了前面五个考点,感兴趣去可以看一看【点我进入传送门】,好了,接下来继续看本期4个考点!

考点之标签Pod和可识别标签副本集ReplicaSet 先后创建顺序不同,会造成什么影响?
考点之生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法?
考点之缩放 RepliaSet 有哪些算法策略?
考点之如何去影响淘汰策略,设置单独偏好?

囧么肥事-胡说八道

考点之标签Pod和可识别标签副本集ReplicaSet 先后创建顺序不同,会造成什么影响?

假设给Pod打上的标签是 AA,同时RS标签选择器设置匹配 AA。

分为两种情况

### 预设RS标签和副本数量
RS-AA 标签选择器可识别 AA 标签
设置副本15个 ### 预设Pod标签
裸Pod-AA 标志标签 AA

第一种:RS已经创建,裸Pod随后创建

情况一:
副本等于15个,此时创建 Pod-AA
结果:
新的 裸Pod-AA 会被该 RS-AA 识别
副本数 > 15,开启平衡机制
新Pod立即被 RS 终止并实行删除操作 情况二:
副本小于15个,此时创建 Pod-AA
结果:
裸Pod-AA 创建后立即被 RS-AA识别
副本数 <= 15,开启平衡机制,收管裸Pod

第二种:裸Pod先创建,随后创建RS

情况一:
创建了小于等与15个裸Pod-AA,此时创建 RS-AA
结果:
RS-AA 创建成功后
发现存在有AA标签的Pod
将所有的Pod-AA纳入自己管辖范围
副本数 < 15,开启平衡机制
由RS-AA继续创建剩余Pod-AA补充够15个 情况二:
创建了大于15个裸Pod-AA,此时创建 RS-AA
结果:
RS-AA 创建成功后
发现存在有AA标签的Pod
将所有的Pod-AA纳入自己管辖范围
副本数 > 15,开启平衡机制
RS-AA实行删除多余Pod操作
直到副本数维持在15个

结论:无论RS何时创建,一旦创建,会将自己标签选择器能识别到的所有Pod纳入麾下,接管生存权,遵循RS规约定义的有效副本数,去开启平衡机制,维持有效标签Pod的副本数。

总之,RS尽力保证系统当前正在运行的Pod等于期望状态里指定的Pod数目。

如果想要独立创建可生存的裸Pod,一定要检查所有的RS标签选择器的可识别范围,避免自己创建的裸Pod被收纳接管。

考点之生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法?

如果线上发现有些Pod没有按照我们期望的状态来进行运行,发生了某些故障,但是其他同类型Pod却没有发生。

这种故障一般属于不易复现的故障,只会在某些偶然性的条件下触发故障,但是这个触发条件我们又不清楚,所以我们要专门针对这个故障进行问题排查。

这个时候又不希望在排查过程中影响服务的正常响应,那该怎么办呢?

隔离法,所谓隔离法,就是将 Pod 从 ReplicaSet 集合中隔离出来,让Pod脱离RS的管控范围,额有点类似赎身。

可以通过改变标签来从 ReplicaSet 的目标集中移除 Pod。

这种技术可以用来从服务中去除 Pod,以便进行排错、数据恢复等。

以这种方式移除的 Pod 将被自动替换(假设副本的数量没有改变)。

通过隔离这个目标Pod,RS会自动补充副本Pod去保证集群的高可用,我们不必担心影响到服务线的正常响应。这时候就可以针对这个目标Pod做排查,研究,里里外外的想干啥,就干啥,嘿嘿。

班级(标签666班)
老师(RS-666)
学生15个(学生证标签666班)
----------------------------- 每天上课,老师都检查学生证入班
学生1号:学生证-666班,进去
学生2号:学生证-666班,进去
...
学生20号:学生证-666班,进去 某天,学生9号的学生证被人改了999班
学生1号:学生证-666班,进去
学生2号:学生证-666班,进去
...
学生9号:学生证-999班,老师拦住了9号,不许进
...
学生20号:学生证-666班,进去

这个老师跟RS一样,很偏激,只认学生证(RS只认标签),不认人。如果改了标签,就认不出了,自己也不会再去接管了。

考点之缩放 RepliaSet 有哪些算法策略?

通过更新 .spec.replicas 字段,指定目标Pod副本数量,ReplicaSet 可以很轻松的实现缩放。

而且,ReplicaSet 控制器能确保经过缩放完成留下来的Pod数量不仅符合要求副本数量,而且Pod是可用,可操作的。

RS扩容不必说,肯定创建新的Pod副本,纳入管理。

至于缩容,降低集合规模时ReplicaSet 控制器会对所有可用的Pods 进行一次权重排序,剔除最不利于系统高可用,稳健运行的Pod。

其一般性算法如下:

  1. 首先优先选择剔除阻塞(Pending)且不可调度的 Pods。
  2. 如果设置了 controller.kubernetes.io/pod-deletion-cost 注解,则注解值较小的优先被剔除。
  3. 所处节点上副本个数较多的 Pod 优先于所处节点上副本较少者被剔除。
  4. 如果 Pod 的创建时间不同最近创建的 Pod 优先于早前创建的 Pod 被剔除

如果以上比较结果都相同,则随机剔除

考点之如何去影响淘汰策略,设置单独偏好?

前说了,RS在进行缩容操作时,有自己的一套淘汰策略根据四种淘汰策略进行权重排序,去剔除RS认为不利于系统稳健运行的Pod。

同一应用的不同 Pods 可能其利用率是不同的。在对应用执行缩容操作时,可能希望移除利用率较低的 Pods。

那么我们怎么做,才能去影响到RS的淘汰机制,保留我们自己认为需要保留的Pod呢?

前面提到了controller.kubernetes.io/pod-deletion-cost 注解值较小的Pod会优先被剔除。

我们可以通过这个注解去影响RS淘汰机制,设置个人保留偏好。

那么什么是controller.kubernetes.io/pod-deletion-cost 注解?

此注解设置到 Pod 上,取值范围为 [-2147483647, 2147483647],如果注解值非法,API 服务器会拒绝对应的 Pod。

表示从RS中删除Pod所需要花费的开销。

RS认为删除开销较小的 Pods 比删除开销较高的 Pods 更容易被删除,更有利于系统的稳健运行。

不过此机制实施仅是尽力而为,并不能保证一定会影响 Pod 的删除顺序。只能说是爱妃给皇上吹枕边风,真正做出决定的还是皇上。

注意:

此功能特性处于 Beta 阶段,默认被禁用。
通过为 kube-apiserver 和 kube-controller-manager 设置特性门控 PodDeletionCost 开启功能。

推荐阅读:【探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器?】

推荐休闲阅读:【囧么肥事】

生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法?的更多相关文章

  1. Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署

    一.在生产环境中使用Pod来工作 本节将介绍一些在生产环境中运行应用非常有用的功能. 1.持久化存储 容器的文件系统只有当容器正常运行时有效,一旦容器奔溃或者重启,所有对文件系统的修改将会丢失,从一个 ...

  2. 案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul

    #案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul #项目背景 多套业务系统, 所有节点注册到consul集群,方便统一管理 使用consul的dns功能, 所有节点hostnam ...

  3. Redis生产环境节点宕机问题报错及恢复排错

    Redis故障发现 主观下线 当cluster-node-timeout时间内某节点无法与另一个节点顺利完成ping消息通信时,则将该节点标记为主观下线状态. 客观下线 当某个节点判断另一个节点主观下 ...

  4. hadoop进阶----hadoop经验(一)-----生产环境hadoop部署在超大内存服务器的虚拟机集群上vs几个内存较小的物理机

    生产环境 hadoop部署在超大内存服务器的虚拟机集群上 好 还是  几个内存较小的物理机上好? 虚拟机集群优点 虚拟化会带来一些其他方面的功能. 资源隔离.有些集群是专用的,比如给你三台设备只跑一个 ...

  5. 生产环境中的kubernetes 优先级与抢占

    kubernetes 中的抢占功能是调度器比较重要的feature,但是真正使用起来还是比较危险,否则很容易把低优先级的pod给无辜kill.为了提高GPU集群的资源利用率,决定勇于尝试一番该feat ...

  6. Kubernetes生产环境最佳实践

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 众所周知,Kubernetes很难! 以下是在生产中使用 ...

  7. 建设Kubernetes生产环境的16条建议

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Kubernetes是用于构建高度可扩展系统的强大工具. ...

  8. MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  9. (转) 将ASP.NET Core应用程序部署至生产环境中(CentOS7)

    原文链接: http://www.cnblogs.com/ants/p/5732337.html 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Cor ...

随机推荐

  1. 【计算机理论】CSAPP ch2

    信息存储 十六进制表示法 (略) 字数据大小 大多数计算机使用8bit的块(字节)作为最小的可寻址的内存单元 字长指明了指针数据的标称大小(?) 64位系统和32位系统向后兼容 C语言中有些数据类型的 ...

  2. 『德不孤』Pytest框架 — 3、Pytest的基础说明

    目录 1.Pytest参数介绍 2.Pytest框架用例命名规则 3.Pytest Exit Code说明 4.pytest.ini全局配置文件 5.Pytest执行测试用例的顺序 1.Pytest参 ...

  3. Android开发 定时任务清理数据

    原文地址:Android开发 定时任务清理数据 | Stars-One的杂货小窝 公司项目,需要整定时任务,对数据进行清理,需要在每天凌晨0:00进行数据的清理,使用了Alarm和广播的方式来实现 P ...

  4. Centos7下,Docker的安装与使用

    一.Docker Install 1.卸载旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ ...

  5. vue文档1-VSCode介绍

    开发工具VSCode: Vue的开发工具用的是VSCode(Visual Studio Code),这款开发工具是微软官方出品,开源,免费,并且功能相当强大,使用者很多,插件相当丰富,是Vue开发的不 ...

  6. 微信小程序--给数组的每个对象添加动画(数据驱动)

    思路:用数据驱动事件,用数组的方式去对循环数组的每个对象进行操作 js代码: data:{ selectCategory: [{ name: '生产模式', content: [{ txt: '原厂' ...

  7. 利用.htaccess隐藏html和php后缀

    假设有个网页http://www.example.com/index.html或者http://www.example.com/index.php.如果我们想要隐藏.html后缀或者.php后缀,那么 ...

  8. VUE动态生成table表格(element-ui)(新增/删除)

    (直接复制即可测试) 结构(红色部分 data/prop/v-model 数据绑定): <template> <el-table size="small" :da ...

  9. PHP宝典面试笔试题目

    PHP宝典面试笔试题目 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. PHP题目 [真题68] (    ) ...

  10. C++ 反汇编:关于函数调用约定

    函数是任何一门高级语言中必须要存在的,使用函数式编程可以让程序可读性更高,充分发挥了模块化设计思想的精髓,今天我将带大家一起来探索函数的实现机理,探索编译器到底是如何对函数这个关键字进行实现的,并使用 ...