【问题标题】:How can I scale CloudFoundry applications "down" without the risk of restarting all of them?如何在不重新启动所有应用程序的风险的情况下“缩减”CloudFoundry 应用程序?
【发布时间】:2019-04-29 16:46:26
【问题描述】:

这是关于 Swisscom 应用程序云的问题。

我已经实施了一个策略来重新启动已经部署的 CloudFoundry 应用程序没有使用cf restart APP_NAME。我希望能够:

  • 无需访问应用清单即可重新启动正在运行的应用,并且
  • 避免他们遭受任何停机时间。

一般概念如下所示:

  1. cf scale APP_NAME -I 2

    • 将应用的实例数从 1 增加到 2
    • 等待所有应用实例为running
  2. cf restart-app-instance APP_NAME 0

    • 重启“旧”应用实例
    • 等待所有应用实例再次变为running
  3. cf scale easyasset-repower-staging -I 1

    • 将应用的实例数从 2 减少到 1

这通常有效,并且通常会按照我的预期进行。我遇到的问题发生在第 (3) 阶段,在该阶段 有时 而不是仅仅缩减实例计数,CloudFoundry 还将重新启动所有(剩余)实例。

我不明白:

  • 为什么这种情况只是偶尔发生(缩小时所有应用都会重新启动)?
  • CloudFoundry 不应该让剩余的实例保持正常运行吗?
  • 如果cf scale 无法保持运行良好的应用程序实例处于活动状态 - 它什么时候有用?

请注意: 我非常了解用于在 CloudFoundry 中零停机时间部署应用程序的 Bluegreen / Autopilot 插件,我实际上将它们用于从我们的构建服务器进行部署,但它们需要我提供清单(和其他凭据),这在这种情况下,我无权访问(除非我可以通过 cf create-app-manifest 以某种方式从正在运行的应用程序中提取它?)。

更新 1: 再次查看插件,我发现了bg-restage,它显然可以满足我的要求,但我不知道它的可靠性如何。

更新 2: 我得出的结论是,这可能是 CloudFoundry 中的一个模糊问题(或错误),cf scale 不保证现有实例将继续运行。如上所述,我已经意识到确实很有可能动态生成应用程序清单 (cf create-app-manifest),即使我无法毫无错误地使用 bg-restage 插件,我还是回到了blue-green-deploy 插件,我现在可以使用新生成的清单来避免整个 cf scale 练习。

评论问题:

为什么需要重新启动应用程序的实例?

我们正在缓存一些来自持久存储的值在启动时。当检测到对该数据的更改时,将发生重新启动。

关于健康检查的信息

我们正在使用所有类型的运行状况检查,具体取决于要重新启动的应用程序(httpprocessport). I have observed this issue only for apps with health checkhttp. I also have ahttp-endpoint` 为运行状况检查定义。

您是否也尝试使用 cf scale 更改内存?

不,我试图在此过程中保持所有应用配置相同。

【问题讨论】:

  • 为什么需要重启应用实例?另外,您能否添加一些有关您当前使用的健康检查的信息?
  • 您是否也尝试使用cf scale 更改内存?更改实例计数应该需要重新启动所有实例,但更改内存限制会。
  • 我不确定这个故事的确切原因,但它可能指向问题所在。如果进程版本以某种方式发生变化,那将导致实例被杀死并重新创建 -> pivotaltracker.com/story/show/160207350。更改应用程序实例计数不应该这样做,但有一些关于其他操作可能的故事的注释。

标签: cloud-foundry swisscomdev


【解决方案1】:

当你有两个正在运行的实例时,命令

cf scale <APP> -i 1

将杀死实例 #1,实例 #0 不会受到影响。

【讨论】:

  • nic - 感谢您的尝试。我不确定我是否充分解释了我的问题,但问题是:sometimes instead of just scaling the instance count back, CloudFoundry will also restart all (remaining) instances。它通常不会发生,但每 10 次左右就会发生一次。
  • 嗨,克里斯。有没有一种方法可以在这个“晦涩的问题”发生之后,向我们提供可以使用“cf logs --recent”收集的应用程序日志?这可能是了解这种意外行为的原因的关键。毕竟,您可能遇到了 Daniel 指出的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
相关资源
最近更新 更多