比如我有 100 个 pods,总共给它们分配 8c/32g,有什么手段可以办到吗?
这些 pods 大部分时间只有少部分活动,其他的都在待机状态,只耗内存不耗 cpu
1
felixin OP 不能在一个 pod 里装多个 container,因为端口,文件系统会冲突
|
2
515576745 2021-07-11 02:59:09 +08:00 via Android
pod 模板指定 resource request 和 limit
|
3
kaikai5601 2021-07-11 10:04:45 +08:00 via iPhone 2
在一个 namespace 下面可以,分配 ns 限制
|
4
vhui 2021-07-11 11:57:59 +08:00 1
resourcequota ?
|
5
liuxu 2021-07-11 13:40:41 +08:00
ns 限制是正解
|
6
felixin OP @kaikai5601 这个好像是指该 ns 下的 pod 的资源 limit 总和,也就是说比如创建 100 个 pod 的话,每个 pod 上写的 limit 不能超过总数 8c/100=0.08c ,这样他们加起来才是总数 8c 。
但我需要的是每一个 pod 的 limit 都是 8c,100 个 pod 的总 limit 也是 8c,这个好像是做不到的? 也就是如果有前面一个 pod 占用了全部的 8c,那么后面的 pod 可以完全无响应。最差情况下允许有 99 个完全无法运行的 pod 。 |
7
kaikai5601 2021-07-12 00:25:11 +08:00 via iPhone
@felixin 做不到,你 limit 不够,apiserver 不会接受你创建 pod 的请求了。你这样做的意义是啥。?
|
8
littlezzll 2021-07-12 00:44:17 +08:00 via Android
limitrange default? Pod 不指定 resource 就走默认的 limitrange
|
9
turingli 2021-07-12 07:12:46 +08:00 via Android
不限制 pod 只限制 ns
|
10
Abirdcfly 2021-07-12 09:05:22 +08:00 1
|
11
miaoshixuan 2021-07-12 09:38:48 +08:00
k8s 做不到的
|
12
lvzhiqiang 2021-07-12 10:42:22 +08:00
共享一套限制可以从 NS 层级去控制,POD 设置一个默认的限制,但是目前没办法根据应用 POD 的状态去调整 POD 的内存用量,内存你一旦分配出去,除非杀掉,否则内存是回收不回来,除非你应用如果不重要的话,通过流量请求唤醒,我觉得有可能实现,但是这又会引生其它问题。
|
13
felixin OP @kaikai5601 就是一套插件系统允许用户上传自己的容器镜像生成 pod,但是大多数 pod 只有个位数的请求量,长期占用 cpu 资源太浪费了
|
14
felixin OP @lvzhiqiang 流量唤醒这个思路可以试试
|
15
kaikai5601 2021-07-12 11:58:22 +08:00 1
@felixin 建议直接 pod 限制,如果用户有操作的话配置 HPA,自动扩容,用户操作结束自动缩
|
16
salmon5 2021-07-12 11:59:19 +08:00 1
可以配置,这种是 Burstable level 的 pod
limit > request,可以大很多; requests: cpu: 50m memory: 128Mi limits: cpu: 8000m memory: 16Gi 可以运行 160 个 pod |
17
noahzh 2021-07-12 14:50:00 +08:00
不限制不就完了。
|
19
felixin OP @salmon5 谢谢,找了点资料
https://www.weave.works/blog/kubernetes-pod-resource-limitations-and-quality-of-service |
20
felixin OP |