Ожидается модуль службы Azure Kubernetes — 4 Недостаточно процессора

Я надеюсь, что кто-нибудь сможет пролить свет на эту проблему и способы ее решения.

у меня есть служба Azure Kubernetes, работающая на уровне FRee с двумя рабочими узлами:

  • системный узел (VM Standard_D2ds_v5), используется для контрольных диаграмм и имеет автоматическое масштабирование до максимум 2 экземпляров.
  • Linux-узел ( Standard_D2ds_v5), это узел, который я использую для всех своих развертываний, и его можно масштабировать до 6 экземпляров.

Всего я выпускаю около 40 модулей, и каждый модуль имеет коляску istio.

Сегодня я начинаю видеть, что после каждого выпуска новый модуль переходит в статус ожидания с сообщением: 0/5 nodes are available: 1 node(s) didn't match Pod's node affinity/selector, 4 Insufficient cpu. preemption: 0/5 nodes are available: 1 Preemption is not helpful for scheduling, 4 No preemption victims found for incoming pod..

Я немного запутался, потому что не могу точно определить проблему.

Читая документацию Microsoft, я вижу, что существует ограничение в 30 модулей на узел, что означает, что у меня предположительно может быть всего 180 модулей, 30 на узел и всего 6 узлов в масштабируемом наборе рабочих Linux (верно?)

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

я подготовил этот файл yaml:

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: kube-system
spec:
  limits:
  - default:
      cpu: "500m"
    defaultRequest:
      cpu: "250m"
    type: Container
---
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: default
spec:
  limits:
  - default:
      cpu: "500m"
    defaultRequest:
      cpu: "250m"
    type: Container

Я применил ограничение ресурсов, но, похоже, ничего не изменилось. Я вижу ограничения, если описываю пространства имен, но модули продолжают находиться в состоянии ожидания.

Просто чтобы уточнить, поскольку я считаю это важным. рабочие используют сеть Azure CNI, которая ограничивает количество модулей 30 на узел.

Пожалуйста, если кто-нибудь может помочь мне понять, что я здесь делаю неправильно, я буду благодарен, и если вам нужна дополнительная информация, не стесняйтесь спрашивать.

Ознакомьтесь с разделом Диагностика и решение проблем службы Azure Kubernetes — он может предоставить некоторую информацию об этой проблеме и, возможно, предложить решение.

Rui Jarimba 27.06.2024 14:02

похоже, что проблема связана с тем, что узлам не хватает ресурсов ЦП. запуск 40 модулей с дополнительными модулями Istio может потреблять значительное количество ресурсов ЦП. Можете ли вы добавить их в свой поток - kubectl top nodes kubectl описать узлы и журналы kubectl -n kube-system Deployment/cluster-autoscaler

Arko 01.07.2024 06:27

Найден, мне только что пришло в голову, что если примененный вами предельный диапазон предназначен только для kube-system и пространств имен по умолчанию, и возможно, что ваши поды работают в другом пространстве имен. Можете ли вы проверить это один раз? У вас может быть повреждение на одном из ваших узлов, что делает его непригодным для планирования, несмотря на наличие свободной памяти. Вы можете найти пятно и удалить его. Вы можете использовать kubectl для описания узлов | grep -e 'Taint\|Hostname', чтобы определить, какой из двух узлов имеет загрязнение. Проверьте все это один раз. Если все в порядке, попробуйте удалить запрос ресурсов и ограничение из файла развертывания POD.

Arko 02.07.2024 07:32
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
3
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы решить проблему ожидающих модулей с недостаточными ресурсами ЦП, вы можете попробовать уменьшить ограничения ЦП и добавить в кластер больше рабочих узлов.

Вы можете обратиться к примеру ниже и сравнить его с вашей настройкой.

Здесь у меня есть два узла в моем кластере navAKSCluster.

Пул системных узлов-

az aks nodepool add \
  --resource-group navrg \
  --cluster-name navAKSCluster \
  --name systempool \
  --node-count 1 \
  --enable-cluster-autoscaler \
  --min-count 1 \
  --max-count 2 \
  --node-vm-size Standard_D2ds_v5 \
  --mode System

пул пользователей

az aks nodepool add \
  --resource-group navrg \
  --cluster-name navAKSCluster \
  --name userpool \
  --node-count 1 \
  --enable-cluster-autoscaler \
  --min-count 1 \
  --max-count 6 \
  --node-vm-size Standard_D2ds_v5 \
  --mode User

Ограничения примененного ресурса

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: kube-system
spec:
  limits:
  - default:
      cpu: "500m"
    defaultRequest:
      cpu: "250m"
    type: Container
---
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
  namespace: default
spec:
  limits:
  - default:
      cpu: "500m"
    defaultRequest:
      cpu: "250m"
    type: Container

и развернул приложение

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        resources:
          requests:
            cpu: "100m"
            memory: "200Mi"
          limits:
            cpu: "500m"
            memory: "500Mi"

Теперь, если ты увидишь, если я это сделаю

kubectl get pods -n default

или

kubectl top nodes

Если вы по-прежнему сталкиваетесь с проблемами с ожидающими модулями из-за ограничений ЦП, вы можете масштабировать пул узлов:

kubectl scale deployment nginx --replicas=20 -n default

Теперь проверьте

kubectl get pods -n default

вы даже можете настроить горизонтальное автомасштабирование модулей.

kubectl autoscale deployment nginx --cpu-percent=50 --min=10 --max=50 -n default

Использованная литература:

Другие вопросы по теме