k8s资源限制【针对namespace、pod、Container】
K8s中对资源的限制分以下情况:对namespace中容器、pod等使用总和限制ResourceQuota对namespace中容器、pod等使用单独限制:LimitRange创建一个namespace用于测试kubectl create namespace quota-mem-cpu-example创建一个ResourceQuota对namespa...
·
K8s中对资源的限制分以下情况:
- 对namespace中容器、pod等使用总和限制
ResourceQuota
- 对namespace中容器、pod等使用单独限制:
LimitRange
- 创建一个namespace用于测试
kubectl create namespace quota-mem-cpu-example
- 创建一个ResourceQuota对namespace中资源使用总和做限制,创建quota-mem-cpu.yaml
资源配额的类型
- 计算资源,包括cpu和memory
- cpu, limits.cpu, requests.cpu
- memory, limits.memory, requests.memory
- 存储资源,包括存储资源的总量以及指定storage class的总量
- requests.storage:存储资源总量,如500Gi
- persistentvolumeclaims:pvc的个数
- .storageclass.storage.k8s.io/requests.storage
- .storageclass.storage.k8s.io/persistentvolumeclaims
- 对象数,即可创建的对象的个数
- pods, replicationcontrollers, configmaps, secrets
- resourcequotas, persistentvolumeclaims
- services, services.loadbalancers, services.nodeports
示例1:
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
spec:
hard:
pods: "4"
configmaps: "10"
persistentvolumeclaims: "4"
replicationcontrollers: "20"
secrets: "10"
services: "10"
services.loadbalancers: "2"
示例2:
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
kubectl create -f quota-mem-cpu.yaml --namespace=quota-mem-cpu-example
查看 ResourceQuota 详情:
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
ResourceQuota 在 quota-mem-cpu-example 命名空间中设置了如下要求:
- 每个容器必须有内存请求和限制,以及 CPU 请求和限制。
- 所有容器的内存请求总和不能超过1 GiB。
- 所有容器的内存限制总和不能超过2 GiB。
- 所有容器的 CPU 请求总和不能超过1 cpu。
- 所有容器的 CPU 限制总和不能超过2 cpu。
- 创建一个LimitRange,对namespace中pod、容器设置单独的默认限制
创建limits.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default: # default limit
memory: 512Mi
cpu: 2
defaultRequest: # default request
memory: 256Mi
cpu: 0.5
max: # max limit
memory: 800Mi
cpu: 3
min: # min request
memory: 100Mi
cpu: 0.3
maxLimitRequestRatio: # max value for limit / request
memory: 2
cpu: 2
type: Container # limit type, support: Container / Pod / PersistentVolumeClaim
kubectl create -f limits.yaml --namespace=limit-example
查看一下在该 Namespace 中被强加的限制
kubectl describe limits mylimits --namespace=limit-example
CPU和内存的单位
CPU的测量单位是
cpus
,允许分数值。你可以使用前缀m
来表示mili
(千分之一)。例如100m
cpu就是100milicpu
,等价于0.1CPU。内存的测量单位是字节。你可以使用纯整数来表示内存,也可以使用一些前缀:E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki.
- 创建pod时,指定资源限制
apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo
spec:
containers:
- name: quota-mem-cpu-demo-ctr
image: nginx
resources:
limits:
memory: "800Mi"
cpu: "800m"
requests:
memory: "600Mi"
cpu: "400m"
更多推荐
已为社区贡献17条内容
所有评论(0)