k8s资源中的resourcequotas

k8s中可以对namespace来做资源限制,主要通过 ResourceQuota 对象来定义资源配额限制,它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命令空间中的 Pod 可以使用的计算资源的总上限。
首先我们可以检查是否本集群开启了资源配额

kubectl api-resources | grep quota
#返回
resourcequotas                    quota                                       true         ResourceQuota

说明已经开启了资源配额
我们下面可以撰写一个例子来实现资源的配额

cat test-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: quota
  namespace: test
spec:
  hard:
    requests.cpu: "4"
    requests.memory: "1Gi"
    requests.storage: "100Gi"
    pods: "4"

创建资源配额

kubectl apply -f test-quota.yaml

验证方式

cat client.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: client
  name: client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  strategy: {}
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
      - image: busybox:1.24.1
        name: busybox
        args:
        - sh
        - -c
        - "sleep 3600"
        resources:
          requests:
            memory: 2Gi

创建测试deployment

kubectl apply -f client.yml -n test

然后我们可以看到POD是pendding状态,于是查看RS副本事件

kubectl -n test describe rs client-9d57dfdf6

返回如下事件信息

Events:
  Type     Reason        Age               From                   Message
  ----     ------        ----              ----                   -------
  Warning  FailedCreate  29s               replicaset-controller  Error creating: pods "client-9d57dfdf6-9x74f" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=1Gi, limited: requests.memory=1Gi
  Warning  FailedCreate  29s               replicaset-controller  Error creating: pods "client-9d57dfdf6-62kxp" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=1Gi, limited: requests.memory=1Gi
  Warning  FailedCreate  29s               replicaset-controller  Error creating: pods "client-9d57dfdf6-nx9bs" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=1Gi, limited: requests.memory=1Gi
  Warning  FailedCreate  29s               replicaset-controller  Error creating: pods "client-9d57dfdf6-zs9jl" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=1Gi, limited: requests.memory=1Gi
  Warning  FailedCreate  28s               replicaset-controller  Error creating: pods "client-9d57dfdf6-llrdj" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=1Gi, limited: requests.memory=1Gi
  Warning  FailedCreate  28s               replicaset-controller  Error creating: pods "client-9d57dfdf6-25qrk" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=1Gi, limited: requests.memory=1Gi
  Warning  FailedCreate  28s               replicaset-controller  Error creating: pods "client-9d57dfdf6-2tlxl" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=1Gi, limited: requests.memory=1Gi
  Warning  FailedCreate  28s               replicaset-controller  Error creating: pods "client-9d57dfdf6-fdl4j" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=1Gi, limited: requests.memory=1Gi
  Warning  FailedCreate  27s               replicaset-controller  Error creating: pods "client-9d57dfdf6-hjfnf" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=1Gi, limited: requests.memory=1Gi
  Warning  FailedCreate  8s (x4 over 26s)  replicaset-controller  (combined from similar events): Error creating: pods "client-9d57dfdf6-5xkj7" is forbidden: exceeded quota: quota, requested: requests.memory=2Gi, used: requests.memory=0, limited: requests.memory=1Gi

再尝试创建一个5副本的deployment

cat web.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 5
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
        resources:
          requests:
            memory: 100m
            cpu: 50m

创建测试deployment

kubectl apply -f web.yml -n test

查看创建的副本事件

kubectl -n test describe rs web-584b96b57

返回如下事件信息

Events:
  Type     Reason            Age                 From                   Message
  ----     ------            ----                ----                   -------
  Normal   SuccessfulCreate  70s                 replicaset-controller  Created pod: web-584b96b57-m9hkv
  Normal   SuccessfulCreate  70s                 replicaset-controller  Created pod: web-584b96b57-24pk5
  Normal   SuccessfulCreate  70s                 replicaset-controller  Created pod: web-584b96b57-szg9x
  Warning  FailedCreate      70s                 replicaset-controller  Error creating: pods "web-584b96b57-4ttxz" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4
  Normal   SuccessfulCreate  70s                 replicaset-controller  Created pod: web-584b96b57-czr6q
  Warning  FailedCreate      70s                 replicaset-controller  Error creating: pods "web-584b96b57-jv9mp" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4
  Warning  FailedCreate      70s                 replicaset-controller  Error creating: pods "web-584b96b57-7vsjh" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4
  Warning  FailedCreate      70s                 replicaset-controller  Error creating: pods "web-584b96b57-7pbxc" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4
  Warning  FailedCreate      70s                 replicaset-controller  Error creating: pods "web-584b96b57-sdlgw" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4
  Warning  FailedCreate      70s                 replicaset-controller  Error creating: pods "web-584b96b57-ksjzx" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4
  Warning  FailedCreate      70s                 replicaset-controller  Error creating: pods "web-584b96b57-gqk28" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4
  Warning  FailedCreate      70s                 replicaset-controller  Error creating: pods "web-584b96b57-spczj" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4
  Warning  FailedCreate      70s                 replicaset-controller  Error creating: pods "web-584b96b57-8kzvt" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4
  Warning  FailedCreate      20s (x12 over 69s)  replicaset-controller  (combined from similar events): Error creating: pods "web-584b96b57-rjkxh" is forbidden: exceeded quota: quota, requested: pods=1, used: pods=4, limited: pods=4

通过以上两个例子可以看到资源限制可以达到我们的要求。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/891.html