diff --git a/installer/master_remove_k8s.sh b/installer/master_remove_k8s.sh new file mode 100644 index 0000000..48f5b1b --- /dev/null +++ b/installer/master_remove_k8s.sh @@ -0,0 +1,75 @@ +#!/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