【问题标题】:Does K8S automatically ensure pod availability by health checking when re-run pods inside service?在服务内重新运行 Pod 时,K8S 是否会通过健康检查自动确保 Pod 可用性?
【发布时间】:2016-02-26 11:42:03
【问题描述】:

假设我有一个包含 2 个 pod(副本)的服务。每个 pod 只包含一个容器,它是一个在 Tomcat 上运行的 REST API war。而且,每个pod都有imagePullPolicy: Always,所以当有新版本的镜像时,它会拉取它。

显然,当容器启动时,Tomcat 需要几秒钟才能启动。这将在两个容器中发生。

是否有可能在特定时间我的 REST API 不可用?我的意思是,是否有可能两个 Tomcat 都还没有启动并且请求失败?

K8S 是否在尝试重新运行另一个 pod 之前对一个 pod 进行健康检查?如果是这样,我可以针对我的 REST API 端点执行 http 健康检查。方法对吗?

提前致谢。任何建议将不胜感激。

【问题讨论】:

    标签: kubernetes kubernetes-health-check


    【解决方案1】:

    是否有可能在特定时间我的 REST API 不可用?我的意思是,是否有可能两个 Tomcat 都还没有启动并且请求失败?

    是的。您可以通过确保在创建服务之前至少有一个 pod 已准备好为请求提供服务(然后在升级应用程序时使用滚动更新来避免停机)来防止这种情况发生。

    K8S 是否在尝试重新运行另一个 pod 之前对一个 pod 进行健康检查?如果是这样,我可以针对我的 REST API 端点执行 http 健康检查。方法对吗?

    你应该看看liveness and readiness probes。它们旨在捕获正在运行的容器与容器内准备好服务请求的应用程序之间的差异。

    【讨论】:

    • “滚动更新”是否确保在第一个 Pod 准备好时不会部署第二个 Pod?
    • 滚动更新将在删除旧 pod 之前创建一个新 pod(然后重复直到所有旧 pod 都消失)。这可确保始终有一个后端准备好为传入请求提供服务。因此,它会在第一个 Pod 准备好时特意部署一个新 Pod,然后在替换准备好之前不会移除第一个 Pod。
    • 完美。非常感谢:)
    猜你喜欢
    • 2020-11-22
    • 2022-01-18
    • 2020-12-19
    • 2020-01-26
    • 2020-01-18
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多