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