如何删除 Kubernetes 中损坏的节点

mgg*_*mgg 8 kubernetes

我有一个带有一个主节点和两个节点的 kubernetes 集群。出于某种原因,集群无法访问某个节点,因此所有 pod 都移至另一个节点。问题是损坏的节点保留在集群中,但我认为主节点应该自动删除节点并创建另一个节点。

谁能帮我?

Bil*_*ill 11

我还有另一种情况,在AWS EKS中,节点已从AWS控制台终止,然后我发现EKS节点无法通过命令删除kubectl delete node <node_name>

最后我明白节点由于终结器而陷入删除状态

按照以下步骤,您可以将节点从集群中清除

尝试删除状态为 的节点NotReady,但无法删除它们。

$  kk get nodes
NAME                                                 STATUS     ROLES    AGE   VERSION
ip-192-168-103-252.ap-southeast-2.compute.internal   NotReady   <none>   26h   v1.22.6-eks-7d68063
ip-192-168-106-14.ap-southeast-2.compute.internal    NotReady   <none>   26h   v1.22.6-eks-7d68063
ip-192-168-126-54.ap-southeast-2.compute.internal    NotReady   <none>   26h   v1.22.6-eks-7d68063
ip-192-168-128-106.ap-southeast-2.compute.internal   Ready      <none>   43m   v1.22.6-eks-7d68063
ip-192-168-179-235.ap-southeast-2.compute.internal   Ready      <none>   12h   v1.22.6-eks-7d68063
Run Code Online (Sandbox Code Playgroud)

所以当你kubectl delete node在以上3个NotReady节点上运行时,它们是无法删除的。

封锁节点

$ kubectl cordon ip-192-168-103-252.ap-southeast-2.compute.internal
Run Code Online (Sandbox Code Playgroud)

排空节点

$ kubectl drain ip-192-168-103-252.ap-southeast-2.compute.internal --force --ignore-daemonsets
Run Code Online (Sandbox Code Playgroud)

如果运行kubectl delete node <node_name,这些节点仍然无法删除。

清理终结器

$ kubectl patch node/ip-192-168-103-252.ap-southeast-2.compute.internal -p '{"metadata":{"finalizers":[]}}' --type=merge
Run Code Online (Sandbox Code Playgroud)

删除节点

现在你可以删除它了

$ kubectl delete node ip-192-168-103-252.ap-southeast-2.compute.internal 

$  kk get nodes
NAME                                                 STATUS     ROLES    AGE   VERSION
ip-192-168-128-106.ap-southeast-2.compute.internal   Ready      <none>   43m   v1.22.6-eks-7d68063
ip-192-168-179-235.ap-southeast-2.compute.internal   Ready      <none>   12h   v1.22.6-eks-7d68063
Run Code Online (Sandbox Code Playgroud)


Mal*_*ata 9

我选择:

如果您在 GKE 上工作并且拥有 HA 集群,那么如果您启用了自动缩放模式,那么在几分钟后应该会自动删除处于 NotReady状态的节点。一段时间后,将添加新节点。

II 选项: 如果您使用 kubeadm:

如果您没有开启自动缩放模式和 HA 集群,则不会自动删除状态为NotReady 的节点。节点将不断检查并重新启动。

如果您让 Prometheus 检查指标在您的节点上发生了什么,该节点具有 NotReady 状态或来自无法访问的节点执行命令:

$ sudo journalctl -u kubelet

如果您希望删除NotReady状态的节点,您应该手动执行此操作:

您应该先排空节点并确保节点是空的,然后再关闭它。

$ kubectl drain <node name> --delete-local-data --force --ignore-daemonsets

$ kubectl delete node <node name>

然后,在被移除的节点上,重置所有 kubeadm 安装状态:

$ kubeadm reset

重置过程不会重置或清理 iptables 规则或 IPVS 表。如果您想重置 iptables,您必须手动执行此操作:

$ iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

如果要重置 IPVS 表,必须运行以下命令:

$ ipvsadm -C

您也可以简单地关闭欲望节点:

$ shutdown -h

-h手段制止,而现在显然意味着该指令应立即执行。可以使用不同的延迟。例如,您可以改用 +6,它会告诉计算机在六分钟内运行关机程序。

在这种情况下,不会自动添加新节点。

我希望这有帮助。


Vas*_*pov -1

一旦节点变得无法通过网络访问,例如停止响应 ping - master 将自动从集群中删除此类节点。

您可以通过以下方式手动删除节点:

kubectl delete node NODE_NAME
Run Code Online (Sandbox Code Playgroud)