在安装的版本上引入 运行 helm 测试套件的延迟
introducing delay for running helm test suite over installed release
我正在使用 helm charts 将多个 REST 服务部署到 k8s 中,spring 在部署的容器中启动。
但是,为了能够进行最后阶段的测试,我需要引入某种智能活性探测器 - 即目标应用程序实际上 运行 正确地位于给定容器内。
这可以通过简单的 return 命令的成功 return 代码轻松证明,但是,这就是诀窍 - 命令需要在特定版本部署后延迟执行,以便为应用程序留出时间bootstrap.
这是我想出的测试套件:
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "chart.fullname" . }}-test"
labels:
{{- include "chart.fullname" . | nindent 4 }}
annotations:
"helm.sh/hook": test-success
spec:
containers:
- name: test-curl
image: curl
command: ['curl']
args: [' -X POST -i -H "Accept: application/json" -H "Content-Type:application/json" -d ''{"foo":["bar"]}'' {{ include "chart.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never
关键问题是这个测试会在服务还没有真正启动时执行,所以无论如何都会失败。
是否有某种机制或变通方法来引入此测试的执行延迟?
想到在单独的测试容器中设置一些睡眠步骤,但我不确定这是否适用于这种情况
curl
支持通过 --retry
标志重试请求。您可以将此标志作为命令参数传递。您可以从此线程检查更多可配置的重试选项:
感谢@Emruz Hossain,我找到了解决方案:
apiVersion: batch/v1
kind: Job
metadata:
name: "{{ .Release.Name }}-test"
labels:
app: {{ .Release.Name }}
release: {{ .Release.Name }}
annotations:
"helm.sh/hook": test-success
spec:
ttlSecondsAfterFinished: 0
template:
spec:
containers:
- name: test-curl
image: target-image:1.2.3
imagePullPolicy: "IfNotPresent"
command:
- /bin/bash
- -ec
- |
curl --connect-timeout 5 --max-time 10 --retry 5 --retry-delay 5 --retry-max-time 30 --retry-all-errors http://{{ .Release.Name }}:{{ .Values.service.port }}/v1/rest -X POST -H "content-type: application/json" -d "{\"foo\":[\"bar\"]}"
restartPolicy: Never
我正在使用 helm charts 将多个 REST 服务部署到 k8s 中,spring 在部署的容器中启动。
但是,为了能够进行最后阶段的测试,我需要引入某种智能活性探测器 - 即目标应用程序实际上 运行 正确地位于给定容器内。
这可以通过简单的 return 命令的成功 return 代码轻松证明,但是,这就是诀窍 - 命令需要在特定版本部署后延迟执行,以便为应用程序留出时间bootstrap.
这是我想出的测试套件:
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "chart.fullname" . }}-test"
labels:
{{- include "chart.fullname" . | nindent 4 }}
annotations:
"helm.sh/hook": test-success
spec:
containers:
- name: test-curl
image: curl
command: ['curl']
args: [' -X POST -i -H "Accept: application/json" -H "Content-Type:application/json" -d ''{"foo":["bar"]}'' {{ include "chart.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never
关键问题是这个测试会在服务还没有真正启动时执行,所以无论如何都会失败。
是否有某种机制或变通方法来引入此测试的执行延迟?
想到在单独的测试容器中设置一些睡眠步骤,但我不确定这是否适用于这种情况
curl
支持通过 --retry
标志重试请求。您可以将此标志作为命令参数传递。您可以从此线程检查更多可配置的重试选项:
感谢@Emruz Hossain,我找到了解决方案:
apiVersion: batch/v1
kind: Job
metadata:
name: "{{ .Release.Name }}-test"
labels:
app: {{ .Release.Name }}
release: {{ .Release.Name }}
annotations:
"helm.sh/hook": test-success
spec:
ttlSecondsAfterFinished: 0
template:
spec:
containers:
- name: test-curl
image: target-image:1.2.3
imagePullPolicy: "IfNotPresent"
command:
- /bin/bash
- -ec
- |
curl --connect-timeout 5 --max-time 10 --retry 5 --retry-delay 5 --retry-max-time 30 --retry-all-errors http://{{ .Release.Name }}:{{ .Values.service.port }}/v1/rest -X POST -H "content-type: application/json" -d "{\"foo\":[\"bar\"]}"
restartPolicy: Never