From de93ff12a941499b3885c96f2a5db1df01c68756 Mon Sep 17 00:00:00 2001 From: huangzhiqiang Date: Thu, 12 Jun 2025 14:09:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=BB=9F=E4=B8=80=E4=BD=BF=E7=94=A8k8s?= =?UTF-8?q?=E7=9A=84namespace?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/build-ubuntu.yaml | 2 +- k8s/deploy.sh | 35 +++++++++++++++++++++++++++--- k8s/nginx-deployment.yaml | 10 ++++----- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/.gitea/workflows/build-ubuntu.yaml b/.gitea/workflows/build-ubuntu.yaml index 308474d..58a64b3 100644 --- a/.gitea/workflows/build-ubuntu.yaml +++ b/.gitea/workflows/build-ubuntu.yaml @@ -254,7 +254,7 @@ jobs: export HARBOR_USERNAME="${{ secrets.HARBOR_USERNAME }}" export HARBOR_PASSWORD="${{ secrets.HARBOR_PASSWORD }}" export NGINX_IMAGE_TAG="${{ github.sha }}" - export NAMESPACE="${{ vars.K8S_NAMESPACE || 'app-nginx' }}" + export K8S_NAMESPACE="${{ vars.K8S_NAMESPACE || 'app-nginx' }}" # 修改变量名 # 进入 k8s 目录 cd k8s diff --git a/k8s/deploy.sh b/k8s/deploy.sh index f153055..909319e 100644 --- a/k8s/deploy.sh +++ b/k8s/deploy.sh @@ -126,9 +126,10 @@ update_deployment_image() { # 备份原文件 cp "$deployment_file" "${deployment_file}.bak" - # 使用 sed 替换环境变量,替换 $HARBOR_REGISTRY 和 $NGINX_IMAGE_TAG + # 使用 sed 替换环境变量 sed -i.tmp "s|\$HARBOR_REGISTRY|${HARBOR_REGISTRY}|g" "$deployment_file" sed -i.tmp "s|\$NGINX_IMAGE_TAG|${image_tag}|g" "$deployment_file" + sed -i.tmp "s|\$NAMESPACE|${DEPLOY_NAMESPACE}|g" "$deployment_file" # 添加命名空间替换 # 如果有其他环境变量需要替换,可以继续添加类似的 sed 命令 # 例如:sed -i.tmp "s|\$NAMESPACE|${NAMESPACE}|g" "$deployment_file" @@ -161,12 +162,32 @@ wait_for_deployment() { print_info "等待部署就绪..." + # 添加初始检查和调试信息 + if ! kubectl get deployment "$deployment_name" -n "$namespace" &> /dev/null; then + print_error "找不到部署 $deployment_name" + print_info "检查部署状态..." + kubectl get deployments -n "$namespace" -o wide + print_info "检查Pod状态..." + kubectl get pods -n "$namespace" -o wide + print_info "检查最近事件..." + kubectl get events -n "$namespace" --sort-by='.lastTimestamp' + exit 1 + fi + if kubectl wait --for=condition=available deployment/"$deployment_name" \ --namespace="$namespace" --timeout="${timeout}s"; then print_success "部署已就绪" else print_error "部署超时,请检查部署状态" + # 添加更详细的错误信息 + print_info "Pod状态:" + kubectl get pods -n "$namespace" -l app=nginx -o wide + print_info "描述deployment:" kubectl describe deployment "$deployment_name" -n "$namespace" + print_info "最近的事件:" + kubectl get events -n "$namespace" --sort-by='.lastTimestamp' | tail -n 20 + print_info "Pod日志:" + kubectl logs -n "$namespace" -l app=nginx --tail=50 exit 1 fi } @@ -234,8 +255,14 @@ get_access_info() { main() { print_info "开始 NGINX Kubernetes 自动部署..." - # 设置默认值 - local namespace=${NAMESPACE:-default} + # 修改命名空间处理逻辑,优先使用 CI 变量 + local namespace="app-nginx" # 默认值 + if [[ -n "${K8S_NAMESPACE}" ]]; then + namespace="${K8S_NAMESPACE}" # 使用 GitHub Actions 变量 + fi + + print_info "使用命名空间: $namespace" + local deployment_file=${DEPLOYMENT_FILE:-./nginx-deployment.yaml} local image_tag=${NGINX_IMAGE_TAG:-latest} @@ -245,6 +272,8 @@ main() { create_namespace "$namespace" create_harbor_secret "$namespace" + # 添加命名空间环境变量替换 + export DEPLOY_NAMESPACE="$namespace" update_deployment_image "$deployment_file" "$image_tag" apply_k8s_config "$deployment_file" wait_for_deployment "$namespace" diff --git a/k8s/nginx-deployment.yaml b/k8s/nginx-deployment.yaml index f9a8e45..3f878d4 100644 --- a/k8s/nginx-deployment.yaml +++ b/k8s/nginx-deployment.yaml @@ -17,7 +17,7 @@ apiVersion: v1 kind: ConfigMap metadata: name: nginx-config - namespace: default + namespace: $NAMESPACE # 使用变量 data: nginx.conf: | # 由于以非root用户运行,user指令会被忽略,可以移除 @@ -182,7 +182,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment - namespace: default + namespace: $NAMESPACE # 使用变量 labels: app: nginx version: v1 @@ -330,7 +330,7 @@ apiVersion: v1 kind: Service metadata: name: nginx-service - namespace: default + namespace: $NAMESPACE # 使用变量 labels: app: nginx spec: @@ -350,7 +350,7 @@ apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa - namespace: default + namespace: $NAMESPACE # 使用变量 spec: scaleTargetRef: apiVersion: apps/v1 @@ -391,7 +391,7 @@ apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: nginx-pdb - namespace: default + namespace: $NAMESPACE # 使用变量 spec: minAvailable: 1 selector: