k8s线上某些特殊情况强制删除 StatefulSet 的 Pod 要考虑什么隐患?

考点之什么情况下,需要强制删除 StatefulSet 的 Pod?
考点之如果 StatefulSet 操作不当可能会引发什么很严重的后果?
考点之如果遇到Pod 长时间处于 'Terminating' 或者 'Unknown' 状态情况,有什么安全一些的处理手段吗?

囧么肥事-胡说八道

线上某些特殊情况下可能需要强制删除 StatefulSet 的 Pod?

什么情况下,需要强制删除 StatefulSet 的 Pod?

正常情况下

StatefulSet 常规场景下,不需要强制删除 StatefulSet 管理的 Pod。

StatefulSet 控制器会负责创建、 扩缩和删除 StatefulSet 管理的 Pods。

它尝试确保指定数量的从序数 0 到 N-1 的 Pod 处于活跃状态并准备就绪。

StatefulSet 遵循At Most One(最多一个)规则,确保在任何时候,集群中最多只有一个具有给定标识的 Pod。

特殊情况下

所谓特殊情况下必须进行强制删除,SS感知到当某个节点不可达时,不会引发自动删除 Pod。在无法访问的节点上运行的 Pod 在超时 后会进入'Terminating' 或者 'Unknown' 状态,另外当用户尝试体面地删除无法访问的节点上的 Pod 时 Pod 也可能会进入这些状态。

如果你发现 StatefulSet 的某些 Pod 长时间处于 'Terminating' 或者 'Unknown' 状态

无法自己完成正常的调度,为了k8s集群的稳定服务,这个时候可能需要手动干预,以强制的手段从 API 服务器中删除这些 Pod

如果StatefulSet 操作不当可能会引发什么很严重的后果?

应谨慎进行手动强制删除操作,因为它可能会违反 StatefulSet 固有的至多一个的规则

StatefulSets 用于运行分布式和集群级的应用,这些应用需要稳定的网络标识和可靠的存储

这些应用通常配置为具有固定标识固定数量的成员集合,每个Pod都是唯一的,独立的,你可以理解为每个人的身份证编号都是唯一的。

具有相同身份的多个成员(Pod)可能是灾难性的,可能导致数据丢失 (例如:票选系统中的脑裂场景)。

而强制删除,可能就会导致SS出现多个Pod使用同一张身份证。

违反了”每人一证“原则。

问题来了,为什么就会出现多个相同标识的Pod呢?

原来,不同于Pod体面终止的是,在进行强制删除过程中,API 服务器不会等待来自 kubelet 对 Pod 已终止的确认消息,它会立即从 API 服务器中释放该名字

我们知道StatefulSet 中每个Pod有固定标识,而且不随着Pod的重新调度而改变。

在进行重新调度的时候,新调度创建的Pod会继承上一个旧Pod的一切有用资源,比如PV,唯一标识,网络标识等。

强制删除,直接从API服务器移除Pod对象,这个时候,StatefulSet 控制器有机会去创建一个具有相同标识的替身 Pod,并且去继承旧Pod的资源。

尚未完全删除Pod,如果创建了替身,那么此时和替身共享一个唯一标识,违反 StatefulSet 固有的至多一个的规则

这是后果,主要的还是它的附带后果。

是什么呢?最绝的来了,尚未完全删除的 Pod 仍然可以与 StatefulSet 的成员通信,也就是说它仍然可以操作PV,可能导致PV数据流失。

如果遇到Pod 长时间处于 'Terminating' 或者 'Unknown' 状态情况,有什么安全一些的处理手段吗?

安全处理?

既然知道了问题产生的原因,有什么安全一些的处理手段吗?

如果遇到Pod 长时间处于 'Terminating' 或者 'Unknown' 状态情况,再进行强制删除之前可以先考虑以下处理方式:

第一种情况,如果确认节点已经不可用了 (比如,永久断开网络、断电等), 可以主动删除掉点节点对象,或者通过节点控制器来进行删除。

第二种情况,如果节点遇到网裂问题,请尝试解决该问题或者等待其解决。 当网裂愈合时,kubelet 将完成 Pod 的删除并从 API 服务器上释放其名字。

第三种情况,必须强制,无可选择。️当你确定必须执行强制删除 StatefulSet 类型的 Pod 时,你要确保有问题的 Pod 不会再和 StatefulSet 管理的其他 Pod 通信并且可以安全地释放其名字以便创建替代 Pod。

获取更多干货,欢迎关注微信公众号:囧么肥事

Kubernetes 推荐学习书

Kubernetes权威指南PDF

链接: https://pan.baidu.com/s/11huLHJkCeIPZqSyLEoUEmQ 提取码:sa88

