• Kubernetes 集群卸载指南

在 Kubernetes 的运维过程中,有时需要彻底卸载集群及相关依赖(如 Docker、Containerd)以便重新部署或者清理测试环境。本文内容提供了详细步骤和一键卸载脚本

blog-thumb

在 Kubernetes 的运维过程中,有时需要彻底卸载集群及相关依赖(如 Docker、Containerd)以便重新部署或者清理测试环境。以下内容提供了详细步骤和一键卸载脚本。

1、卸载步骤

1.1 停止并移除节点

在 Master 节点执行:

kubectl drain <节点名> --delete-local-data --force --ignore-daemonsets
kubectl delete node <节点名>

在每个节点执行:

sudo systemctl stop kubelet
sudo systemctl disable kubelet
sudo kubeadm reset -f

1.2 删除 Kubernetes 相关目录

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

1.3 清理网络规则

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

1.4 卸载 Kubernetes 组件

Ubuntu/Debian

sudo apt-get purge -y kubeadm kubectl kubelet kubernetes-cni kube*
sudo apt-get autoremove -y
sudo apt-get clean

CentOS/RHEL

sudo yum remove -y kubeadm kubectl kubelet kubernetes-cni kube*
sudo yum autoremove -y

1.5 卸载 Docker / Containerd

Docker

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

Containerd

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

1.6 清理 systemd 并重启

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo reboot

完成上述步骤后,节点会恢复到干净状态,可用于重新部署 K8s 集群。

2、一键卸载脚本

以下脚本整合了以上步骤,并增加交互确认,避免误操作。

#!/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 集群。