KEDA + Azure 自动缩放节点池不适用于 Anti-Affinity

时间:2021-06-19 20:30:11

标签: azure kubernetes keda

我将 Kubernetes 与托管在 Azure 上的 Keda scaledObject 结合使用。我正在根据 Azure 队列中的消息进行缩放,我需要实现以下目标:

  • 每个节点运行 1 个 pod,这非常重要,因为我们的代码经过高度优化,可以非常高效地使用所有 CPU,并且我们的每个模拟都需要大量内存。
  • 一个 pod/节点将在任何时候处理 1 个队列消息。
  • 扩展到自动扩展节点池上设置的最大 Pod 数。

理想情况下,Kubernetes 允许每个节点有 1 个最大 pod,无论如何,为什么不支持这让我感到沮丧。

我使用 AntiAffinity 为每个节点实现了 1 个 pod,如下所示:

 affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: "app"
            operator: In
            values:
            - my-app-name
        topologyKey: "kubernetes.io/hostname"

这工作正常。在 Keda 中的缩放对象上,我有以下设置

apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
  name: my-scaled-object
  namespace: default
spec:
  scaleTargetRef:
    deploymentName: my-app-deployment
    minReplicaCount: 0 
    maxReplicaCount: 10
    pollingInterval: 3  
    cooldownPeriod:  10 
    advanced:                                          
        restoreToOriginalReplicaCount: true            
        horizontalPodAutoscalerConfig:                   
          behavior:                                      
            scaleDown:
              stabilizationWindowSeconds: 30
              policies:
              - type: Percent
                value: 100
                periodSeconds: 15
  triggers:
  - type: azure-queue
    metadata:
      connectionFromEnv: AzureWebJobsStorage
      queueLength: "1"
      type: queueTrigger
      name: queueMessage
      queueName: my-queue-name

我有一个节点池,它是使用 az aks 命令和以下参数设置的 --node-count 0 --min-count 0 --max-count 10 --enable-cluster-autoscaler --max-pods 10

基本上什么都没有发生,当项目添加到队列时不会创建新节点。如果我扩展到最少 1 个节点,那么应用程序将部署到该节点,但由于队列中有大量项目,我仍然只能获得 1 个节点。

关于如何解决这个问题的任何想法将不胜感激,还有什么我需要配置才能让 Keda 了解我的自动缩放节点池?

提前致谢。

0 个答案:

没有答案