Resource Quota
Resource quotas are mechanisms created to constrain the usage of resources by users. This process operates as follows:
Resource Quotas apply to Namespaces and each Namespace can have a maximum of one
ResourceQuota
object.Once the computational resources quota has been initiated, computational resource requests or limits must be configured when creating the container (default values can also be set using the LimitRange function).
New resources cannot be created if the user exceeds their quota.
Activating Resource Quota Function
Firstly, configure admittance control
--admission-control=ResourceQuota
when launching API Server.Secondly, create a
ResourceQuota
object in the namespace.
Types of Resource Quotas
Computational resources, including CPU and memory
CPU, limits.cpu, requests.cpu
Memory, limits.memory, requests.memory
Storage resources, including total storage and specific storage class total
Requests.storage: total storage resources, such as 500Gi
Persistentvolumeclaims: pvc number
.storageclass.storage.k8s.io/requests.storage
.storageclass.storage.k8s.io/persistentvolumeclaims
Requests.ephemeral-storage and limits.ephemeral-storage (requires v1.8+)
Object count, meaning the number of creatable objects
Pods, replicationcontrollers, configmaps, secrets
Resourcequotas, persistentvolumeclaims
Services, services.loadbalancers, services.nodeports
Computational resource example:
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
spec:
hard:
pods: "4"
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
Object count example:
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
spec:
hard:
configmaps: "10"
persistentvolumeclaims: "4"
replicationcontrollers: "20"
secrets: "10"
services: "10"
services.loadbalancers: "2"
LimitRange
By default, no CPU or memory limits exist for any container in Kubernetes. LimitRange is used to add a resource limit to the Namespace, consisting of minimum, maximum, and default resources. For example,
apiVersion: v1
kind: LimitRange
metadata:
name: mylimits
spec:
limits:
- max:
cpu: "2"
memory: 1Gi
min:
cpu: 200m
memory: 6Mi
type: Pod
- default:
cpu: 300m
memory: 200Mi
defaultRequest:
cpu: 200m
memory: 100Mi
max:
cpu: "2"
memory: 1Gi
min:
cpu: 100m
memory: 3Mi
type: Container
$ kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/limits.yaml --namespace=limit-example
limitrange "mylimits" created
$ kubectl describe limits mylimits --namespace=limit-example
Name: mylimits
Namespace: limit-example
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Pod cpu 200m 2 - - -
Pod memory 6Mi 1Gi - - -
Container cpu 100m 2 200m 300m -
Container memory 3Mi 1Gi 100Mi 200Mi -
Quota Ranges
Several ranges can be specified when creating each quota
Terminating
Pod with podSpec.ActiveDeadlineSeconds>=0
NotTerminating
Pod with podSpec.activeDeadlineSeconds=nil
BestEffort
Pod where all containers' requests and limits are not set (Best-Effort)
NotBestEffort
Opposite of BestEffort
最后更新于