Kubernetes 如何制作Tekton任务';s命令执行等待上一个任务';s旋转吊舱已准备好接受请求

Kubernetes 如何制作Tekton任务';s命令执行等待上一个任务';s旋转吊舱已准备好接受请求,kubernetes,tekton,tekton-pipelines,openshift-pipelines,Kubernetes,Tekton,Tekton Pipelines,Openshift Pipelines,我有一个OpenShift/Tekton管道,它在任务A中将应用程序部署到测试环境中。在任务B中,运行应用程序的测试套件。如果所有测试都通过,则应用程序将部署到任务C中的另一个环境中 问题是任务A的pod被部署(使用oc apply-f),在pod实际准备好接收请求之前,任务B开始运行测试套件,所有测试都失败(因为它无法到达测试用例中定义的端点) 在开始执行任务B之前,是否有一种优雅的方法确保任务A的pod准备好接收请求?我看到的一个解决方案是对健康端点执行HTTP GET请求,直到得到HTTP

我有一个OpenShift/Tekton管道,它在
任务A
中将应用程序部署到测试环境中。在
任务B
中,运行应用程序的测试套件。如果所有测试都通过,则应用程序将部署到
任务C
中的另一个环境中

问题是
任务A
的pod被部署(使用
oc apply-f
),在pod实际准备好接收请求之前,
任务B
开始运行测试套件,所有测试都失败(因为它无法到达测试用例中定义的端点)

在开始执行
任务B
之前,是否有一种优雅的方法确保任务A的pod准备好接收请求?我看到的一个解决方案是对健康端点执行HTTP GET请求,直到得到HTTP 200响应。我们有相当多的应用程序不公开HTTP端点,所以有没有更“通用”的方法来确保pod准备就绪?例如,我可以在
任务a
的日志中查询特定记录吗?有一个日志语句,它总是显示pod何时准备好接收流量

如果有兴趣,这里是任务A的定义:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: create-and-deploy-integration-server
spec:
  params:
    - name: release-name
      type: string
      description: The release name of the application
    - name: image-name
      type: string
      description: The name of the container image to use
    - name: namespace
      type: string
      description: The namespace (OCP project) the application resides in
    - name: commit-id
      type: string
      description: The commit hash identifier for the current HEAD commit
  steps:
    - name: create-is-manifest
      image: image-registry.openshift-image-registry.svc:5000/openshift/origin-cli
      script: |
        echo "Creating IntegrationServer manifest"
        cat << EOF > integrationserver.yaml
        apiVersion: appconnect.ibm.com/v1beta1
        kind: IntegrationServer
        metadata:
          name: $(params.release-name)
          namespace: $(params.namespace)
        spec:
          license:
            accept: true
            license: L-KSBM-BZWEAT
            use: CloudPakForIntegrationNonProduction
          pod:
            containers:
              runtime:
                image: image-registry.openshift-image-registry.svc:5000/$(params.namespace)/$(params.image-name)-$(params.commit-id)
                imagePullPolicy: Always
                resources:
                  limits:
                    cpu: 500m
                    memory: 500Mi
                  requests:
                    cpu: 300m
                    memory: 300Mi
          adminServerSecure: true
          router:
            timeout: 120s
          designerFlowsOperationMode: disabled
          service:
            endpointType: http
          version: 11.0.0.11-r2
          replicas: 1
          barURL: ''
        EOF
    - name: deploy-is-manifest
      image: image-registry.openshift-image-registry.svc:5000/openshift/origin-cli
      script: |
        echo "Applying IntegrationServer manifest to OpenShift cluster"
        oc apply -f integrationserver.yaml
apiVersion:tekton.dev/v1beta1 种类:任务 元数据: 名称:创建和部署集成服务器 规格: 参数: -名称:发布名称 类型:字符串 description:应用程序的发布名称 -名称:图像名称 类型:字符串 描述:要使用的容器映像的名称 -名称:名称空间 类型:字符串 描述:应用程序所在的命名空间(OCP项目) -名称:提交id 类型:字符串 描述:当前头提交的提交哈希标识符 步骤: -名称:创建是清单 image:image注册表.openshift图像注册表.svc:5000/openshift/origin cli 脚本:| 回显“创建IntegrationServer清单” cat integrationserver.yaml apiVersion:appconnect.ibm.com/v1beta1 种类:IntegrationServer 元数据: 名称:$(参数发布名称) 命名空间:$(params.namespace) 规格: 许可证: 接受:对 许可证:L-KSBM-BZWEAT 用途:CloudPakForIntegration非生产 豆荚: 容器: 运行时: image:image registry.openshift image registry.svc:5000/$(params.namespace)/$(params.image name)-$(params.commit id) imagePullPolicy:始终 资源: 限制: cpu:500米 内存:500Mi 请求: 中央处理器:300米 内存:300Mi adminServerSecure:true 路由器: 超时:120秒 designerFlowsOperationMode:已禁用 服务: 端点类型:http 版本:11.0.0.11-r2 副本:1份 barURL:“” EOF -名称:部署是清单 image:image注册表.openshift图像注册表.svc:5000/openshift/origin cli 脚本:| echo“将IntegrationServer清单应用于OpenShift群集” oc apply-f integrationserver.yaml 在执行了
oc apply
的步骤之后,可以添加一个步骤以等待部署变为“可用”。这适用于
kubectl
,但应与
oc
相同:

kubectl wait --for=condition=available --timeout=60s deployment/myapp

然后,下一个任务可以依赖于此任务,运行时间:[“创建并部署集成服务器”]

现在我唯一的问题是,我收到了一个错误“服务器错误(未找到):deployments.apps”petstore测试“未找到”。在运行“ocapply-f integrationserver.yaml”之后,它直接跳转到等待,并且找不到部署,并且失败。我以为它会等待timeout参数中指定的秒数,但我猜这只是等待可用的条件。我已经“修复”了这个问题,在库贝特等待之前加上20秒的睡眠,但这不是很优雅。还有其他方法等待实际部署出现吗?您可以考虑<代码> KPT < /代码>其<代码> KPT Load Apple < /代码>,也可以协调: