目录
k8s容器资源限制
Kubernetes采用request和limit两种限制类型来对资源进行分配。
request(资源需求)
limit(资源限额)
详情参照官网:https://kubernetes.io/zh/docs/concepts/policy/resource-quotas/
为容器和 Pod 分配内存资源
详情参照官网:https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-memory-resource/
将内存 请求 (request)和内存 限制 (limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。
内存限制示例
kubectl apply -f memory.yaml
kubectl get pod
# memory.yaml
apiVersion: v1
kind: Pod
metadata:
name: memory-demo
spec:
containers:
- name: memory-demo
image: stress
args:
- --vm
- "1"
- --vm-bytes
- 200M
resources:
requests:
memory: 50Mi
limits:
memory: 100Mi
示例截图():
为容器和 Pods 分配 CPU 资源
详情参照官网:https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-cpu-resource/
为容器设置 CPU request(请求) 和 CPU limit(限制)。 容器使用的 CPU 不能超过所配置的限制。 如果系统有空闲的 CPU 时间,则可以保证给容器分配其所请求数量的 CPU 资源。
cpu 限制示例
kubectl apply -f cpu.yaml
kubectl get pod
kubectl describe pod cpu-demo
# cpu.yaml
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
spec:
containers:
- name: cpu-demo
image: stress
resources:
limits:
cpu: "1"
requests:
cpu: "0.5"
args:
- -c
- "1"
示例截图(错误示范):
示例截图(正确截图):
为命名空间配置默认的内存请求和限制
详情参照官网:https://kubernetes.io/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/
给命名空间配置默认的内存请求和限制。 如果在一个有默认内存限制的命名空间创建容器,该容器没有声明自己的内存限制时, 将会被指定默认内存限制。 Kubernetes 还为某些情况指定了默认的内存请求,
基于namespace 限制
kubectl apply -f ns.yaml
kubectl get pod
kubectl get limitranges
kubectl describe limitranges limitrange-memory
# ns.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: limitrange-memory
spec:
limits:
- default:
cpu: 0.5
memory: 512Mi
defaultRequest:
cpu: 0.1
memory: 256Mi
max:
cpu: 1
memory: 1Gi
min:
cpu: 0.1
memory: 100Mi
type: Container
示例截图:
硬限制
注意:创建了ResourceQuota 必须设置资源配额
配置命名空间下 Pod 配额:限制pod 个数。(详情参照官网:https://kubernetes.io/zh/docs/tasks/administer-cluster/manage-resources/quota-pod-namespace/)
配置一个命名空间下可运行的 Pod 个数配额。 你可以使用 ResourceQuota 对象来配置配额。
kubectl apply -f quota.yaml
kubectl describe resourcequotas
kubectl get pod
# quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "0.5"
requests.memory: 1Gi
limits.cpu: "1"
limits.memory: 2Gi
---
apiVersion: v1
kind: ResourceQuota
metadata:
name: pod-demo
spec:
hard:
pods: "2"