Kubernetes 如何制作Tekton任务';s命令执行等待上一个任务';s旋转吊舱已准备好接受请求
我有一个OpenShift/Tekton管道,它在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
任务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 < /代码>,也可以协调: