0

在 GKE 上使用 HPA(Horizo​​ntal Pod Autoscaler)和 Cluster Autoscaler,Pod 和节点按预期扩展。但是,当需求减少时,似乎会从随机节点中删除 pod。它导致使用较少的节点。这不划算...

编辑:HPA 基于 targetCPUUtilizationPercentage 单一指标。不使用 VPA。

这是用于部署和 HPA 的简化 yaml 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo
spec:
  replicas: 1
  templates:
    spec:
      containers:
      - name: c1
        resources:                                                                                                             
          requests:                                                                                                            
            cpu: 200m                                                                                                          
            memory: 1.2G                                                                                                       
      - name: C2
        resources:                                                                                                             
          requests:                                                                                                            
            cpu: 10m                                                                                                           
        volumeMounts:                                                                                                          
        - name: log-share                                                                                                      
          mountPath: /mnt/log-share                                                                                            
      - name: C3
        resources:
          requests:
            cpu: 10m
          limits:
            cpu: 100m
        - name: log-share                                                                                                      
          mountPath: /mnt/log-share                                                                                            
      volumes:
      - name: log-share
        emptyDir: {}

---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: foo
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: foo
  minReplicas: 1
  maxReplicas: 60
  targetCPUUtilizationPercentage: 80
...

EDIT2:添加一个 emptyDir 卷作为有效示例。

我该如何改善这种情况?

有一些想法,但没有一个能完全解决问题......

  • 配置节点池机器类型和 pod 资源请求,以便在一个节点上只容纳一个 pod。如果一个 pod 被 HPA 从一个节点中删除,该节点会在一段时间后被删除,但它不适用于各种资源请求的部署。
  • 如果可能,使用抢占式节点...
4

1 回答 1

2

抱歉,我没有提到 emptyDir 的使用(在问题中编辑了 yaml)。

当我自己评论这个问题时,我发现 哪些类型的 pod 可以阻止 CA 删除节点?在自动缩放器常见问题解答中。

具有本地存储的 Pod。*

emptyDir 卷是本地存储,因此我需要在部署的 pod 模板中添加以下注释,以标记 pod 可以安全地从使用较少的节点中驱逐。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo
spec:
  selector:
    matchLabels:
      app: foo
  template:
    metadata:
      labels:
        app: foo
      annotations:
        cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
    spec:
      ...

指定注解后,GKE 节点池的 GCE 实例组的大小比以前小了。我认为它奏效了!

在此处输入图像描述

感谢大家在问题中发表评论!

于 2020-03-31T02:18:27.910 回答