我正在使用带有 helm 的 kubernetes。我的 github 管道包含:
- name: Verify deployment
run: kubectl rollout status deployment/name-api --namespace my-prod --timeout=60s
有时这部分会失败:
就绪探测失败:获取“https://...:80/”:拨打 tcp ...:80:连接:连接被拒绝
当我重新运行该操作时,它通常会通过。
我该怎么办呢?
我已经尝试根据
https://stackoverflow.com/a/51932875的答案,在
deployment.yaml
文件夹中的 templates
中添加最后一行。但这并没有帮助。
spec:
template:
spec:
containers:
- name: {{ .Chart.Name }}
…
readinessProbe:
initialDelaySeconds: 5
也许您需要一个启动探针?
有时,您必须处理旧应用程序,这些应用程序在首次初始化时可能需要额外的启动时间。在这种情况下,在不影响对引发此类探测的死锁的快速响应的情况下设置活性探测参数可能会很棘手。诀窍是使用相同的命令、HTTP 或 TCP 检查来设置启动探测,并使用足够长的 failureThreshold * periodSeconds 来覆盖最坏情况下的启动时间。
示例:
ports:
- name: liveness-port
containerPort: 8080
hostPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: liveness-port
failureThreshold: 1
periodSeconds: 10
startupProbe:
httpGet:
path: /healthz
port: liveness-port
failureThreshold: 30
periodSeconds: 10
借助启动探针,应用程序最多将有 5 分钟(30 * 10 = 300 秒)来完成启动。一旦启动探针成功一次,活性探针就会接管以提供对容器死锁的快速响应。如果启动探测从未成功,容器将在 300 秒后被终止,并受 pod 的 restartPolicy 约束
当就绪探测未通过时,会出现“Readiness Probe Failed”错误。这意味着 Pod 内的应用程序尚未准备好接受流量。这可能是由于以下几个原因造成的: