# 官方提供@yunTaoScripts 资源限制Quota 🔥🔥

loading

# 针对单个容器的资源限制

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: cts
  name: cts
spec:
  containers:
  - command:
    - sleep
    - "1000000"
    image: centos:centos7.9.2009
    name: cts
    resources:
      requests:
        memory: "256Mi"        ###预留最少
        cpu: "500m"
      limits:
        memory: "512Mi"        ###实际可以用到最多
        cpu: "1000m"
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

cpu大小的说明

在kubernetets系统上,1个单位的CPU相当于虚拟机上的一颗虚拟CPU (vCPU)或者物理机上的一个超线程(HyperThread,或者称一个逻辑 CPU),它支持分数计量方式,一个核心(1 core)相当于1000个微核心 (millicores),因此500m相当于是0.5个核心,即二分之一个核心。

# 创建limtRange、

  • 对命名空间所有pod进行统一限制。
apiVersion: v1 
kind: LimitRange 
metadata:
  name: mem-min-max-demo-lr
  namespace: 13-account 
spec:
  limits: 
  - max:
      memory: 1Gi 
    min:
      memory: 512Mi 
    type: Container    ###针对容器 或者 Pod

DANGER

  • 如果容器内没有声明最大值最小值,则使用LimitRange这里设置的。
  • 如果容器里声明的limitsrequests大于或者小于limitrange里的max或者min,都会导致pod创建不成功。
  • 容器申请的资源不能超过limit

# 创建resourceQuota

apiVersion: v1
kind: ResourceQuota 
metadata:
  name: yuntao-quota
spec:
  hard:
    pods: "4"
    requests.cpu: "1" 
    requests.memory: 1Gi
    limits.cpu: "2" 
    limits.memory: 2Gi 
    requests.nvidia.com/gpu: 4 
    configmaps: "10" 
    persistentvolumeclaims: "4" 
    replicationcontrollers: "20" 
    secrets: "10"
    services: "10" 
    services.loadbalancers: "2"
  • 已创建了4个pod,quota限制继续创建
  • kubectl run web4 --image=nginx
Error from server (Forbidden): pods "web4" is forbidden: exceeded quota: yuntao-quota, requested: pods=1, used: pods=4, limited: pods=4

limitrange和resourcequtoa的区别

  • limitrange 用来限制每个pod的资源 。
  • resourcequtoa 用来限制项目里可以使用多少资源。