k8s namespace限制最大资源使用量

2023-08-31  本文已影响0人  Lyudmilalala

当一个node上有多个服务,每个服务有自己的命名空间,且我们不希望因为一个服务请求过多而饿死其他服务时,可以限制每个命名空间的最大资源持有率

先生成一个命名空间

kubectl create ns rq-test-ns

创建一个限制命名空间资源利用率的约束

apiVersion: v1
kind: ResourceQuota
metadata:
  name: test-rq
  namespace: rq-test-ns
spec:
  hard:
    pods: "10"
    requests.cpu: "1"
    requests.memory: "500Mi"
    limits.cpu: "1"
    limits.memory: "500Mi"

P.S. 若ResourceQuota中设置了limit,则pod文件中必须包含limit参数

应用

编写在这个命名空间中创建pod的脚本

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-3
  namespace: rq-test-ns
spec:
  containers:
  - name: nginx-pod-1
    image: nginx:latest
    resources:
      requests:
        cpu: "100m"
        memory: "100Mi"
      limits:
        cpu: "100m"
        memory: "200Mi"

连续在这个命名空间中创建pod,当pod的request.memory总和超过规定的命名空间request.memory时,会报错

$ kubectl apply -f .\podConfig.yml
pod/nginx-pod-1 created
$ kubectl apply -f .\podConfig.yml
pod/nginx-pod-2 created
$ kubectl apply -f .\podConfig.yml
Error from server (Forbidden): error when creating ".\\podConfig.yml": pods "nginx-pod-3" is forbidden: exceeded quota: test-rq, requested: limits.memory=200Mi,requests.memory=200Mi, used: limits.memory=400Mi,requests.memory=400Mi, limited: limits.memory=500Mi,requests.memory=500Mi

可以通过一下命令修改已存在的ResourceQuota

$ kubectl patch resourcequota test-rq -n rq-test-ns --type='json' -p="[{'op': 'replace', 'path': '/spec/hard/requests.memory', 'value': '300Mi'}]"
resourcequota/test-rq patched

然而,修改ResourceQuota并不会导致任何已经创建的Pod被驱逐。一旦Pod被创建,并且其资源请求被ResourceQuota接受,那么即使后续改变了ResourceQuota,该Pod的资源也不会被回收。

上一篇 下一篇

猜你喜欢

热点阅读