我已经配置了一个pod
,如下所示:
livenessProbe:
initialDelaySeconds: 60
periodSeconds: 10
failureThreshold: 3
readinessProbe:
initialDelaySeconds: 60
periodSeconds: 10
failureThreshold: 3
Readiness 和 Liveness 探针基于 tcp-socker
readinessProbe:
tcpSocket:
port: {{ .Values.port }}
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
但是,当我部署时,pod 几乎立即被标记为失败
,并进入Error
--> CrashLoopBackOff
。
Pod 检查 Redis 连接(确实需要一点时间才能准备好)。
当然,我在 pod 日志中看到了连接错误
File "/usr/local/lib/python3.9/site-packages/redis/connection.py", line 563, in connect
raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 111 connecting to redis-master:6379. Connection refused.
为什么 Pod 早在 initialDelaySeconds: 60
之前就被标记为 Error
/CLBO?
这是 Pod 的关于探测器的 yaml
转储(我将两个探测器的 initialDelaySecond
增加到 100,但仍然相同...)
livenessProbe:
failureThreshold: 3
initialDelaySeconds: 100
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 9898
timeoutSeconds: 1
name: mycontainer
ports:
- containerPort: 9898
protocol: TCP
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 100
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 9898
timeoutSeconds: 1
最佳答案
initialDelaySeconds
:容器启动后启动事件或就绪探测之前的秒数。
现在 Pod 可能会因为 CrashLoopBackOff
而失败甚至在启动探测器之前。 这就是这里的概念。如果您设置容器restartPolicy
,则可能会发生这种情况至Never
.
可以查看 pod 日志或事件来获取 pod 失败的原因(可以使用 kubectl describe <pod>
)
关于Kubernetes 启动时不尊重初始延迟秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66697020/