本文分别以 Pod(或容器)/NameSpace 等为维度,介绍资源需求和资源限制。
Pod 资源限制
- requests: 资源需求的最低保证
- limits: 资源硬限制(limits>=requests)
资源:
容器内看到的内存为宿主机的,需要借助第三方工具(如 lxcfs)才能显示为限制的值。
帮助
kubectl explain pods.spec.containers.resources.[limits|requests]
示例
apiVersion: v1
kind: Pod
metadata:
name: stress-demo
labels:
app: hestress
spec:
containers:
- name: hestress
image: gcmirrors/stress:v1
resources:
requests:
memory: "64Mi"
cpu: "200m"
limits:
memory: "128Mi"
cpu: "500m"
$ kubectl apply -f pod-resource.yaml
pod/stress-demo created
LimitRange
以命名空间限制资源配置访问管理
在一个命名空间中实施对每个 Pod 或 Container 最小和最大的资源使用量的限制。
在一个命名空间中实施对每个 PersistentVolumeClaim 能申请的最小和最大的存储空间大小的限制。
在一个命名空间中实施对一种资源的申请值和限制值的比值的控制。
设置一个命名空间中对计算资源的默认申请/限制值,并且自动的在运行时注入到多个 Container 中。
limit-range.yaml
apiVersion: v1
kind: Namespace
metadata:
name: test-lr
----
apiVersion: v1
kind: LimitRange
metadata:
name: test-lr
namespace: test-lr-ns
spec:
limits:
- max:
cpu: "1"
memory: 1Gi
min:
cpu: 100m
memory: 10Mi
maxLimitRequestRatio:
cpu: 3
memory: 4
type: Pod
- default:
cpu: 300m
memory: 200Mi
defaultRequest:
cpu: 200m
memory: 100Mi
max:
cpu: "2"
memory: 1Gi
min:
cpu: 100m
memory: 10Mi
maxLimitRequestRatio:
cpu: 5
memory: 4
type: Container
ResourceQuota
限定单个 namespace 中可使用集群资源的总量
- 计算资源限制
- limits.cpu
- limits.memory
- requests.cpu
- requests.memory
- 存储资源
- requests.storage
- persistentvolumeclaims
- .storageclass.storage.k8s.io/requests.storage
- .storageclass.storage.k8s.io/persistentvolumeclaims
- requests.ephemeral-storage
- limits.ephemeral-storage
$ kubectl create namespace test
$ cat quota-test.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: quota-test
namespace: test
spec:
hard:
requests:
cpu: "20"
memory: 20Gi
limits:
cpu: "40"
memory: 40Gi
requests.nvidia.com/gpu: 10
pods: "10"
services: "10"
$ kubectl apply -f quota-test.yaml
$ kubectl get quota -n test