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/11huL… 提取码:sa88
k8s 系列所有问题更新记录:GitHub Gitee