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