Bind Resources

资源

eru 目前管理了四大资源: CPU, Memory, Volume, Storage, 详细的文档在这里.

不过我们可以先用几个典型使用场景来感受一下.

  1. 限制容器的 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         │                          │          │
└──────────────────────────────────────────────────────────────────┴───────────────────────────┴──────────────────────────┴──────────┘
  1. cpu 的绑定

cpu 绑定的行为稍微复杂一点, 可以看这里.

不过可以简单理解为进程会绑定在指定的 cpu core 上.

使用上的话只要多指定一个 --cpu-bind 就可以了.

这时候可以看到 CPUMap 里记录了容器绑定的 cpu: CPUMap: map[1:100]

  1. 无限制的容器

在 eru 资源请求里指定 0 即代表无限制, 如

注意到 request 和 limit 是分离的语义, 所以可以指定 request=0 但是 limit>0, 代表着“不消耗 eru 资源池, 但是在操作系统层面依然做限制”; 或者 request>0 但是 limit=0, 代表“消耗 eru 资源池, 但是不做实际的限制”.

  1. 挂载 volume 资源

使用 volume 之前要先注册节点上的 volume 资源.

其实 cpu 和 memory 也需要指定注册, 但是由于是系统指标可以自动采集, 所以不指定的时候默认注册节点上的全部 cpu 和 memory.

这是一开始的节点资源.

可以看到新加了 2G 的盘 /data, VOLUMESTORAGE 都有相应的增加.

然后就可以在接下来的请求里指定 volume 了, 要写在 spec.yaml 里:

命令行照旧:

可以看到容器从节点的 /data volume 上划分出去里 20,000,000 bytes 的空间给容器, 节点上的资源也能反映出来被使用了这么多:

  1. 使用 NUMA

和 Volume 一样, 在使用 NUMA 之前要先注册.

首先查看 NUMA 节点:

然后添加节点的时候需要指定:

NUMA 会影响调度行为, 在计算绑核的时候会保证绑定在同一 NUMA 节点上.

Last updated