如果数量匹配,为什么我的Pod无法满足资源配额限制?

时间:2019-05-30 08:24:04

标签: memory kubernetes cpu google-kubernetes-engine quota

将以下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"

由于pods "my-service-5bc4c68df6-4z8wp" is forbidden: failed quota: compute-resources: must specify limits.cpu,limits.memory,调度失败了100%的尝试。由于已指定limitsrequests并且它们达到了限制,因此我不认为应禁止使用豆荚。

How pod limits resource on kubernetes enforced when the pod exceed limits after pods is created ?是另一个问题。

我将群集升级到1.13.6-gke.0。

1 个答案:

答案 0 :(得分:0)

我本来建议在单独的命名空间中进行测试,但请确保您已经尝试过。

作为另一种解决方法,请尝试通过启用LimitRanger准入控制器并进行设置来设置默认限制

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

现在,如果在默认名称空间中创建了一个容器,并且该容器未指定其自己的CPU请求和CPU限制值,则该容器将获得默认的CPU限制125m和默认的内存限制256Mi

此外,在设置LimitRange之后,请确保已删除部署,并且没有pod处于失败状态。