You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

并行执行Pipeline致Helm升级失败,求助排查与解决

解决Helm并行升级冲突与Pending操作排查问题

问题概述

并行运行两条Pipeline时触发Helm升级失败,核心报错:

Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress

执行helm revert时额外出现Deployment就绪异常:

ready.go:303: [debug] Deployment is not ready: com-front-dev/client-deployment. 0 out of 1 expected pods are ready

且目标Pod内未预装helm/kubectl工具,无法直接排查锁定状态。

涉及的Pipeline配置片段:

.pre-deploy:
  image: dtzar/helm-kubectl:latest
  stage: deploy
  tags:
    - k8s
  before_script:
    - |
      GREEN='\033[0;32m'
      NC='\033[0m'
      if kubectl get ns "$NAMESPACE"; then
          echo -e "${GREEN}namespace for project already exists${NC}"
      else
          echo -e "${GREEN}creating namespace for project${NC}"
          kubectl create namespace "$NAMESPACE"
          echo
      fi
    - *kubectl_secret_fallback
    - wget https://github.com/a8m/envsubst/releases/download/v1.4.2/envsubst-Linux-x86_64 
    - chmod +x envsubst-Linux-x86_64
    - mv envsubst-Linux-x86_64 /bin/envsubst
  script:
    - envsubst < ${CHART_PATH}/values.${ENVIRONMENT}.yaml > ${CHART_PATH}/values_deploy.${ENVIRONMENT}.yaml
    - helm upgrade -n ${NAMESPACE} ${PROJECT_NAME} ${CHART_PATH} --install --atomic -f ${CHART_PATH}/values_deploy.${ENVIRONMENT}.yaml --debug

排查与解决步骤

1. 识别Pending的Helm操作

Helm v3通过命名空间内的ConfigMap存储Release状态,直接用Kubernetes命令排查:

  • 定位目标Release对应的ConfigMap:
    kubectl get configmaps -n ${NAMESPACE} -l "owner=helm,name=${PROJECT_NAME}"
    
  • 查看ConfigMap的状态字段,确认是否存在未完成的操作:
    kubectl get configmap <configmap-name> -n ${NAMESPACE} -o yaml
    
    重点检查data.status中的operation字段,若值为upgrade/rollback且长时间未变更,说明操作处于锁定状态。

2. 手动解除Helm操作锁定

确认锁定后,通过修改ConfigMap清除锁定状态:

kubectl patch configmap <configmap-name> -n ${NAMESPACE} --type merge -p '{"data":{"status":"{\"operation\":null}"}}'

注意:操作前务必备份ConfigMap内容,避免误修改导致Release状态损坏。

3. 修复Deployment未就绪问题

针对回滚时的Pod就绪失败,先排查根因:

  • 查看Pod日志定位启动错误:
    kubectl logs -n ${NAMESPACE} <pod-name>
    
  • 检查Pod事件,排查镜像拉取、资源分配或探针配置问题:
    kubectl describe pod -n ${NAMESPACE} <pod-name>
    
    常见问题包括镜像地址错误、节点资源不足、存活探针配置不合理,修复后再执行回滚或升级。

4. 避免后续并行冲突

修改Pipeline配置,添加串行执行限制(以GitLab CI为例):

.pre-deploy:
  image: dtzar/helm-kubectl:latest
  stage: deploy
  tags:
    - k8s
  resource_group: ${ENVIRONMENT}-${PROJECT_NAME} # 新增资源组,确保同一环境的部署串行执行
  before_script:
    # 保留原before_script内容
  script:
    # 保留原script内容

验证操作

完成上述步骤后,重新执行Helm升级命令确认恢复:

helm upgrade -n ${NAMESPACE} ${PROJECT_NAME} ${CHART_PATH} --install --atomic -f ${CHART_PATH}/values_deploy.${ENVIRONMENT}.yaml --debug

内容的提问来源于stack exchange,提问作者Winter Wind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:45:02