Почему мои модули не соответствуют лимитам квоты ресурсов, если число совпадает?

После применения следующего ResourceQuota compute-resources к моему кластеру GKE

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    limits.cpu: "1"
    limits.memory: 1Gi

и обновив Deployment до

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-service
spec:
  selector:
    matchLabels:
      app: my-service
      tier: backend
      track: stable
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 50%
  template:
    metadata:
      labels:
        app: my-service
        tier: backend
        track: stable
    spec:
      containers:
        - name: my-service
          image: registry/namespace/my-service:latest
          ports:
            - name: http
              containerPort: 8080
          resources:
            requests:
              memory: "128Mi"
              cpu: "125m"
            limits:
              memory: "256Mi"
              cpu: "125m"

планирование не дает 100% попыток из-за pods "my-service-5bc4c68df6-4z8wp" is forbidden: failed quota: compute-resources: must specify limits.cpu,limits.memory. Поскольку limits и requests указаны и они соответствуют пределу, я не вижу причин, по которым модули должны быть запрещены.

Как модуль ограничивает ресурсы в кубернетах принудительно, когда пакет превышает ограничения после создания пакетов? - это другой вопрос.

Я обновил свой кластер до 1.13.6-gke.0.


person Karl Richter    schedule 30.05.2019    source источник
comment
Привет, Можете ли вы попробовать с 1 репликой, надеюсь, нет накладных расходов на контейнеры инициализации, так как ваши 2 реплики добавляют его к ядру 250 м   -  person Suresh Vishnoi    schedule 30.05.2019
comment
@SureshVishnoi Спасибо за ваш вклад. Я установил реплики на 1. Я также установил cpu: "1" и воспроизвел проблему в отдельном пространстве имен. Есть ли у вас еще одна идея?   -  person Karl Richter    schedule 30.05.2019


Ответы (1)


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

В качестве другого обходного пути попробуйте установить ограничения по умолчанию, включив контроллер допуска LimitRanger и настроив его, например

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
spec:
  limits:
  - default:
      memory: 256Mi
      cpu: 125m
    defaultRequest:
      cpu: 125m
      memory: 128Mi
    type: Container

Теперь, если Контейнер создается в пространстве имен по умолчанию, и Контейнер не указывает свои собственные значения для запроса ЦП и ограничения ЦП, Контейнер получает ограничения ЦП по умолчанию 125 м и предел памяти по умолчанию 256 Ми

Кроме того, после настройки LimitRange убедитесь, что вы удалили развертывание и не застряли поды в состоянии сбоя.

person A_Suh    schedule 30.05.2019
comment
Спасибо за ваш вклад. Я заменил ResourceQuota на LimitRange и заменил его для пространства имен на kubectl replace file.yml --namespace=mynamespace. Я удалил развертывания (подов не было). После воссоздания развертывания создание модулей по-прежнему не удается из-за Error creating: pods "my-service-85d5cf694d-vmhzb" is forbidden: exceeded quota: compute-resources, requested: limits.cpu=250m,limits.memory=64Mi, used: limits.cpu=2250m,limits.memory=2Gi, limited: limits.cpu=1,limits.memory=1Gi. Поведение одинаково на GKE, а также локально на microk8s в Ubuntu. - person Karl Richter; 30.05.2019
comment
по крайней мере, LimitRange решил must specify limits.cpu,limits.memory проблему. Итак, теперь у вас есть другая проблема - exceeded quota, которая ожидается, потому что вы уже использовали свою квоту) Проверьте текущее использование kubectl describe ResourceQuota -n mynamespace - person A_Suh; 30.05.2019
comment
Как узнать, откуда берутся значения квот? Я их не настраивал. Модуль не превышает квоту как по своим спецификациям, так и по требованиям времени выполнения (просто простаивает). Итак, я не вижу причин, по которым я должен получить эту ошибку. - person Karl Richter; 30.05.2019
comment
@KarlRichter Есть что-нибудь kubectl get all -n mynamespace - person A_Suh; 30.05.2019