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