【问题标题】:k8s - deployment with service dependencyk8s - 具有服务依赖的部署
【发布时间】:2019-03-19 14:00:37
【问题描述】:

我正在玩 k8s 部署 - 滚动更新,它运行得非常好。 我很想知道当我们有服务依赖时如何进行部署!不确定我是否正确解释了我的问题。这只是一个非常高级的场景!

让我们考虑这个例子。我已经部署了 2 个应用程序,每个应用程序有 10 个副本,作为服务公开。

Service-A
  Deployment-A
    Pod-A - v1 - (10)

Service-B
  Deployment-B
    Pod-B - v1 - (10)

服务 A 依赖于 B。现在作为 v2 版本的一部分,两个应用程序都需要使用 v2。服务 B api 需要很少的附加参数/略有变化。当我们使用更新版本 v2 升级这两个应用程序时,如果 service-B 在 Service-A 之前启动并运行,则某些请求将失败,因为 Service-A 仍在 v1 中(因为升级正在进行中)。我们怎样才能在没有任何失败的情况下进行部署?如果您已经在使用 k8s,您应该遵循的最佳实践是什么。

【问题讨论】:

    标签: kubernetes kubernetes-deployment


    【解决方案1】:

    Nilesh Jayanandana中的“Enable Rolling updates in Kubernetes with Zero downtime”所示,您可以检查实现readiness probe是否会帮助服务B等待服务A进入V2。

    另一种方法是通过 Helm 包,如“Deploy, Scale and Upgrade an Application on Kubernetes with Helm”,它可以对依赖关系进行建模,然后通过helm update 执行滚动升级。

    【讨论】:

    • 嗯,如果我在 pod A 上使用 readinessProbe 来等待服务 B 的端口,并且两者都在 rollingUpdate 期间更新,我无法确保“端口已打开”意味着 B 完成更新。也可能是那里运行的旧服务,不是吗?如果我想等待 B,因为我知道 B 具有 A 也需要的初始化进程(如 db-migrations),那可能容易出错,或者我错过了什么?
    • @leberknecht 是的,我想这不是灵丹妙药(也不适用于 statefulset:github.com/ubuntu/microk8s/issues/294)。
    猜你喜欢
    • 2019-06-29
    • 2020-08-02
    • 2018-07-17
    • 2020-10-10
    • 2019-08-31
    • 2011-08-30
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多