限制linux服务器内存使用,配置缺省内存运行与请求限制

有时候忘记设置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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值