摘要:在 Kubernetes 中,DaemonSet(DS)管理的 pod 如果处于 Unknown 状态,这个时候假如对DaemonSet 的yaml进行了更新,是无法触发更新的,要是手残了,手动删除了Pod,会出现对应节点上pod丢失的情况。
在 Kubernetes 中,DaemonSet(DS)管理的 pod 如果处于 Unknown 状态,这个时候假如对DaemonSet 的yaml进行了更新,是无法触发更新的,要是手残了,手动删除了Pod,会出现对应节点上pod丢失的情况。
Pod 如果处于 Unknown通常是因为节点失联(Node NotReady)或节点资源问题导致 Pod 无法被正常调度或驱逐。
kubectl get nodeskubectl describe pod-n 如果节点处于 NotReady 状态,Pod 可能因节点故障无法被驱逐。如果节点处于 Ready 状态但 Pod 仍异常,可能是 kubelet 或网络问题。
如果节点确定可以下线,我们需要手动移除该节点:
kubectl delete node DaemonSet 的机制:DaemonSet 只会在存在的节点上调度 Pod。删除节点后,DaemonSet 会认为该节点已消失,不再尝试在其上创建 Pod。如果节点是临时故障,修复后状态会自动恢复。如果节点已删除或不可达,但 Pod 仍残留为 Unknown 状态,可强制删除:
kubectl delete pod-n --grace-period=0 --force
如果节点未删除但处于 NotReady,DaemonSet 会持续尝试在该节点重建 Pod。可通过以下方式解决:
(1) 恢复节点修复节点问题(如重启 kubelet、解决资源压力):
# 登录到故障节点systemctl restart kubelet # 重启 kubelet节点恢复后,Pod 会自动重建。
kubectl cordon这会阻止新 Pod 调度到该节点,但是 DaemonSet 是有可能仍会尝试创建 Pod。
驱逐节点上所有 Pod(包括 DaemonSet):
kubectl drain --ignore-daemonsets --delete-emptydir-dataapiVersion: apps/v1kind: DaemonSetspec:updateStrategy:type: RollingUpdate # 确保使用滚动更新策略template:spec:tolerations:- operator: Exists # 允许调度到有污点的节点(按需调整)节点失联:kubelet 无法上报状态(网络故障、kubelet 崩溃)。资源压力:节点 CPU/内存耗尽,导致 kubelet 无法工作。存储问题:持久卷(PV)无法卸载,导致 Pod 卡在终止状态。内核故障:节点操作系统崩溃。来源:黎昕教育
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!