【问题标题】:How to know when a Kubernetes service is ready after a deployment rollout?部署推出后如何知道 Kubernetes 服务何时准备就绪?
【发布时间】:2020-04-29 23:15:31
【问题描述】:

我正在尝试与服务一起创建部署,然后在部署完成后立即访问该服务:

> kubectl create -f my-deployment.yaml
> kubectl create -f my-service.yaml
> kubectl rollout status deployment/my-deployment --watch --timeout 10m # This usually takes ~30 seconds

deployment "my-deployment" successfully rolled out

> curl "my-service" # This happens inside a pod, so the service DNS name should be available

有时这可行,但似乎存在竞争条件 - 如果curl 命令发生得太快,似乎套接字无法连接并且我得到连接超时。

根据这个问题,如果没有准备好的 pod,这似乎是我会得到的行为:What happens when a service receives a request but has no ready pods?

我预计推出的完成意味着服务可以保证准备就绪。不是这样吗?是否有一些 Kubernetes 命令可以“等待”服务可用? (我注意到服务没有条件,所以你不能做kubectl wait...)

【问题讨论】:

    标签: kubernetes kubernetes-service kubernetes-deployment


    【解决方案1】:

    要知道服务是否准备就绪,您可以使用服务名称检查端点对象是否存在以及该端点对象是否具有 IP。如果 IP 存在,则表示服务已准备就绪。但无法保证它仍然不会失败,因为您的基础架构中可能存在网络问题。

    管理 pod 的 K8s 原语(例如 Deployment)仅将 pod 状态考虑到决策制定中,例如滚动更新期间的推进。

    例如,在部署滚动更新期间,一个新的 pod 准备就绪。另一方面,由于某种原因(例如 API 机制、端点控制器、kube-proxy、iptables 或基础设施编程的缓慢),服务、网络策略和负载均衡器尚未为新 pod 做好准备。这可能会导致服务中断或后端容量损失。在极端情况下,如果滚动更新在任何新的替换 Pod 实际开始服务流量之前完成,这将导致服务中断。

    这里是 proposal 以提高 pod 就绪性,这是由上述问题引起的。

    【讨论】:

    • 你确定它只考虑是否创建了副本吗?根据我使用 --watch 命令运行它的经验,它似乎要等到 pod 或多或少地运行。例如,我知道它肯定会等待 pod 的持久卷声明被绑定。如果您有它的确切行为的链接,那将很有帮助。我对探针很熟悉。过去我做过类似kubectl wait pod --label app=my-deployment-app --for=condition=ready 的事情。你是说像这样等待 pod 的“Ready”条件就等于服务准备好了?
    • Err 别介意第一个问题。我知道当 PVC 仍被绑定时,pod 尚未创建。所以kubectl rollout status 等到副本存在,但不担心它的条件是 Ready 或任何东西。
    • 我已经编辑了我的答案并添加了一个链接。简而言之,pod 的“就绪”状态并不等同于服务就绪。
    • 知道了——就当时提出的主要问题而言,是否无法使用普通的kubectl 命令确定服务是否准备就绪? (直到这个提案或类似的东西落地)
    • 能否尝试获取服务并检查端点是否为空
    【解决方案2】:

    我的回答与您的要求略有不同,但可能对您有用。 我建议使用Helm 来改善您的部署体验。

    它对您有何帮助?

    Helm 有几个标志,例如 --wait,可以在更新期间应用。它将确保在继续之前成功创建所有资源。

    【讨论】:

    • 谢谢,我熟悉 Helm,这是一个有趣的建议。我不想在这个场景中介绍 Helm,但是您是否碰巧知道 Helm 是如何做到这一点的? (鉴于在 K8S 中解决这个问题似乎是一个尚未完全解决的问题——从另一个答案中查看这个建议:github.com/kubernetes/enhancements/blob/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2023-03-11
    • 2019-09-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多