После применения следующих 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
указаны и они соответствуют лимиту, я не вижу причин, по которым следует запрещать поды.
Как pod ограничивает ресурсы в kubernetes, когда pod превышает лимиты после создания pod'ов? - это другой вопрос.
Я обновил свой кластер до 1.13.6-gke.0.
@SureshVishnoi Спасибо за ваш вклад. Я установил реплики на 1. Я также установил cpu: "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 убедитесь, что вы удалили свое развертывание и что все модули не застряли в состоянии сбоя.
Спасибо за ваш вклад. Я заменил 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.
по крайней мере, Предельный диапазон решил must specify limits.cpu,limits.memory
проблему. Итак, теперь у вас есть еще одна проблема - exceeded quota
, которая ожидается, потому что вы уже использовали свою квоту) Проверьте текущее использование kubectl describe ResourceQuota -n mynamespace
Как выяснить, откуда берутся значения квот? Я их не настроил. Модуль не превышает квоту по своим спецификациям, а также по требованиям времени выполнения (просто бездействует). Итак, я не вижу причин, по которым я должен получить эту ошибку.
@KarlRichter Есть что-нибудь kubectl get all -n mynamespace
Привет. Можете ли вы попробовать с 1 репликой, надеюсь, нет накладных расходов на контейнеры инициализации, так как ваши 2 реплики добавляют его к 250-метровому ядру.