企业级容器技术 k8s 容器资源限制器

资源限制k8s采用limit和request两种
limit资源限额,最多是多少。
request资源需求,满足最基本的才能运行。

内存限制

首先做一个测试,创建一个pod

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
  - name: memory-demo
    image: stress  ##专门做压力测试的镜像
    args:  ##镜像参数
    - --vm
     - "1"
    - --vm-bytes
    - 200M    ##测试200M内存
    resources:
      requests:
        memory: 50Mi  ##最小50
      limits:
        memory: 100Mi  ##不能超过100M

使用文件创建pod

[kubeadm@server1 limit]$ kubectl get pod
NAME          READY   STATUS      RESTARTS   AGE
memory-demo   0/1     OOMKilled   2          42s

在这里我们看到这个pod已经OOMKilled,这时因为内存超出了设定的值。
当我们将最后两行,最大值去掉后再运行这个pod,状态就会变成running,就可以使用200M的内存。

cpu限制

apiVersion: v1
kind: Pod
metadata:
  name: cpu-demo
spec:
  containers:
  - name: cpu-demo
    image: stress
    args: 
    - -c
    - "2"
    resources:
      requests:
        cpu: "5"
      limits:
        memory: "10"

使用这个文件创建pod,pod也不会运行,因为最少需要5个cpu但是镜像只运行两个,达不到要求,所以状态会变成Pending。

[kubeadm@server1 limit]$ kubectl get pod
NAME       READY   STATUS    RESTARTS   AGE
cpu-demo   0/1     Pending   0          3s

为namespace设置资源限制

apiVersion: v1
kind: LimitRange  ##资源限制
metadata:
  name: limitrange-memory
spec:
  limits:   ##限制了两种内存和cpu
  - max:    ##最主要就是设置最小和最大
      cpu: 1
      memory: 1Gi
    min:
      cpu: 0.1
      memory: 100Mi
    default:    ##当pod没有定义资源限制时用这个
      memory: 512Mi
      cpu: 0.5
    defaultRequest:
      memory: 256Mi
      cpu: 0.1
    type: Container
[kubeadm@server1 limit]$ kubectl describe limitranges 
Name:       limitrange-memory
Namespace:  default
Type        Resource  Min    Max  Default Request  Default Limit  Max Limit/Request Ratio
----        --------  ---    ---  ---------------  -------------  -----------------------
Container   cpu       100m   1    100m             500m           -
Container   memory    100Mi  1Gi  256Mi            512Mi          -

这样设置完成后创建一个pod,如果不定以资源限制,则会自动将使用Default中的信息进行限制。

为namespaces设置资源配额

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

启用了这个资源配额,每个容器必须设置限额和请求cpu和内存都要设置。如果不设置会报错。

[kubeadm@server1 limit]$ kubectl describe resourcequotas 
Name:            mem-cpu-demo
Namespace:       default
Resource         Used  Hard
--------         ----  ----
limits.cpu       0     2      ##现在使用是空,没有使用
limits.memory    0     2Gi
requests.cpu     0     1
requests.memory  0     1Gi

现在启动一个不指定cpu和内存的pod,创建以后会提示forbidden。只有设置完成或者提前设置了limitrange后才可以创建。

[kubeadm@server1 limit]$ kubectl describe resourcequotas
Name:            mem-cpu-demo
Namespace:       default
Resource         Used   Hard
--------         ----   ----
limits.cpu       500m   2
limits.memory    512Mi  2Gi
requests.cpu     100m   1
requests.memory  256Mi  1Gi
限制pod的数量
apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-demo
spec:
  hard:
    pods: "2"  ##限制pod数量
[kubeadm@server1 limit]$ kubectl describe resourcequotas 
Name:       pod-demo
Namespace:  default
Resource    Used  Hard
--------    ----  ----
pods        1     2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值