kubeadm reset

尽力撤销 `kubeadm init` 或 `kubeadm join` 所做的更改。

Synopsis

尽力撤销由“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]

Options

--cert-dir string     Default: "/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

重置帮助

--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 init` 或 `kubeadm join` 命令创建的文件。对于控制平面节点,`reset` 还会从 etcd 集群中移除该节点本地的堆叠 etcd 成员。

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

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

外部 etcd 成员的清理

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

要擦除 etcd 数据,建议使用 etcdctl 等客户端,例如:

etcdctl del "" --prefix

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

CNI 配置的清理

CNI 插件使用 `/etc/cni/net.d` 目录来存储其配置。`kubeadm reset` 命令不会清理该目录。在主机上保留 CNI 插件的配置可能会有问题,如果该主机以后被用作新的 Kubernetes 节点,并且该集群中部署了不同的 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 --rm registry.k8s.io/kube-proxy:v1.34.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

下一步

  • kubeadm init 用于引导 Kubernetes 控制平面节点
  • kubeadm join 以引导 Kubernetes 工作节点并将其加入集群。
最后修改日期:2025 年 1 月 15 日太平洋标准时间下午 3:49:kubeadm-reset:添加有关更多手动清理步骤的说明 (fc222599a9)