Bind Resources
资源
eru 目前管理了四大资源: CPU, Memory, Volume, Storage, 详细的文档在这里.
不过我们可以先用几个典型使用场景来感受一下.
限制容器的 cpu 和 memory
root@localhost:~# eru-cli workload deploy --pod testpod --image bash --entry zc --cpu-request 1 --cpu-limit 2 --memory-request 15M --memory-limit 15M ./spec.yaml
INFO[2021-03-15 02:26:46] [Deploy] Success ae96772e9cc60b4bc36d663cf66d0b04a849d144cad2905513b2d45ac169b8d3 zc_zc_EwUJow node1 1 2 map[] 15728640 15728640 map[] map[]命令行里的 --cpu-request 1 --cpu-limit 2 和 --memory-request 15M --memory-limit 15M 就是用来指定资源配额的.
request 和 limit 的区别在这里, 不过如果你搞不清楚的话直接让两个都配置一样的值.
查看容器的时候会显示资源:
root@localhost:~# eru-cli workload get ae96772e9cc60b4bc36d663cf66d0b04a849d144cad2905513b2d45ac169b8d3
┌──────────────────────────────────────────────────────────────────┬───────────────────────────┬──────────────────────────┬──────────┐
│ NAME/ID/POD/NODE │ STATUS │ VOLUME │ NETWORKS │
├──────────────────────────────────────────────────────────────────┼───────────────────────────┼──────────────────────────┼──────────┤
│ zc_zc_EwUJow │ CPUQuotaRequest: 1.000000 │ VolumePlanRequest: map[] │ │
│ ae96772e9cc60b4bc36d663cf66d0b04a849d144cad2905513b2d45ac169b8d3 │ CPUQuotaLimit: 2.000000 │ VolumePlanLimit: map[] │ │
│ testpod │ CPUMap: map[] │ │ │
│ node1 │ MemoryRequest: 15728640 │ │ │
│ │ MemoryLimit: 15728640 │ │ │
│ │ StorageRequest: 0 │ │ │
│ │ StorageLimit: 0 │ │ │
│ │ Privileged: false │ │ │
└──────────────────────────────────────────────────────────────────┴───────────────────────────┴──────────────────────────┴──────────┘cpu 的绑定
cpu 绑定的行为稍微复杂一点, 可以看这里.
不过可以简单理解为进程会绑定在指定的 cpu core 上.
使用上的话只要多指定一个 --cpu-bind 就可以了.
这时候可以看到 CPUMap 里记录了容器绑定的 cpu: CPUMap: map[1:100]
无限制的容器
在 eru 资源请求里指定 0 即代表无限制, 如
注意到 request 和 limit 是分离的语义, 所以可以指定 request=0 但是 limit>0, 代表着“不消耗 eru 资源池, 但是在操作系统层面依然做限制”; 或者 request>0 但是 limit=0, 代表“消耗 eru 资源池, 但是不做实际的限制”.
挂载 volume 资源
使用 volume 之前要先注册节点上的 volume 资源.
其实 cpu 和 memory 也需要指定注册, 但是由于是系统指标可以自动采集, 所以不指定的时候默认注册节点上的全部 cpu 和 memory.
这是一开始的节点资源.
可以看到新加了 2G 的盘 /data, VOLUME 和 STORAGE 都有相应的增加.
然后就可以在接下来的请求里指定 volume 了, 要写在 spec.yaml 里:
命令行照旧:
可以看到容器从节点的 /data volume 上划分出去里 20,000,000 bytes 的空间给容器, 节点上的资源也能反映出来被使用了这么多:
使用 NUMA
和 Volume 一样, 在使用 NUMA 之前要先注册.
首先查看 NUMA 节点:
然后添加节点的时候需要指定:
NUMA 会影响调度行为, 在计算绑核的时候会保证绑定在同一 NUMA 节点上.
Last updated