kubeadm reset
对由 kubeadm init
或 kubeadm join
所做更改的尽力回滚。
对由 '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 socket 的路径。如果为空,kubeadm 将尝试自动检测此值;仅当你安装了多个 CRI 或使用了非标准 CRI socket 时才使用此选项。 | |
--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 到所提供的路径。 |
Reset 工作流程
kubeadm reset
负责清理节点本地文件系统中由 kubeadm init
或 kubeadm join
命令创建的文件。对于控制平面节点,reset
还会将此节点的本地 stacked 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
命令不会清理该目录。如果同一主机稍后用作新的 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 --rm registry.k8s.io/kube-proxy:v1.33.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
目录中的任何内容。如果 $HOME/.kube/config
文件未被删除,则可能会引发问题,具体取决于在调用 kubeadm reset
后谁将有权访问此主机。如果同一个集群继续存在,强烈建议删除该文件,因为其中存储的管理员凭证将继续有效。
要清理该目录,请检查其内容,如有需要请执行备份,然后执行以下命令
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 工作节点并将其加入集群