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清理完成!"