我们有一个在 kubernetes 中运行的应用程序。但是,这个应用程序仅支持固定数量的人。
它有多个系统:
- D B
- 认证系统
- Web应用程序
- 媒体经理
我们可以按需扩展Web Application
和Media Manager
。但是,Authentication system
设计时并未考虑到扩展到更高的数字。这也是一个问题,因为这是一个封闭的系统,所以无法对其进行修改。
但是,系统可以自行扩展,就像一个分片一样。我们可以毫无问题地将不同的用户发送到每个分片。
我们如何才能扩大这些规模shards
?
系统现在的行为如下:
- 1 数据库/身份验证部署
- 1 Web 应用程序部署
- HPA 检查应用程序的负载并根据需要进行扩展
- 媒体管理器的状态集
- 可根据需要扩展的 HPA
因此我们需要一个更高级别的东西来做这件事:
- 操作员?控制器?也许分析指标?这将扩大以下范围:
- 1 数据库/身份验证部署
- 1 Web 应用程序部署
- HPA 检查应用程序的负载并根据需要进行扩展
- 媒体管理器的状态集
- 可根据需要扩展的 HPA
因此,随着负载的增加,我们能够根据需要扩大这些“分片”。
我认为可以通过控制器或操作员来实现。但是,有没有操作员已经像这样工作了?
感谢您的帮助!
答案1
让我们从部署开始,由于您正在使用部署,我假设这些部署可以轻松扩展,
您可以通过向其 pod 添加 sidecar 容器来监控这些部署,从而公开指标数据,然后收集数据并将其存储在 prometheus 之类的东西中,然后您可以使用 prometheus 调用 webhook,只要这些指标显示数据库延迟或应用程序任何类型的高响应时间。
接收 webhook 的应用程序将通过 kubernetes api 扩大或缩小您的部署(您应该开发这个应用程序,但它相当简单)
对于身份验证系统,您可以使用相同的策略,但略有不同。
假设您有 4 个分片,为每个分片创建一个单独的部署,每个分片都有一个分片,由于它是分片的,我假设已经建立了路由机制。
配置路由机制以通过各自的服务在这 4 个部署之间分配请求。
像其他系统一样从身份验证管理器收集指标,但是当您的系统检测到性能下降时,重新分片身份验证管理器,方法取决于它的行为。
例如,当您向分片群集添加更多副本集时,mongodb 分片群集将扩展,但当需要更多性能时,redis 群集需要分片重新平衡和哈希槽修改。
无论哪种方式,您都需要按需创建更多部署,这也是从 prometheus 接收 webhook 的应用程序的工作。
还要重新配置路由机制以连接到新创建的分片。