与云厂商的 API 直接交互,使实例的创建更加灵活和高效,充分利用云厂商的原生功能,如 Spot 实例。
Karpenter 还具备智能化功能,可优化资源利用率并低完工本。
Karpenter 怎样改进 CA
Pod-centric的方法
先进的节点整合
自定义Provisioners
更快的节点启动速度
对Spot实例的支持
Karpenter 面临的挑战
对 Pod 分布限定的依赖
CPU 和内存需求协调问题
有限的云服务支持
什么是 Cluster Autoscaler?
Cluster Autoscaler (CA) 是一个旨在根据资源需求自动调整 Kubernetes 集群大小的工具。它能监控待调度状态的 Pod,根据需要进行扩容或缩容。
CA 会持续监控 API server,以查找无法调度的 Pod,并创建新的节点来托管这些 Pod。它还会识别资源利用率不足的节点,并在将 Pod 迁移后移除这些节点。
虽然从技能上它支持多种节点设置,但管理这些设置可能会变得很复杂。通常,使用单一类型的节点进行扩展更简单,由于每增长一种实例类型,都需要创建一个新的 Auto Scaling Group。
Cluster Autoscaler的范围性
虽然 CA 能够有效实行其核心功能,但它也存在一些缺点和范围性。
CA 可以实现快速扩展,但它在缩减规模时的过程需要逐个删除节点,并伴随着肯定的耽误。这可能导致在需求激增后,规复到正常水平的速度会较为迟钝,从而导致资源处于低利用率状态的时间延长。
接下来,我们来看看其他的范围性:
基于Auto Scaling Group的策略
CA 所接纳的“一刀切”方法意味着许多Pod可能无法与节点匹配,从而导致资源利用效率低下,通常还会导致资源的过度设置。
使用Cluster Autoscaler设置节点组的灵活性也较为有限,由于每个节点组通常只能包含一种实例类型。虽然可以创建多个节点组以支持不同工作负载,但这会显著增长复杂性和管理成本。
比如需要在同一组内结合按需实例和 Spot 实例,这种情况在 CA 中并不被支持,它需要在维护多个 Auto Scaling Group 的同时增长额外的代码或设置来管理。
随着时间的推移,这种设置可能变得繁琐且低效。
缩容的能力有限