Pod 就绪性和活跃度的外部依赖

Joe*_*Joe 5 openshift kubernetes

我是 Pod 健康状况检查的新手,包括 Readiness 和 Liveness。最近我正在从事准备工作。场景如下:

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

在我们的 pod Readiness 逻辑实现中,我们使用 HTTP-Get 并检查数据库连接是否已连接,如果正常,则 HTTP-Get 返回 Ok,否则 Readiness 将失败。

不知道上面的逻辑是否合理?或者还有其他的逻辑处理方法吗?

除了Readiness之外,Liveness又如何呢?我是否需要检查数据库连接才能检查活动是否正常?

任何想法和建议表示赞赏

Har*_*var 3

准备度活跃度主要针对您在容器内运行的服务,可能存在这样的情况:您的数据库已启动,但当时应用程序存在问题,并且您的准备度将在数据库运行时启动,在理想情况下,如果应用程序没有运行工作它应该停止接受流量。

我建议首先使用初始化容器生命周期挂钩来检查数据库的状况,如果数据库的启动过程将继续进行并且您的应用程序或部署将进入其中。

如果应用程序运行良好,您的准备状态和活跃度将是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;']
Run Code Online (Sandbox Code Playgroud)

额外说明

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

由于您的应用程序将尝试与数据库连接,因此如果数据库启动, 的应用程序将不会响应HTTP-OK,因此您的应用程序将无法启动,并且应用程序的准备工作不断失败。

一旦您的数据库启动,您的应用程序将创建与数据库的成功连接,并且它将给出200 个响应,并且准备就绪将标记 POD 就绪。

没有额外的要求来设置 Db 的准备情况并基于该启动 POD。