在 Kubernetes 的运维过程中,有时需要彻底卸载集群及相关依赖(如 Docker、Containerd)以便重新部署或者清理测试环境。以下内容提供了详细步骤和一键卸载脚本。
在 Master 节点执行:
kubectl drain <节点名> --delete-local-data --force --ignore-daemonsets
kubectl delete node <节点名>
在每个节点执行:
sudo systemctl stop kubelet
sudo systemctl disable kubelet
sudo kubeadm reset -f
rm -rf ~/.kube
rm -rf /etc/kubernetes
rm -rf /etc/cni/net.d
rm -rf /var/lib/etcd
rm -rf /var/lib/kubelet
rm -rf /var/lib/cni
rm -rf /var/lib/dockershim
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P FORWARD ACCEPT
sudo apt-get purge -y kubeadm kubectl kubelet kubernetes-cni kube*
sudo apt-get autoremove -y
sudo apt-get clean
sudo yum remove -y kubeadm kubectl kubelet kubernetes-cni kube*
sudo yum autoremove -y
sudo systemctl stop docker
sudo systemctl disable docker
sudo rm -rf /var/lib/docker /etc/docker /etc/systemd/system/docker.service.d
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || true
sudo yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || true
sudo systemctl stop containerd
sudo systemctl disable containerd
sudo rm -rf /var/lib/containerd /etc/containerd
sudo apt-get purge -y containerd || true
sudo yum remove -y containerd || true
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo reboot
完成上述步骤后,节点会恢复到干净状态,可用于重新部署 K8s 集群。
以下脚本整合了以上步骤,并增加交互确认,避免误操作。
#!/bin/bash
set -e
echo "====================================================="
echo "⚠️ 警告:该脚本将卸载 Kubernetes (kubeadm/kubelet/kubectl)"
echo "⚠️ 同时清理 Docker / Containerd 及其所有数据!"
echo "⚠️ 这会删除 etcd、容器镜像、Pod 数据等,无法恢复。"
echo "====================================================="
read -p "是否继续?输入 'yes' 确认: " confirm
if [[ "$confirm" != "yes" ]]; then
echo "❌ 已取消操作。"
exit 1
fi
echo "=== 停止 Kubernetes 服务 ==="
systemctl stop kubelet 2>/dev/null || true
systemctl disable kubelet 2>/dev/null || true
echo "=== 执行 kubeadm reset ==="
kubeadm reset -f 2>/dev/null || true
echo "=== 删除 Kubernetes 相关目录 ==="
rm -rf ~/.kube /etc/kubernetes /etc/cni/net.d /var/lib/etcd /var/lib/kubelet /var/lib/cni /var/lib/dockershim
echo "=== 清理 iptables 规则 ==="
iptables -F || true
iptables -X || true
iptables -t nat -F || true
iptables -t nat -X || true
iptables -t mangle -F || true
iptables -t mangle -X || true
iptables -P FORWARD ACCEPT || true
echo "=== 卸载 Kubernetes 组件 ==="
if command -v apt-get >/dev/null 2>&1; then
apt-get purge -y kubeadm kubectl kubelet kubernetes-cni kube* || true
apt-get purge -y containerd docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || true
apt-get autoremove -y
apt-get clean
elif command -v yum >/dev/null 2>&1; then
yum remove -y kubeadm kubectl kubelet kubernetes-cni kube* || true
yum remove -y containerd docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || true
yum autoremove -y
fi
echo "=== 卸载 Docker 和 Containerd ==="
systemctl stop docker 2>/dev/null || true
systemctl disable docker 2>/dev/null || true
systemctl stop containerd 2>/dev/null || true
systemctl disable containerd 2>/dev/null || true
rm -rf /var/lib/docker /etc/docker /etc/systemd/system/docker.service.d /var/lib/containerd /etc/containerd
echo "=== 清理 systemd 配置并重载 ==="
systemctl daemon-reexec
systemctl daemon-reload
echo "====================================================="
echo "✅ 卸载完成!建议执行 reboot 重启系统。"
echo "====================================================="
chmod +x uninstall_k8s.sh
sudo ./uninstall_k8s.sh
运行时会提示确认,确保你明确要删除所有 K8s 数据和容器运行时数据。 执行完毕并重启后,系统将恢复干净状态,可用于重新部署 Kubernetes 集群。