76 lines
3.6 KiB
Bash
76 lines
3.6 KiB
Bash
#!/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
|