如何使kubernetes集群具有弹性?



你好,我在Azure Kubernetes服务中运行一个。net应用程序,作为3个pod集群(每个节点1个pod)。我试图了解如何使我的集群弹性取决于负载?我如何配置deployment.yaml,以便在每个pod的cpu利用率的特定%和/或内存的%之后生成另一个pod?同样的事情,当负载减少,我如何关闭实例。

是否有任何指南/教程来设置基于百分比(理想情况下)?

您需要使用的基本特性称为HorizontalPodAutoscaler或简称HPA。在这里,您可以配置cpu或内存限制,如果超过限制,pod副本数量将会增加。例如,从这个演练:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50

一旦pod的cpu利用率超过50%,这将扩展php-apache部署。请注意,计算资源利用率和由此产生的副本数量并不像看起来那么直观。也请参阅文档(整个页面也应该非常有趣)。您还可以组合标准以向外扩展。

还有一些插件可以帮助您根据其他参数进行扩展,例如队列中的消息数量。看看keda,他们提供不同的缩放器,如RabbitMQ, Kafka, AWS CloudWatch, Azure Monitor等。

既然你写了

每个节点1个pod

您可能正在运行DaemonSet。在这种情况下,向外扩展的唯一选择是添加额外的节点,因为对于守护进程集,每个节点总是恰好有一个pod。如果是这种情况,您可以考虑将DeploymentPodAntiAffinity结合使用,请参阅文档。通过这种方式,你可以将pods配置为在相同部署的pods尚未运行的节点上运行,例如:

[...]
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S2
topologyKey: topology.kubernetes.io/zone
[...]

从文档:

反关联规则表示调度程序应该尽量避免将Pod调度到与标签为security=S2的一个或多个Pod位于同一区域的节点上。更准确地说,调度器应该尽量避免将Pod放置在具有.kubernetes拓扑的节点上。如果同一区域中有其他节点正在运行带有Security=S2 Pod标签的Pod,则设置为io/zone=R标签

这将使扩展更加灵活,就像使用守护进程一样,但是您将获得在整个集群中均匀分布的pod的类似效果。

如果你想要/需要坚持一个守护进程,你可以检查AKS集群自动缩放器,它可以用来根据资源消耗自动从集群中添加/删除额外的节点。

相关内容

  • 没有找到相关文章

最新更新