kubeadm reset

尽力撤销由 kubeadm initkubeadm join 所做的更改。

概要

尽力撤销 'kubeadm init' 或 'kubeadm join' 对此主机所做的更改

“reset”命令执行以下阶段

preflight           Run reset pre-flight checks
remove-etcd-member  Remove a local etcd member.
cleanup-node        Run cleanup node.
kubeadm reset [flags]

选项

--cert-dir string     默认值: "/etc/kubernetes/pki"

存储证书的目录路径。如果指定,将清理该目录。

--cleanup-tmp-dir

清理 "/etc/kubernetes/tmp" 目录

--config string

kubeadm 配置文件路径。

--cri-socket string

要连接的 CRI 套接字路径。如果为空,kubeadm 将尝试自动检测此值;仅当你安装了多个 CRI 或拥有非标准 CRI 套接字时,才使用此选项。

--dry-run

不应用任何更改;仅输出将要执行的操作。

-f, --force

重置节点,无需确认。

-h, --help

reset 帮助信息

--ignore-preflight-errors strings

一个列表,其错误将被显示为警告的检查项。例如:'IsPrivilegedUser,Swap'。值 'all' 忽略所有检查项的错误。

--kubeconfig string     默认值:"/etc/kubernetes/admin.conf"

与集群通信时使用的 kubeconfig 文件。如果未设置该标志,则可以搜索一组标准位置以查找现有的 kubeconfig 文件。

--skip-phases strings

要跳过的阶段列表

从父命令继承的选项

--rootfs string

指向“真实”主机根文件系统的路径。这将导致 kubeadm chroot 到提供的路径。

重置工作流

kubeadm reset 负责从节点本地文件系统中清理使用 kubeadm initkubeadm join 命令创建的文件。对于控制平面节点,reset 还会从 etcd 集群中移除该节点的本地堆叠 etcd 成员。

kubeadm reset phase 可用于执行上述工作流的独立阶段。要跳过一系列阶段,可以使用 --skip-phases 标志,其工作方式类似于 kubeadm joinkubeadm init 阶段运行器。

kubeadm reset 还支持 --config 标志,用于传递 ResetConfiguration 结构

清理外部 etcd 成员

如果使用外部 etcd,kubeadm reset 不会删除任何 etcd 数据。这意味着如果你使用相同的 etcd 端点再次运行 kubeadm init,你将看到来自之前集群的状态。

要擦除 etcd 数据,建议使用像 etcdctl 这样的客户端,例如

etcdctl del "" --prefix

有关更多信息,请参阅 etcd 文档

清理 CNI 配置

CNI 插件使用 /etc/cni/net.d 目录来存储其配置。kubeadm reset 命令不会清理该目录。如果同一主机稍后被用作新的 Kubernetes 节点,且在该集群中部署了不同的 CNI 插件,则将 CNI 插件的配置留在主机上可能会出现问题。这可能导致 CNI 插件之间的配置冲突。

要清理该目录,请根据需要备份其内容,然后执行以下命令

sudo rm -rf /etc/cni/net.d

清理网络流量规则

kubeadm reset 命令不会清理 kube-proxy 应用于主机的任何 iptables、nftables 或 IPVS 规则。kube-proxy 中的控制循环确保每个节点主机上的规则保持同步。有关详细信息,请参阅 虚拟 IP 和服务代理

如果主机稍后被重用为 Kubernetes 节点或用于其他目的,则保留这些规则而无需清理通常不会导致任何问题。

如果你希望执行此清理,可以使用集群中使用的相同 kube-proxy 容器以及 kube-proxy 二进制文件的 --cleanup 标志

docker run --privileged --network=host -v /lib/modules:/lib/modules:ro --rm registry.k8s.io/kube-proxy:v1.36.0 sh -c "kube-proxy --cleanup && echo DONE"

上述命令的输出最后应打印 DONE。除了 Docker,你也可以使用你喜欢的容器运行时来启动该容器。

清理 $HOME/.kube

$HOME/.kube 目录通常包含配置文件和 kubectl 缓存。虽然不清理 $HOME/.kube/cache 的内容不会造成问题,但该目录中有一个重要文件,即 $HOME/.kube/config,kubectl 使用它来对 Kubernetes API 服务器进行身份验证。在 kubeadm init 完成后,用户会被指示将 /etc/kubernetes/admin.conf 文件复制到 $HOME/.kube/config 位置,并授予当前用户访问权限。

kubeadm reset 命令不会清理 $HOME/.kube 目录中的任何内容。在调用 kubeadm reset 后,如果保留 $HOME/.kube/config 文件而不删除它,可能会产生问题,具体取决于谁有权访问该主机。如果原始集群仍然存在,强烈建议删除该文件,因为存储在其中的管理员凭据将依然有效。

要清理该目录,请检查其内容,根据需要执行备份,然后执行以下命令

rm -rf $HOME/.kube

优雅关闭 kube-apiserver

如果你的 kube-apiserver 配置了 --shutdown-delay-duration 标志,你可以在运行 kubeadm reset 之前运行以下命令,尝试为正在运行的 API 服务器 Pod 执行优雅关闭

yq eval -i '.spec.containers[0].command = []' /etc/kubernetes/manifests/kube-apiserver.yaml
timeout 60 sh -c 'while pgrep kube-apiserver >/dev/null; do sleep 1; done' || true

接下来


最后修改于 2026 年 2 月 16 日太平洋标准时间下午 11:14:docs: Add --network=host to the cleanup of network rules (e64df83920)