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

Concourse Kubernetes Put执行kubectl时如何仅检查目标Pod就绪状态?

解决Concourse CI自动检查所有Pod就绪状态导致部署误报失败的问题

问题场景

使用Concourse CI的put参数将Docker容器部署到Kubernetes集群时,每次执行kubectl命令后,Concourse都会自动检查videoautomationcapabilities命名空间下所有22个Pod的就绪状态,但仅关注自身部署的video-buffer-detect-app Pod(仅1个副本)。当前因其他Pod处于未就绪或崩溃状态,导致put步骤误报失败,需要取消对非目标Pod的就绪检查,仅验证目标Pod状态。

相关配置及执行日志

Concourse Pipeline配置

type: kubernetes
    icon: kubernetes
    source:
      insecure_skip_tls_verify: false
      kubeconfig: {{kubernetes-config}}


  - name: deploy_capability_docker_kubernetes
    plan:
      - get: bufferautomationsourcecode
      - get: docker_hub_details_capability_development
        passed: [build_deploy_hub]
        trigger: true
      - get: version
      - get: concoursesourcecode
      - task: update_deploymentfile_git
        file: concoursesourcecode/task/kubernetes_fileupdate_task_parameterized1.yaml
        params:
          BRANCH: "Dev"
          SOURCE_CODE: "bufferautomationsourcecode"
      - put: kubernetes-cluster-deployment
        params:
          kubectl: config current-context  
      - put: kubernetes-cluster-deployment
        params:
          kubectl: get pods -l app=video-buffer-detect-app -n videoautomationcapabilities    
      - put: kubernetes-cluster-deployment
        params:
          kubectl: get pods -n videoautomationcapabilities --show-labels
      - put: kubernetes-cluster-deployment
        params:
          kubectl: apply -f bufferautomationsourcecode/kubernetes/Dev/Deployment.yaml -n videoautomationcapabilities  
        ensure:
          do: 
            - put: kubernetes-cluster-deployment
              params:
                kubectl: wait --for=condition=Ready pod -l app=video-buffer-detect-app -n videoautomationcapabilities --timeout=300s || true
              ensure:
                do:
                  - put: kubernetes-cluster-deployment
                    params:
                      kubectl: rollout status deployment/video-buffer-detect-app --timeout=300s

执行日志

+ kubectl config current-context
anvil-dev-01-videoautomationcapabilities
Waiting for pods to be ready for 30s (interval: 3s, selector: '')
Waiting for pods to be ready... (22/22)

+ kubectl get pods -l app=video-buffer-detect-app -n videoautomationcapabilities
NAME                                       READY   STATUS    RESTARTS   AGE
video-buffer-detect-app-7cddd646cb-m589k   1/1     Running   0          15m
Waiting for pods to be ready for 30s (interval: 3s, selector: '')
Waiting for pods to be ready... (22/22)

+ kubectl apply -f bufferautomationsourcecode/kubernetes/Dev/Deployment.yaml -n videoautomationcapabilities
deployment.apps/video-buffer-detect-app configured
Waiting for pods to be ready for 30s (interval: 3s, selector: '')
Waiting for pods to be ready... (22/22)

+ kubectl wait --for=condition=Ready pod -l app=video-buffer-detect-app -n videoautomationcapabilities --timeout=300s
pod/video-buffer-detect-app-7cddd646cb-m589k condition met
Waiting for pods to be ready for 30s (interval: 3s, selector: '')
Waiting for pods to be ready... (22/22)

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
+ kubectl rollout status deployment/video-buffer-detect-app --timeout=300s
deployment "video-buffer-detect-app" successfully rolled out
Waiting for pods to be ready for 30s (interval: 3s, selector: '')
Waiting for pods to be ready... (22/22)

解决方案

Concourse的kubernetes资源默认会检查目标命名空间下所有Pod的就绪状态,可通过以下两种方式修改:

方式1:指定仅检查目标Pod的就绪状态

在每个put步骤的params中添加wait_for_ready_selector参数,指定目标Pod的标签选择器,让Concourse只检查匹配该标签的Pod:

修改部署步骤示例

- put: kubernetes-cluster-deployment
  params:
    kubectl: apply -f bufferautomationsourcecode/kubernetes/Dev/Deployment.yaml -n videoautomationcapabilities
    wait_for_ready_selector: app=video-buffer-detect-app
    wait_for_ready_timeout: 300s

修改查看类命令的步骤示例

对于仅执行查看命令的put步骤(如kubectl get pods),也可以添加该参数,或直接关闭自动检查:

- put: kubernetes-cluster-deployment
  params:
    kubectl: get pods -l app=video-buffer-detect-app -n videoautomationcapabilities
    wait_for_ready: false

方式2:完全关闭Concourse的自动就绪检查

如果希望完全通过自定义的kubectl wait和kubectl rollout status命令验证状态,可在所有put步骤中设置wait_for_ready: false,彻底禁用Concourse的自动检查逻辑:

- put: kubernetes-cluster-deployment
  params:
    kubectl: apply -f bufferautomationsourcecode/kubernetes/Dev/Deployment.yaml -n videoautomationcapabilities
    wait_for_ready: false

这样Concourse执行完kubectl命令后不会自动检查任何Pod的就绪状态,仅依赖你自定义的验证步骤判断部署是否成功。

内容的提问来源于stack exchange,提问作者Ramya Thiyagarajan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:19:55