加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

docker – 为Kubernetes中的pod分配或限制资源?

发布时间:2020-12-16 03:33:40 所属栏目:安全 来源:网络整理
导读:Pod的资源限制已设置为: resource limit cpu: 500m memory: 5Gi 并且节点上还剩下10G内存. 我成功地在短时间内创建了5个pod,节点可能还剩下一些内存,例如8G. 随着时间的推移,mem的使用越来越多,并且达到极限(5G x 5 = 25G 10G),然后该节点将不再响应. 为了

Pod的资源限制已设置为:

resource
  limit
    cpu: 500m
    memory: 5Gi

并且节点上还剩下10G内存.

我成功地在短时间内创建了5个pod,节点可能还剩下一些内存,例如8G.

随着时间的推移,mem的使用越来越多,并且达到极限(5G x 5 = 25G> 10G),然后该节点将不再响应.

为了确保可用性,有没有办法在节点上设置资源限制?

更新

核心问题是pod内存使用并不总是等于限制,特别是在它刚刚启动时.因此,可以尽快创建无限的pod,然后使所有节点满载.这不好.可能有一些东西要分配资源而不是设置限制.

更新2

我再次测试了限制和资源:

resources:
  limits:
    cpu: 500m
    memory: 5Gi
  requests:
    cpu: 500m
    memory: 5Gi

总内存为15G,剩余14G,但3个pod已安排并成功运行:

> free -mh
              total        used        free      shared  buff/cache   available
Mem:            15G        1.1G        8.3G        3.4M        6.2G         14G
Swap:            0B          0B          0B

> docker stats

CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O
44eaa3e2d68c        0.63%               1.939 GB / 5.369 GB   36.11%              0 B / 0 B           47.84 MB / 0 B
87099000037c        0.58%               2.187 GB / 5.369 GB   40.74%              0 B / 0 B           48.01 MB / 0 B
d5954ab37642        0.58%               1.936 GB / 5.369 GB   36.07%              0 B / 0 B           47.81 MB / 0 B

看来该节点很快将被粉碎XD

更新3

现在我改变资源限制,请求5G并限制8G:

resources:
  limits:
    cpu: 500m
    memory: 5Gi
  requests:
    cpu: 500m
    memory: 8Gi

结果是:

enter image description here

根据k8s source code about the resource check:

enter image description here

总内存只有15G,而且所有的pod都需要24G,所以所有的pod都可能会被杀死.(我的单个容器通常如果没有限制,将花费超过16G.)

这意味着你最好保持请求完全等于限制,以避免pod dead或node crush.好像没有指定请求值,它将是set to the limit as default,那么究竟是什么请求用于?我认为只有限制是完全足够的,或IMO,与K8声称的相反,我更喜欢将资源请求设置为大于限制,以确保节点的可用性.

更新4

Kubernetes 1.1 schedule the pods mem requests通过公式:

(capacity – memoryRequested)> = podRequest.memory

似乎kubernetes并不关心内存使用情况,正如Vishnu Kannan所说.因此,如果mem使用很多其他应用程序,节点将被粉碎.

幸运的是,从提交e64fe822开始,公式已更改为:

(allocatable – memoryRequested)> = podRequest.memory

等待k8s v1.2!

Kubernetes资源规范有两个字段,请求和限制.

限制对容器可以使用的资源量设置上限.对于内存,如果容器超出其限制,它将被OOM杀死.对于CPU,其使用可能会受到限制.

请求的不同之处在于它们确保放置pod的节点至少具有可用的容量.如果要确保在没有节点资源耗尽的情况下您的pod可以增长到特定大小,请指定该大小的请求.这将限制您可以安排的pod数量–10G节点只能容纳2个具有5G内存请求的pod.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读