Files
taiji-AI-PAD/scripts/cleanup_aks.sh
T
2025-12-30 06:22:47 +00:00

192 lines
6.5 KiB
Bash
Executable File

#!/bin/bash
# AKS 清理脚本 - 删除所有旧镜像和命名空间
# 使用前请确保已登录 Azure CLI 并配置了正确的 AKS 和 ACR
set -e # 遇到错误立即退出
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置变量(请根据实际情况修改)
AKS_RESOURCE_GROUP="${AKS_RESOURCE_GROUP:-taiji-rg}"
AKS_CLUSTER_NAME="${AKS_CLUSTER_NAME:-taiji-aks}"
ACR_NAME="${ACR_NAME:-taijiregistry}"
NAMESPACE="${NAMESPACE:-taiji-ai}"
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW}AKS 清理脚本${NC}"
echo -e "${YELLOW}========================================${NC}"
echo ""
# 检查 Azure CLI 是否已安装
if ! command -v az &> /dev/null; then
echo -e "${RED}错误: Azure CLI 未安装。请先安装 Azure CLI。${NC}"
exit 1
fi
# 检查 kubectl 是否已安装
if ! command -v kubectl &> /dev/null; then
echo -e "${RED}错误: kubectl 未安装。请先安装 kubectl。${NC}"
exit 1
fi
# 检查是否已登录 Azure
echo -e "${YELLOW}检查 Azure 登录状态...${NC}"
if ! az account show &> /dev/null; then
echo -e "${RED}错误: 未登录 Azure。请先运行 'az login'${NC}"
exit 1
fi
echo -e "${GREEN}✓ Azure 登录状态正常${NC}"
echo ""
# 获取 AKS 凭据
echo -e "${YELLOW}获取 AKS 集群凭据...${NC}"
az aks get-credentials --resource-group "$AKS_RESOURCE_GROUP" --name "$AKS_CLUSTER_NAME" --overwrite-existing
echo -e "${GREEN}✓ AKS 凭据已获取${NC}"
echo ""
# 显示当前命名空间
echo -e "${YELLOW}当前命名空间列表:${NC}"
kubectl get namespaces
echo ""
# 确认删除操作
echo -e "${RED}警告: 此操作将删除以下内容:${NC}"
echo -e "${RED} 1. 命名空间: ${NAMESPACE} (包括所有资源)${NC}"
echo -e "${RED} 2. ACR 中的所有镜像${NC}"
echo ""
read -p "确认继续? (yes/no): " confirm
if [ "$confirm" != "yes" ]; then
echo -e "${YELLOW}操作已取消${NC}"
exit 0
fi
# 1. 删除命名空间
echo ""
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW}步骤 1: 删除命名空间${NC}"
echo -e "${YELLOW}========================================${NC}"
if kubectl get namespace "$NAMESPACE" &> /dev/null; then
echo -e "${YELLOW}正在删除命名空间: ${NAMESPACE}...${NC}"
# 删除命名空间中的所有资源
echo " 删除命名空间中的所有资源..."
kubectl delete all --all -n "$NAMESPACE" --ignore-not-found=true
kubectl delete secrets --all -n "$NAMESPACE" --ignore-not-found=true
kubectl delete configmaps --all -n "$NAMESPACE" --ignore-not-found=true
kubectl delete pvc --all -n "$NAMESPACE" --ignore-not-found=true
# 删除命名空间本身
echo " 删除命名空间..."
kubectl delete namespace "$NAMESPACE" --ignore-not-found=true
# 等待命名空间完全删除
echo " 等待命名空间完全删除..."
while kubectl get namespace "$NAMESPACE" &> /dev/null; do
echo " 等待中..."
sleep 2
done
echo -e "${GREEN}✓ 命名空间 ${NAMESPACE} 已删除${NC}"
else
echo -e "${YELLOW}命名空间 ${NAMESPACE} 不存在,跳过${NC}"
fi
# 列出所有 taiji 相关的命名空间并删除
echo ""
echo -e "${YELLOW}查找其他 taiji 相关的命名空间...${NC}"
TAIJI_NAMESPACES=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}' | tr ' ' '\n' | grep -i taiji || true)
if [ -n "$TAIJI_NAMESPACES" ]; then
for ns in $TAIJI_NAMESPACES; do
if [ "$ns" != "$NAMESPACE" ]; then
echo -e "${YELLOW}删除命名空间: $ns...${NC}"
kubectl delete namespace "$ns" --ignore-not-found=true
echo -e "${GREEN}✓ 命名空间 $ns 已删除${NC}"
fi
done
else
echo -e "${GREEN}✓ 没有其他 taiji 相关的命名空间${NC}"
fi
# 2. 删除 ACR 中的镜像
echo ""
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW}步骤 2: 清理 ACR 镜像${NC}"
echo -e "${YELLOW}========================================${NC}"
# 检查 ACR 是否存在
if ! az acr show --name "$ACR_NAME" &> /dev/null; then
echo -e "${YELLOW}ACR ${ACR_NAME} 不存在或无法访问,跳过镜像清理${NC}"
else
echo -e "${YELLOW}列出 ACR 中的仓库...${NC}"
REPOSITORIES=$(az acr repository list --name "$ACR_NAME" --output tsv 2>/dev/null || echo "")
if [ -z "$REPOSITORIES" ]; then
echo -e "${GREEN}✓ ACR 中没有镜像仓库${NC}"
else
echo "找到以下仓库:"
echo "$REPOSITORIES"
echo ""
# 删除每个仓库中的所有镜像
for repo in $REPOSITORIES; do
echo -e "${YELLOW}处理仓库: $repo${NC}"
# 列出该仓库的所有标签
TAGS=$(az acr repository show-tags --name "$ACR_NAME" --repository "$repo" --output tsv --orderby time_desc 2>/dev/null || echo "")
if [ -z "$TAGS" ]; then
echo " 仓库 $repo 中没有标签"
continue
fi
echo " 找到以下标签:"
echo "$TAGS" | head -10
if [ $(echo "$TAGS" | wc -l) -gt 10 ]; then
echo " ... (还有更多)"
fi
echo ""
# 删除所有标签
echo " 正在删除所有标签..."
for tag in $TAGS; do
az acr repository delete --name "$ACR_NAME" --image "${repo}:${tag}" --yes 2>/dev/null || true
done
echo -e "${GREEN}✓ 仓库 $repo 的所有镜像已删除${NC}"
done
echo ""
echo -e "${GREEN}✓ ACR 镜像清理完成${NC}"
fi
fi
# 3. 清理未使用的镜像(可选)
echo ""
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW}步骤 3: 清理 AKS 节点上的未使用镜像${NC}"
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW}注意: 节点镜像清理需要在每个节点上执行,这通常需要 SSH 访问权限${NC}"
echo -e "${YELLOW}如果需要清理节点镜像,请手动在每个节点上运行: docker system prune -a -f${NC}"
# 总结
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}清理完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo "已执行的操作:"
echo " ✓ 删除命名空间: ${NAMESPACE}"
echo " ✓ 清理 ACR 镜像"
echo ""
echo -e "${YELLOW}提示: 如果需要重新部署,请运行部署脚本${NC}"