限制linux服务器内存使用,配置缺省内存运行与请求限制
有时候忘记设置pod的内存请求大小和内存运行大小。对于k8s集群调度器的资源管理说不是很友好,而且在pod突然内存暴增的时候容易引起节点内核OOM杀掉服务。这个时候我们可以设置NS级别缺省内存请求和内存缺省限制。最佳实践原则(设置动机):1.每一个容器运行在每个命名空间中都要有自己的内存限制。2.整个命名空间的容器的,运行内存总量不能超过NS限制的pod内存设置。3.缺省的在每一个业务的ns上配置
有时候忘记设置pod的内存请求大小和内存运行大小。
对于k8s集群调度器的资源管理说不是很友好,而且在pod突然内存暴增的时候容易引起节点内核OOM杀掉服务。
这个时候我们可以设置NS级别缺省内存请求和内存缺省限制。
最佳实践原则(设置动机):
1.每一个容器运行在每个命名空间中都要有自己的内存限制。
2.整个命名空间的容器的,运行内存总量不能超过NS限制的pod内存设置。
3.缺省的在每一个业务的ns上配置内存资源限制,防止POD被节点OOM。
创建命名空间
kubectl create namespace sklinux
设置sklinux缺省限制
设置NS级别的内存运行和请求限制如:
#mem.limit.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: sklinux
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
kubectl create -f mem.limit.yaml
这样将sklinux命名空间设置容器类型请求缺省内存请求和大小限制为512M和256M。上面的default表示不设置,则缺省。
验证限制
创建pod
#nginx.pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-mem-demo
spec:
containers:
- name: nginx-mem-demo
image: nginx
kubectl create -f pod.yaml -n sklinux
获取配置
kubectl get pod/nginx-mem-demo -n sklinux -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/podIP: 172.19.173.193/32
kubernetes.io/limit-ranger:
'LimitRanger plugin set: memory request for container
nginx-mem-demo; memory limit for container nginx-mem-demo'
creationTimestamp: "2020-08-14T04:05:37Z"
name: nginx-mem-demo
namespace: sklinux
resourceVersion: "53291457"
selfLink: /api/v1/namespaces/sklinux/pods/nginx-mem-demo
uid: 86794b0a-49f3-4bea-825f-43470607a141
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx-mem-demo
resources:
limits:
memory: 512Mi
requests:
memory: 256Mi
...
单独配置内存请求和运行限制
resources:
limits:
memory: 1Gi
requests:
memory: 1Gi
cpu限制
apiVersion: v1
kind: LimitRange
metadata:
name: sklinux
spec:
limits:
- max:
cpu: "4"
memory: 2Gi
min:
cpu: 200m
memory: 6Mi
maxLimitRequestRatio:
cpu: 3
memory: 2
type: pod
- default:
cpu: 300m
memory: 512Mi
defaultRequest:
cpu: 200m
memory: 256Mi
max:
cpu: "2"
memory: 1Gi
min:
cpu: 100m
memory: 3Mi
maxLimitRequestRatio:
cpu:5
memory: 4
type: Container
pod部分:
对Pod中所有容器资源总和进行限制(一般场景在pod)。
max表示pod中最大的cpu和内存限制值,min表示资源请求下限。
不能请求小于该值的cpu和内存,否则创建失败。
使用场景:
1.节点内存和pod之间的关系:比如节点内存2G,你不希望有超过2G的pod。
2.共享集群,生产和研发混部。
允许产品工作负载集能到8G内存,研发pod只能限制在512M。
这样就可以在不同的NS设置不同的策略。
maxLimitRequestRatio表示最大的请求比。比如上面是3:2 表示cpu:memory比值,比如cpu3:memory0.5=1:6 这样创建会失败。
Container部分:
max、min、maxLimitRequestRatio和pod类似。
对 Container 使用资源进行限制,在Pod中的每一个容器都受此限制(一般场景在deployment、sts这种)。
如果container设置了max, pod中的容器必须设置limit,如果未设置,则使用defaultlimt的值,如果defaultlimit也没有设置,则无法成功创建。
如果设置了container的min,创建容器的时候必须设置request的值,如果没有设置,则使用defaultrequest,如果没有defaultrequest,则默认等于容器的limit值,如果limit也没有,启动就会报错。
defaultrequest和defaultlimit则是默认值,注意:pod级别没有这两项设置。
更多推荐
所有评论(0)