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 工作节点并加入集群。
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.