【问题标题】:External dependency in Pod Readiness and LivenessPod Readiness 和 Liveness 中的外部依赖
【发布时间】:2022-01-01 05:46:06
【问题描述】:

我是使用 Readiness 和 Liveness 进行 pod 健康检查的新手。最近我正在研究Readiness。场景如下:

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

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

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

除了Readiness,Liveness怎么样?我是否需要检查数据库连接才能检查 Liveness 是否正常?

感谢任何想法和建议

【问题讨论】:

  • 嗨@Joe,Harsh Manvar answer your question 的答案是什么?如果是,请考虑接受和/或投票。

标签: kubernetes openshift


【解决方案1】:

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

我建议使用Init containerLife 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;']

补充说明

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

由于您的应用程序将尝试与 数据库 连接,因此如果 DB 不是 UP 您的应用程序不会响应 HTTP-OK,因此您的应用程序将无法启动,并且应用程序的就绪性一直失败。

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

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

【讨论】:

  • 是的,这是一个很好的方法。
  • 在你的例子中,我们需要一个initContainer,比如busy box。假设我们没有合适的 init 容器镜像,例如,out 依赖是 K8s 中的一个 CustomResouce,我们需要检查这个 CR 是否可用,如果不可用,那么我们的服务还没有准备好提供服务。这个场景怎么样?我们可以在 Readiness 中检查 CR 状态吗?
  • 如果你只是想检查 CRD 是否存在,你可以使用简单的kubectlinit container 中运行kubectl 命令行,或者用 python 中的代码写下自定义 docker 镜像。它将使用 K8s-client 并检查 CRD 是否存在。
  • 因为您的容器将在集群上运行,因此验证 K8s 客户端不会有太大问题,您可以简单地检查状态。参考:stackoverflow.com/a/68710305/5525824
  • 感谢及时回复。上述方法是另一种方法。他们都使用初始化容器方法。第三,是否有可能在我们的 HTTP-Get 中检查 CR 是否可用?这意味着我们在 Readiness 代码中实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 2018-02-11
  • 2019-05-18
  • 2020-12-13
  • 2020-05-13
相关资源
最近更新 更多