清理 k3s 节点
1. 从集群中移除节点
在主节点上执行
A. 将节点标记为不可调度
kubectl cordon <node-name>
B. 驱逐节点上的所有Pod
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
C. 删除节点
kubectl delete node <node-name>
2. 在要清理的节点上停止服务
# 停止k3s-agent服务
systemctl stop k3s-agent
systemctl disable k3s-agent
# 停止k3s服务
systemctl stop k3s
systemctl disable k3s
3. 清理文件系统
# 删除K3s服务文件
rm -f /etc/systemd/system/k3s*.service
rm -f /etc/systemd/system/k3s*.service.env
# 删除K3s二进制文件
rm -rf /usr/local/bin/k3s
# 删除K3s数据目录
rm -rf /var/lib/rancher/k3s
rm -rf /etc/rancher/k3s
# 删除CNI配置
rm -rf /etc/cni/net.d
# 删除日志
rm -rf /var/log/k3s.log
# 删除配置文件
rm -rf /etc/k3s
4. 清理网络配置
# 删除CNI接口
ip link delete flannel.1
ip link delete cni0
# 清理iptables规则
iptables-save | grep -v k3s | iptables-restore
iptables-save | grep -v flannel | iptables-restore
# 清理IPVS规则(如果使用)
ipvsadm -C
5. 清理容器运行时
# 停止所有容器
crictl stop $(crictl ps -q)
crictl rm $(crictl ps -a -q)
# 清理容器镜像
crictl rmi --all
# 如果使用containerd
systemctl stop containerd
rm -rf /var/lib/containerd
6. 清理挂载点
# 列出并卸载k3s相关的挂载点
for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }'); do
umount $mount
done
7. 重启网络服务
# 重启网络以确保清理完全
systemctl restart systemd-networkd
8. 验证清理
# 检查进程
ps aux | grep -i k3s
ps aux | grep -i containerd
# 检查网络接口
ip link show | grep -i flannel
ip link show | grep -i cni
# 检查iptables规则
iptables -L | grep -i k3s
iptables -L | grep -i flannel
9. 完整的一键清理脚本
#!/bin/bash
# 保存为 k3s-cleanup.sh
echo "开始清理K3s..."
# 停止服务
systemctl stop k3s k3s-agent 2>/dev/null
systemctl disable k3s k3s-agent 2>/dev/null
# 清理进程
killall -9 k3s-server k3s-agent k3s-node 2>/dev/null
# 清理文件
rm -rf /var/lib/rancher/k3s
rm -rf /etc/rancher/k3s
rm -rf /var/lib/kubelet
rm -rf /etc/cni/net.d
rm -f /usr/local/bin/k3s
rm -f /etc/systemd/system/k3s*.service
rm -f /etc/systemd/system/k3s*.service.env
# 清理网络
ip link delete flannel.1 2>/dev/null
ip link delete cni0 2>/dev/null
# 清理iptables
iptables-save | grep -v k3s | grep -v flannel | iptables-restore
# 清理容器运行时
crictl stop $(crictl ps -q) 2>/dev/null
crictl rm $(crictl ps -a -q) 2>/dev/null
crictl rmi --all 2>/dev/null
# 卸载挂载点
for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }'); do
umount $mount
done
# 重启网络
systemctl restart systemd-networkd
echo "K3s清理完成!"
Read other posts