Как дефрагментировать использование ресурсов узла GKE с помощью HPA и Cluster Autoscaler - PullRequest
0 голосов
/ 25 марта 2020

Используя HPA (Horizontal Pod Autoscaler) и Cluster Autoscaler на GKE, модули и узлы масштабируются, как и ожидалось. Однако, когда спрос уменьшается, модули удаляются из случайных узлов, кажется. Это вызывает меньше используемых узлов. Это не экономически эффективно ...

РЕДАКТИРОВАТЬ: HPA основан на единичных метриках targetCPUUtilizationPercentage. Не используется VPA.

Это сокращенный файл yaml для развертывания и HPA:

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 в качестве допустимого примера.

Как улучшить в этой ситуации?

Есть некоторые идеи, но ни одна из них не решает проблему полностью ...

  • настроить тип компьютера пула узлов и запрос ресурсов модуля так, чтобы на него помещался только один модуль узел. Если модуль HPA удаляет модуль из узла, через некоторое время узел будет удален, но он не будет работать для развертываний различных запросов ресурсов.
  • с использованием вытесняющих узлов, если это возможно ...

1 Ответ

1 голос
/ 31 марта 2020

Извините, я не упомянул об использовании emptyDir (отредактировал yaml в вопросе).

Когда я сам прокомментировал вопрос, я обнаружил Какие типы модулей могут помешать CA удалить узел? в FAQ по Autoscaler.

Бобы с локальным хранилищем. *

Том emptyDir является локальным хранилищем, поэтому мне нужно было добавить следующую аннотацию в шаблон модуля развертывания, чтобы пометить модуль как безопасное извлечение из менее используемых узлов.

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:
      ...

После указания аннотации размер группы экземпляров GCE пула узлов GKE меньше, чем раньше. Я думаю, что это сработало!

enter image description here

Спасибо всем, кто прокомментировал вопрос!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...