【问题标题】:dual Kubernetes Readiness probes?双 Kubernetes 就绪探测?
【发布时间】:2019-06-06 07:01:41
【问题描述】:

我有一个场景,需要“准备”Kubernetes 以起飞/终止/关闭容器,但允许它服务 一些 请求直到发生这种情况。

例如,假设有三种方法:StartAction、ProcessAction、EndAction。我想阻止客户端在容器即将关闭时调用 StartAction。但是,他们应该能够在该相同容器上使用 ProcessAction 和 EndAction(在所有操作完成后,容器将关闭)。

我在想这是某种“双重”就绪探测,我基本上想指示“未就绪”状态,但继续为已启动的操作提供请求。

我知道有一个 PreStop 挂钩,但我不确定这是否满足需求,因为根据文档,我怀疑在 PreStop 期间 Pod 已经从负载均衡器中取出:

  1. (与 3 同时) Pod 已从服务的端点列表中删除,并且不再被视为复制控制器正在运行的 Pod 集的一部分。缓慢关闭的 Pod 无法继续为流量提供服务,因为负载平衡器(如服务代理)会将它们从轮换中移除。

(https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods).

假设我必须依赖粘性并且必须继续在启动这些操作的容器上为操作请求提供服务,是否有一些推荐的做法?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    我认为您可以在应用程序中实现 2 个端点:

    • 自定义就绪探测
    • 关机准备端点列表项

    所以要优雅关闭,我认为您应该首先调用“关闭准备端点”,这将导致“自定义就绪探测”将返回错误,因此 Kubernetes 将从服务负载均衡器中取出该 POD(不会有新客户端出现)但是现有的 TCP 连接将被保留(现有的客户端将运行)。在您看到一些自定义指标(您的服务应该提供)之后,客户端的所有操作都已完成,您应该使用标准 Kubernetes 操作关闭容器。所有这些操作都应该使用 Kubernetes 和您的应用程序 API 以某种方式自动化。

    【讨论】:

    • Ewolfman - 我的回答有帮助吗?如果是的话,如果您能接受,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 2018-07-10
    • 1970-01-01
    • 2019-07-22
    • 2021-05-24
    • 2021-02-06
    • 2021-01-01
    • 2017-11-02
    相关资源
    最近更新 更多