k8s线上某些特殊情况强制删除 StatefulSet 的 Pod 要考虑什么隐患?的更多相关文章

  1. K8S线上集群排查,实测排查Node节点NotReady异常状态

    一,文章简述 大家好,本篇是个人的第 2 篇文章.是关于在之前项目中,k8s 线上集群中 Node 节点状态变成 NotReady 状态,导致整个 Node 节点中容器停止服务后的问题排查. 文章中所 ...

  2. RookeyFrame Bug 线上创建的DLL被删除了 模块无法删除 临时解决

    不知道什么情况 在线创建模块,DLL被删除了,但是模块的相关数据无法删除.可以按照下面的方法临时用一下. 产生这个的原因,好像是Config里面的NeedInit一直都是true,没有改为false, ...

  3. kafka线上滚动升级方案记录

    kafka升级方案 为什么进行kafka升级 一.修改unclean.leader.election.enabled默认值Kafka社区终于下定决心要把这个参数的默认值改成false,即不再允许出现u ...

  4. 运维笔记--线上服务器git环境配置

    场景描述: 我们采用git去管理代码分支,本地开发环境,线上服务器多数情况下也会使用git去管理程序代码,那么新的一台服务器,如果指定了目标路径作为代码存放路径,该如何配置git环境, 以达到跟远程服 ...

  5. (转) 线上环境部署MongoDB的官方建议

    本文主要内容来自MongoDB官方文档http://docs.mongodb.org/manual/administration/production-notes/.并结合了实际工作情况进行分享. 1 ...

  6. 使用tcpcopy导入线上流量进行功能和压力测试

    - 假设我们要上线一个两年内不会宕机的先进架构.在上线前,免不了单元测试,功能测试,还有使用ab,webbench等等进行压力测试. 但这些步骤非生产环境下正式用户的行为.或许你会想到灰度上线,但毕竟 ...

  7. 从线上日志统计接口访问量QPS

    这一阵子在面试,连续遇到好几家(大小厂都有)问我的项目线上qps的情况了,说实话,我作为一个大头兵,本来没关注过这个数据,只能含混地给个"大概.也许"的回答. 回来之后,我决定对业 ...

  8. TTL 机制排毒,线上k8s的Job已经通过API 增加了Job的TTL 时长,且成功响应,为什么系统还是清理了Job?

    TTL 机制排毒,线上k8s的Job已经通过API 增加了Job的TTL 时长,且成功响应,为什么系统还是清理了Job? 面试官:"已完成 Job 的 TTL 机制了解嘛?简单说说TTL存在 ...

  9. 线上服务器TCP被打满是啥情况

    从一个线上服务器警告谈谈backlog https://wangxiangnan.cc/?p=105 缘起 双十一如期而至,此时的我因为在处理客户的一个问题已经陷入了忙碌.突然,不断接到驻场实施发来的 ...

随机推荐

  1. AI 智能写情诗、藏头诗

    一.AI 智能情诗.藏头诗展示 最近使用PyTorch的LSTM训练一个写情诗(七言)的模型,可以随机生成情诗.也可以生成藏头情诗. 在特殊的日子用AI生成一首这样的诗,是不是很酷!下面分享下AI 智 ...

  2. Java里的new

    java里的new的英文意思就是"新的"的意思.在JAVA里就是创建一个新的实例,或者说一个新的对象,一个普通类在没有实例化之前,就是new之前,它的属性,方法等等在内存中都是不存 ...

  3. C语言中缀表达式求值(综合)

    题前需要了解的:中缀.后缀表达式是什么?(不知道你们知不知道,反正我当时不知道,搜的百度) 基本思路:先把输入的中缀表达式→后缀表达式→进行计算得出结果 栈:"先进先出,先进后出" ...

  4. Html设置文本换行与不按行操作

    图片来源:W3C 部分引自大佬:https://zhidao.baidu.com/question/424920602093167052.html 强制不换行 div{ white-space:now ...

  5. SpringBoot + Log4j2使用配置 (转)

    前言 后台程序开发及上线时,一般都会用到Log信息打印及Log日志记录,开发时通过Log信息打印可以快速的定位问题所在,帮助我们快捷开发.程序上线后如遇到Bug或错误,此时则需要日志记录来查找发现问题 ...

  6. linux_19

    haproxy https实现 总结tomcat的核心组件以及根目录结构 tomcat实现多虚拟主机 nginx实现后端tomcat的负载均衡调度 简述memcached的工作原理

  7. Elasticsearch使用系列-.NET6对接Elasticsearch

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...

  8. Python接口自动化测试_悠悠

    https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695###  

  9. CentOS 7.6 部署 GlusterFS 分布式存储系统

    文章目录 GlusterFS简介 环境介绍 开始GlusterFS部署 配置hosts解析 配置GlusterFS 创建文件系统 安装GlusterFS 启动GlusterFS 将节点加入到主机池 创 ...

  10. jenkins发布代码选择不同分支

    jenkins上传代码分支以前都是用变量的方式,手动实现.过程就像这样 构建时候的界面就像下面这样,需要手动输入分支版本. 或者有固定的上线分支,用参数化构建 选项参数 来选择.总之这些方法比较传统, ...