如果数字匹配,为什么我的 pods 不满足资源配额限制?

Why do my pods not fulfill the resource quota limits if the number match?

将以下 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 并且它们达到了限制,所以我看不出 pods 应该被禁止的原因。

是一个不同的问题。

我将集群升级到 1.13.6-gke.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 后,请确保您删除了部署并且没有 pods 卡在失败状态。