Helo我正在Azure Kubernetes Services中运行一个.NET应用程序作为3 pod集群(每个节点1个pod)。我试图了解如何使我的集群根据负载而具有弹性?我如何配置deployment.yaml
,以便在每个pod的CPU利用率达到一定的%
和/或内存达到一定的%
后,它会生成另一个pod?同样的事情,当负载减少时,我如何关闭示例。
是否有任何指南/教程来根据百分比(理想情况下)设置此功能?
Helo我正在Azure Kubernetes Services中运行一个.NET应用程序作为3 pod集群(每个节点1个pod)。我试图了解如何使我的集群根据负载而具有弹性?我如何配置deployment.yaml
,以便在每个pod的CPU利用率达到一定的%
和/或内存达到一定的%
后,它会生成另一个pod?同样的事情,当负载减少时,我如何关闭示例。
是否有任何指南/教程来根据百分比(理想情况下)设置此功能?
1条答案
按热度按时间56lgkhnf1#
您需要使用的基本功能称为
HorizontalPodAutoscaler
或简称为HPA
。您可以在这里配置CPU或内存限制,如果超过限制,Pod副本数量将增加。例如this walkthrough:一旦pod的cpu利用率超过50%,这将扩展php-apache部署。请注意,计算资源利用率和由此产生的副本数量并不直观,因为它可能会接缝。也可以看文档(整个页面也应该很有趣)。您还可以组合合并标准进行横向扩展。
还有一些插件可以帮助您根据其他参数进行扩展,例如队列中的消息数量。看看keda,他们提供不同的缩放器,如RabbitMQ,Kafka,AWS CloudWatch,Azure Monitor等。
既然你写了
每个节点1个pod
您可能正在运行
DaemonSet
。在这种情况下,扩展的唯一选择就是添加额外的节点,因为对于守护进程集,每个节点总是只有一个pod。如果是这种情况,您可以考虑使用Deployment
与PodAntiAffinity
组合,请参阅docs。这样您就可以配置pod优先在同一部署的pod尚未运行的节点上运行,例如:来自文档:
反亲合规则指出,调度器应尽量避免将Pod调度到与一个或多个标签为security=S2的Pod位于同一区域的节点上。更准确地说,topology.kubernetes.io/zone=R如果同一区域中有其他节点正在运行带有Security=S2 Pod标签的Pod,则调度器应尽量避免将Pod放置在带有www.example.com标签的节点上。
这将使横向扩展更加灵活,因为它是一个daemonset,但你有一个类似的效果,即pod在集群中均匀分布。
如果你想/需要坚持一个守护进程,你可以查看AKS Cluster Autoscaler,它可以用来根据资源消耗自动添加/删除集群中的其他节点。