kubeadm reset
尽力回滚 kubeadm init 或 kubeadm 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 init 或 kubeadm join 命令创建的。对于控制平面节点,reset 还会从 etcd 集群中删除此节点的本地堆叠 etcd 成员。
可以使用 kubeadm reset phase 执行上述工作流程的单独阶段。要跳过阶段列表,可以使用 --skip-phases 标志,其工作方式类似于 kubeadm join 和 kubeadm 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 命令不会清理该目录。将 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.35.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 工作节点并将其加入集群