【问题标题】:What is the correct way to identify an application is deployed successfully with all pods up on Kubernetes?识别应用程序已成功部署且所有 pod 都在 Kubernetes 上的正确方法是什么?
【发布时间】:2021-10-18 16:09:36
【问题描述】:

部署您的 pod 后,如何确定所有 pod 都已启动并运行?我列出了几个我认为可能是正确的选项,但想了解识别成功部署的标准方法是什么。

  1. 通过其接口连接到应用程序并使用它来识别是否所有 pod(集群)都已启动(可能对有状态应用程序有好处)。对于无状态应用程序,pod is up 就足够了。
  2. 公开一个 Restful API 服务,用于监控部署并做出相应的响应。
  3. 使用Kubectl 连接到 Pod 并获取 Pod 和容器的运行状态。

我认为数字 1 是正确的方法,但想了解社区对此的看法。

【问题讨论】:

  • 准备探测???
  • 是的。使用 readinessProbes 和 livenessProbes。然后你可以使用 kubectl rollout status $deployment/statefulset-name -n $namespace.

标签: kubernetes kubernetes-pod


【解决方案1】:

您的所有方法听起来都很合理,并且可以胜任,但为什么不直接使用 Kubernetes 为我们提供的工具呢? ;)

Kubernetes 主要使用两种健康检查:

  • Liveness probe- 了解容器是否正在运行且正常工作(未挂起,未处于死锁状态)
  • Readiness probe - 了解容器是否能够接受更多请求

值得注意的是,还有“Startup probe”,它负责保护难以估计启动时间的慢启动容器。

活跃度:

如前所述,liveness probe 的主要目标是确保容器没有死。如果它已经死了,Kubernetes 会移除 Pod 并启动一个新的。

准备就绪:

就绪探测的主要目标是检查容器是否能够处理额外的流量。在某些情况下,容器可能正在工作,但它不能接受流量。您正在定义与 liveness 探针相同的就绪探针,但此探针的目标是检查应用程序是否能够在合理的时间内连续回答多个查询。如果没有,Kubernetes 会停止向 pod 发送流量,直到它通过就绪探测。

实施:

你有几种方法来实现探测:

  • 每隔指定时间运行一个命令并检查它是否正确执行 - 返回码为 0(在 this example 中,命令 cat /tmp/healthy 每隔几秒运行一次)。
  • 每隔指定时间向容器发送一个HTTP GET请求,检查是否返回成功码(在this example中,Kubernetes正在向容器中定义的端点/healthz发送一个HTTP请求)。
  • 每隔指定时间尝试在容器中打开一个 TCP 套接字并确保已建立连接(在this example 中,Kubernetes 正在连接到容器的 8080 端口)。

对于这两个探针,您可以定义几个参数:

  • initialDelaySeconds:容器启动后的秒数,在启动活动或就绪探测之前。默认为 0 秒。最小值为 0。
  • periodSeconds:执行探测的频率(以秒为单位)。默认为 10 秒。最小值为 1。
  • timeoutSeconds:探测超时的秒数。默认为 1 秒。最小值为 1。
  • successThreshold:探测失败后被视为成功的最小连续成功。默认为 1。对于 liveness 和 startup Probes,必须为 1。最小值为 1。
  • failureThreshold:当一次探测失败时,Kubernetes 会尝试failureThreshold 次,然后放弃。在活性探测的情况下放弃意味着重新启动容器。在就绪探测的情况下,Pod 将被标记为未就绪。默认为 3。最小值为 1。

结合这两个健康检查将确保应用程序已部署并正常工作 - 活动探测用于确保 pod 在其中的容器停止工作时重新启动,准备探测用于确保流量不会到达 pod - 准备好或超载的容器。 The proper functioning of the probes requires an appropriate selection of the implementation method and definition of arguments - most often by trial and error.查看这些文档:

【讨论】:

  • 不完全,但有足够的知识更新让我找到正确的解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-02-07
  • 2019-08-06
  • 2015-09-13
  • 2018-10-30
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多