kubeadm reset
该命令尽力还原由 kubeadm init
或 kubeadm join
所做的更改。
尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所作的更改。
概要
尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所作的更改。
"reset" 命令执行以下阶段:
preflight 重置预检
remove-etcd-member 移除本地 etcd 成员
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 切换到所提供的路径。 |
Reset 工作流程
kubeadm reset
负责从使用 kubeadm init
或 kubeadm join
命令创建的文件中清除节点本地文件系统。
对于控制平面节点,reset
还从 etcd 集群中删除该节点的本地 etcd Stacked 部署的成员。
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
参数:
上一条命令的输出应该在最后打印 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 工作节点并加入集群。