0

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

  • 每个节点运行 1 个 pod,这非常重要,因为我们的代码经过高度优化,可以非常有效地使用所有 CPU,而且我们的每个模拟都需要大量内存。
  • 一个 pod/node 将在任何时候处理 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 知道我的自动缩放节点池吗?

提前致谢。

4

0 回答 0