我对 Kubernetes 还很陌生,我看到了一些相当有趣的自动缩放行为,其中涉及 AKS 节点、虚拟 kubelet 和 KEDA。
情况如下:
我们已经在 AKS 上部署了一个支持虚拟节点的 Kubernetes 集群。
我们在容器中使用 Azure Functions 运行时。我们的函数使用 Azure 存储队列触发器,我们使用 KEDA 自动缩放我们的 Kubernetes 实例。
我们创建了一个用户节点池,设置为在 0-4 个实例之间自动缩放,并观察到 KEDA 根据队列中的未完成消息成功自动缩放此池。
我们还添加了通过虚拟 kubelet 运行 Pod 的功能。我们禁用了我们的用户节点池,并观察到 KEDA 成功地自动扩展了我们的虚拟节点。
但是,我们希望在调度期间使用虚拟 kubelet 实例之前使用(和扩展)我们的用户节点池实例。因此,我们已将此处描述的相同节点反关联性和容忍规则添加到我们的部署中:https://github.com/Azure-Samples/virtual-node-autoscale#install-virtual-node-admission-controller-optional。
问题是用户节点池缩放没有发生,Pod 直接调度到虚拟节点上,跳过用户节点池自动缩放。
如果我们的 AKS 用户节点池中当前有 0 个实例正在运行,则 Pod 将直接调度到虚拟节点
如果当前至少有 1 个用户节点正在运行,那么 pod 将首先在其上进行调度,但它仍然不会自动缩放,因为进入的第二个 pod 将被调度到虚拟节点。此部署不会导致新实例添加到用户池。
如何从我的集群(或 KEDA)中获取更多关于为什么在调度虚拟节点之前不会发生用户节点扩展的信息?
AKS、KEDA、虚拟 Kubelet