这是一篇关于使用 heroku 进行扩展的精彩文章(它适用于传统部署)。
鉴于我们希望容器化应用程序是单个进程,我们如何获得:
- 缓慢的客户保护
- 慢响应保护
在充分利用水平 pod 自动缩放的 Kubernetes/GKE 环境中?
假设我的部署看起来很像以下(信用@nithinmalya4):
我还没有选择 Web 服务器,默认情况下rackup
正在服务WEBrick
. 我正在考虑将其更改为多线程 Puma。
我担心的是autoscaler
基于CPU的作品,而不是基于它的想法consumed by a current http/s request
,所以它可能不会发挥作用。
- 我是否正确理解自动缩放器?
- 什么是理想的向上/向下扩展架构?
我们目前的想法:
nginx
deflater
在Ingress
.puma
在rails前面(与image
rails-api相同),假设它会更好地利用cpu并触发自动缩放HPA 的自定义指标(仍然需要使用 1.8 进行研究)
在 GKE 上,我们从 1.9 版开始就一直支持使用自定义指标的 HPA。如果您的集群中有一组水平自动缩放的 pod,每个 pod 都导出一个自定义指标,那么您可以为该指标设置每个 pod 目标的平均值。
一个例子是前端的自动缩放部署,其中每个副本都导出其当前 QPS。可以设置每个前端 pod 的平均 QPS 目标,并使用 HPA 相应地扩大和缩小部署。您可以在此处找到说明如何设置的文档和教程:https ://cloud.google.com/kubernetes-engine/docs/tutorials/custom-metrics-autoscaling
GKE 上可用的 Kubernetes 1.10 将扩展对自定义指标的支持,以包括未附加到任何 Kubernetes 对象的指标。这将使您能够根据此处列出的任何指标来扩展部署,例如 Google Pub/Sub 队列中的消息数量。
HPA基于 CPU 利用率。您可以在 GKE(currenlty 测试版)上启用集群自动缩放,以根据工作负载调整 Kubernetes 集群的大小。有关更多详细信息,请查看github 上的 Cluster autoscaler FAQ。