由于 Kubernetes 中的 iptables“链已存在”错误,Pod 陷入终止状态

问题描述 投票:0回答:1

我在使用 Mailu Helm 图表进行 Kubernetes 部署时遇到了一个不寻常的问题,特别是

mailu-front
组件。更新部署后,新创建的 Pod 工作正常,但旧 Pod 陷入“终止”状态。 Kubernetes 事件日志显示以下与 pod 终止相关的错误:

error killing pod: failed to "KillPodSandbox" for "237aa644-7634-4fa2-a538-f973e7f7dfab" with KillPodSandboxError: "rpc error: code = Unknown desc = failed to destroy network for sandbox \"cbbcf6eaaf47c0ef5b92b97187276d04def7bcef3e68b92889b7993ba970ce55\": plugin type=\"portmap\" failed (delete): could not teardown ipv4 dnat: running [/usr/sbin/iptables -t nat -N CNI-DN-0e851981d24bd2d807e1a --wait]: exit status 1: iptables: Chain already exists.\n" 

我正在运行一个小型 kubeadm 1.28 集群,所有节点均使用 Weave CNI 和 Debian 11 主机操作系统

尝试强制删除 Pod 未成功。这个问题似乎与 iptables 配置有关,特别是由于链已经存在而无法拆除的冲突(冲突,因为事件日志中的命令旨在创建链,而不是删除它)。

我没有找到太多有关如何解决此特定错误的信息。

如果我登录受影响节点的主机操作系统并运行 `sudo iptables -t nat -N CNI-DN-0e851981d24bd2d807e1a --wait` ,我确实可以看到输出中反映的问题:

iptables: Chain already exists.

如果我尝试使用

sudo iptables -t nat -X CNI-DN-0e851981d24bd2d807e1a --wait
删除链,iptables 会说该链已在使用中:

iptables v1.8.7 (nf_tables):  CHAIN_USER_DEL failed (Device or resource busy): chain CNI-DN-0e851981d24bd2d807e1a

我尝试重启节点,但问题仍然出现。

kubernetes iptables
1个回答
0
投票

看起来之前的终止清理还没有完成。如果您尝试强制删除,可能会导致一些意外结果,例如由于清理过程不完整而导致资源泄漏。

尝试以下诊断步骤,在 Pod 仍停留在

Terminating
状态时,进一步清理 Kubernetes 节点上的相关资源。

  • 通过 SSH 连接到目标 kubernetes 节点

  • 执行

    crictl ps
    确认CONTAINER_ID

  • 执行

    crictl pods
    确认POD_ID

  • 执行

    crictl stop CONTAINER\_ID
    停止容器

  • 相关资源应由

    kubelet
    自动删除,无需用户干预。

  • 等待几分钟,仔细检查容器和 Pod 是否仍然存在。如果是,执行

    crictl rm <CONTAINER\_ID\>
    crictl rmp <POD\_ID\>
    进行相应删除。

您可以参考官方文档了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.