我今天对 Azure Kubernetes 上的自动缩放设置进行了一些测试。我注意到,当触发自动缩放时,下一个节点需要一段时间才能启动,因此最后一个 pod 必须等待很长时间才能被安排。我希望当我的服务器达到某个阈值时,添加新节点,但仍可以在已运行的节点上安排 pod。这可能吗?
答案1
要回答如何触发自动扩缩,以便 Pod 不必等待新节点的问题,本文描述了一种名为“Pause Pods”的优雅策略:
Pod 优先级和抢占是 Kubernetes 中的一项功能,可让您为 Pod 分配优先级。简而言之,这意味着当集群资源不足时,它可以抢占(删除)低优先级 Pod,以便为等待调度的高优先级 Pod 腾出空间。借助 Pod 优先级,我们可以运行一些虚拟 Pod,仅用于在集群中预留额外空间,这些空间将在“真实”Pod 需要运行时立即释放。用于预留的 Pod 理想情况下不应使用任何资源,而只是待在那里什么也不做。您可能听说过 Kubernetes 中已经使用的暂停容器不同的目的暂停容器的一个特性是它主要只是调用暂停syscall 的意思是“睡眠直到收到信号”。
总而言之,我们可以在集群中运行一堆暂停 Pod,其唯一目的是保留空间,以诱使集群自动缩放器过早添加额外节点。由于这些 Pod 的优先级低于常规 Pod,因此一旦资源变得稀缺,它们就会被逐出集群。然后,暂停 Pod 将进入待处理状态,进而触发集群自动缩放器增加容量。总的来说,这是一种在集群中始终拥有动态缓冲区的非常优雅的方法。