命令概述:
该命令尽力还原由 kubeadm init 或 kubeadm join 所做的更改。
尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所作的更改。
执行过程:
kubeadm reset 执行一下三个阶段:
1. 运行前检查:
2. 移除本地etc成员`在这里插入代码片`
3. 清理node节点
命令格式:
kubeadm reset [选项]
选项参数如下:
-
--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
: : 要跳过的阶段列表。
Reset 工作流程
kubeadm reset 负责从使用 kubeadm init 或 kubeadm join 命令创建的文件中清除节点本地文件系统。 对于控制平面节点,reset 还从 etcd 集群中删除该节点的本地 etcd Stacked 部署的成员。
kubeadm reset phase 可用于执行上述工作流程的各个阶段。 要跳过阶段列表,你可以使用 --skip-phases 参数,该参数的工作方式类似于 kubeadm join 和 kubeadm init 阶段运行器。
实践:
前提:你必须要有一个k8s集群,我已经搭建好了,k8s 版本为 v1.28.2
[root@k8s-master ~]# kubeadm reset
执行报错了,如上图,Please define which one do you wish to use by setting the 'criSocket'
这个错误的意思是,你使用了多个 CRI 或存在非标准的 CRI 套接字。这里由于我是 v1.28.2版本,k8s
1.24版本及以上使用docker就必须在安装一个 cri-docker插件。导致存在一个非标准的CRI套接字。cri-docker 插件就为了使用docker兼容CRI做的一个垫片。解决这个报错需要执行 CRI 为 cri-docker 插件 的套接字。
[root@k8s-master ~]# kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock --dry-run
-
cri-docker
套接字默认位置在:/var/run/cri-dockerd.sock -
--dry-run
运行输出结果,但不生效。
[root@k8s-master ~]# kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock
重置节点使用需要输入yes确定,或者加上参数 -f 。
阅读了一下输出,发现有几点需要我们主要:
- 没有清理网络插件配置,需要自己清理,配置文件路径: /etc/cni/net.d
- 不会清理iptables规则或者ipvs转发,需要自己清理:
iptables: iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvs: ipvsadm -C
- 不会清理用户目录下$HOME/.kube/config 的文件(前期是有把配置文件 到目录里面)