Pod Readiness 和 Liveness 中的外部依赖

External dependency in Pod Readiness and Liveness

我是 Readiness 和 Liveness 的 Pod 健康检查新手。最近我在准备 Readiness。场景如下:

pod是一个RestAPI服务,它需要连接到数据库并将信息存储在数据库中。所以如果RestAPI服务要对外提供服务,需要确保数据库连接成功。

Si 在我们的 pod Readiness 逻辑实现中,我们使用 HTTP-Get 并检查 DB 连接是否已连接,如果没问题,那么 HTTP-Get returns Ok,否则 Readiness 将失败。

不确定以上逻辑是否合理?或者有没有其他的逻辑处理方式?

除了Readiness,Liveness如何?我是否需要检查数据库连接以检查 Liveness 是否正常?

欢迎任何想法和建议

readinessliveness 主要用于服务,您在容器内 运行,可能存在您的数据库已启动,但当时 application 存在问题,您的 readinessUp 作为 DB是 运行,在理想情况下,如果应用程序不工作,它应该停止接受流量。

我建议首先使用 Init container or Life cycle hook 检查数据库的状况,如果它已启动,过程将继续进行并且您的应用程序或部署将进入画面。

如果应用程序运行良好,您的准备和活跃度将 HTTP-OK 并且服务开始接受流量。

初始化容器示例

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

补充说明

实际上根本不需要检查数据库就绪情况。

因为您的应用程序将尝试连接 数据库,所以如果 DBnot UP 您的应用程序将不会响应 HTTP-OK 因此您的应用程序将无法启动,并且应用程序准备一直失败。

一旦您的数据库出现,您的应用程序将与数据库建立成功的连接,它会给出 200 响应,准备就绪将标记 POD 就绪。

没有额外的要求来设置 Db 的就绪状态并基于该启动 POD。