GKE 资源请求不能降低到 100 mCPU 以上



我最近使用GKE版本1.19.9-GKE.1900建立了一个Kubernetes集群,目的是在不同的命名空间中旋转微服务组。每个服务的pod都包含一个服务映像和一个Istio代理映像。每个pod的初始CPU资源请求是100mCPU,但这比给定命名空间中的大多数服务都要大。这导致集群的可用CPU不足,无法启动服务,即使我在任何给定时间只使用了总可用CPU的25%左右。

垂直自动缩放被禁用,我尝试使用Deployment、ResourceQuota和LimitRange清单设置25 mCPU的资源限制。

# First tried this
apiVersion: apps/v1
kind: Deployment
spec:
...
template:
...
spec:
containers:
- name: service-name
image: service-name:dev
resources:
requests:
cpu: 25m
memory: 128Mi
limits:
cpu: 2000m
memory: 512Mi
...
---
# Then this
apiVersion: v1
kind: LimitRange
metadata:
name: limit-range-limiter
spec:
limits:
- default:
cpu: 100m
memory: 512Mi
defaultRequest:
cpu: 25m
memory: 128Mi
type: Container
---
# Then this finally
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-limiter
spec:
hard:
requests.cpu: 25m
limits.cpu: 2000m
requests.memory: 128Mi
limits.memory: 512Mi

使用Deployment和LimitRange,服务的pod将请求125 mCPU,而不是仅请求25 mCPU。使用ResourceQuota时,我收到一个错误,必须设置cpu和;内存请求和限制,尽管它在清单中。这会导致复制副本失败,并阻止启动我的服务。

我还注意到,默认情况下,每个命名空间都有一个从GKE安装的ResourceQuota,名为gke-resource-quotas,无法编辑。但是,如果在创建命名空间之后但在部署任何服务之前直接应用ResourceQuota清单,则不会添加gke-resource-quotas文件。

pod是否可以在GKE上请求低于100 mCPU的任何东西?

编辑:我们设法弄清楚发生了什么。Istio默认为Pod请求100mCPU。实际配置值是在istio-sidecar-injectorConfigMap中设置的。一旦我们改变了这个值,Pods就可以从一个更低的值开始。

我想扩展guillaume blaquiere所说的,pod可以请求低于100 mCPU的任何东西。例如,请参阅资源请求和限制

1-CPU的默认请求为100m。对于许多应用程序来说,这太小了,而且可能比节点上可用的CPU数量小得多。

2-没有默认的内存请求。没有默认内存请求的Pod可以调度到没有足够内存运行Pod工作负载的节点上。

3-为CPU或内存请求设置太小的值可能会导致在给定节点上调度太多Pod或Pod的次优组合,从而降低性能。

4-为CPU或内存请求设置太大的值可能会导致Pod不可调度,并增加集群的资源成本。

有关更多信息,请参阅。