Kubernetes:我如何在我的 2 层 Web 应用程序上进行水平 pod autosacling (hpa)?

问题描述 投票:0回答:2

我有一个网络应用程序,有 2 层:wordpress 作为前端,MySQL 作为后端。

前端使用 Helm Chart 部署,后端使用 Operator 部署。

由于我的 web 应用程序收到大量流量,我想实现水平 pod 自动加载 (HPA)。

我的问题: 我可以在哪里定义 HPA:在前端部分(即:wordpress 级别)?在后端部分(即:MySQL 级别)?或两者兼而有之?

谢谢您的帮助!

kubernetes kubernetes-helm azure-aks hpa
2个回答
1
投票

您可能无法在数据库上有效地设置 HPA。 MySQL和PostgreSQL通常是单节点,或者如果它们有多个节点,则它们以主备模式运行,因此添加节点并不一定会增加容量。 (即使使用集群数据库,围绕缩减设置 HPA 也可能存在 实际问题。)

您可以在应用程序上设置 HPA。了解应用程序的实际限制因素是什么会很有帮助:如果您发送了足够的负载,导致请求开始变慢或失败,那么它是否缺乏 CPU 时间、内存不足或正在等待数据库?这会影响您想要在 HPA 上设置的参数。

一种现实情况是,您的应用程序会执行一些数据库查询,这会花费大量时间,然后很快将数据呈现为 HTML 或 JSON。在这种情况下,HPA 就很难发挥作用了:单节点数据库很难扩展,即使扩展应用程序 Pod,数据库查询仍然会被阻塞。


0
投票
虽然大多数人不建议在 MySQL 或 Postgres 上这样做,但在读取数据的问题上,这些扩展仍然是可能的:你看,如果你从数据库中 SELECT,你可以对单个数据源执行多个操作(即多个程序可以同时读取 .txt 文件,但是当他们决定同时写入时事情会变得复杂)。

  • 一旦你启动了两个MySQL pod,数据要么通过PV/PVC共享来提供给两者,但这有点复杂,因为mysql服务器会尝试确定数据是否已经被超越,然后你会得到以某种方式愚弄他一点,这可能看起来很棘手(我没能做到这一点)。

  • 或者,您可以为每个 pod 使用数据库数据的副本(因此,需要通过重新复制源来处理对源数据库所做的更改)。这也是一项相当棘手的任务,但如果您是专业人士,那么肯定可以处理。 - 在一定时间后死亡的 Pod 很容易重现,每个 Pod 通过导入或低级复制来复制数据库。

© www.soinside.com 2019 - 2024. All rights reserved.