k8s-deploy/installer/master_remove_k8s.sh
2025-11-26 21:36:37 +08:00

76 lines
3.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -e
echo "=== Starting Kubernetes Master Node Cleanup ==="
echo "WARNING: This script will irrevocably delete all Kubernetes data, configuration,"
echo " AND YOUR LOCAL DOCKER REGISTRY'S DATA from this node."
echo " DO NOT RUN ON A PRODUCTION CLUSTER!"
echo ""
read -p "Are you absolutely sure you want to proceed? (yes/no): " CONFIRM
if [[ "$CONFIRM" != "yes" ]]; then
echo "Aborting cleanup."
exit 1
fi
echo "--- Step 0: Stopping and Cleaning Local Docker Registry ---"
# 假设你的 Registry 容器名为 'registry',并且端口是 5000
# 如果你的 Registry 容器名或端口不同,请修改这里
LOCAL_REGISTRY_CONTAINER_NAME="registry"
# 停止并删除 Registry 容器
sudo docker stop "$LOCAL_REGISTRY_CONTAINER_NAME" || { echo "❌ Local Registry container stop failed or not found, but continuing..."; }
# -v 选项会删除与容器关联的所有匿名数据卷。
# 如果你使用了具名数据卷(例如:-v my-registry-data:/var/lib/registry
# 你可能需要手动删除它sudo docker volume rm my-registry-data
sudo docker rm -v "$LOCAL_REGISTRY_CONTAINER_NAME" || { echo "❌ Local Registry container removal failed or not found, but continuing..."; }
echo " Local Docker Registry container stopped and removed."
echo "--- Step 1: Resetting kubeadm ---"
sudo kubeadm reset -f || { echo "❌ kubeadm reset failed or encountered errors, but continuing..."; }
echo "--- Step 2: Stopping and cleaning containerd (CRI Runtime) ---"
sudo systemctl stop containerd || { echo "❌ containerd service stop failed, but continuing..."; }
sudo ctr -n k8s.io containers ls -q | xargs -r sudo ctr -n k8s.io containers rm || true
sudo ctr -n default containers ls -q | xargs -r sudo ctr -n default containers rm || true
# 彻底删除 containerd 的镜像数据和配置文件 (强烈推荐)
sudo rm -rf /var/lib/containerd/* || { echo "❌ Failed to clean /var/lib/containerd, but continuing..."; }
sudo rm -rf /etc/containerd/* || { echo "❌ Failed to clean /etc/containerd, but continuing..."; }
echo "--- Step 3: Cleaning CNI network configurations ---"
sudo rm -rf /etc/cni/net.d/* || { echo "❌ Failed to clean /etc/cni/net.d, but continuing..."; }
sudo rm -rf /var/lib/cni/* || { echo "❌ Failed to clean /var/lib/cni, but continuing..."; }
echo "--- Step 4: Cleaning kubelet related files ---"
sudo rm -rf /var/lib/kubelet/* || { echo "❌ Failed to clean /var/lib/kubelet, but continuing..."; }
sudo rm -rf /var/run/kubernetes/* || { echo "❌ Failed to clean /var/run/kubernetes, but continuing..."; }
echo "--- Step 5: Removing Kubernetes configuration files ---"
sudo rm -rf ~/.kube || { echo "❌ Failed to clean ~/.kube, but continuing..."; }
sudo rm -rf /etc/kubernetes/* || { echo "❌ Failed to clean /etc/kubernetes, but continuing..."; }
echo "--- Step 6: Cleaning up iptables and IPVS rules ---"
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t raw -F
sudo iptables -t mangle -F
sudo iptables -X
if command -v ipvsadm &> /dev/null; then
sudo ipvsadm --clear || { echo "❌ Failed to clear ipvsadm rules, but continuing..."; }
fi
# 确保删除所有由 Docker daemon 自身创建的 K8s 相关网络(如果 Registry 运行在 Docker 上,并且 Docker daemon 也被 K8s 使用过)
# 再次注意:这一步通常在 K8s 节点上执行时安全,但需谨慎
sudo docker network ls -q | grep -E 'k8s|cni' | xargs -r sudo docker network rm || true
echo ""
echo "=== Kubernetes Master Node Cleanup COMPLETED ==="
echo "It is HIGHLY RECOMMENDED to reboot this node now to ensure a completely clean state."
echo "You can do this by running: sudo reboot"
echo ""
sudo systemctl daemon-reload