我在aws鞭炮中发出了以下命令来配置虚拟机。我的主机中只有8个vcpu。
curl --unix-socket /tmp/firecracker.socket -i \
-X PUT 'http://localhost/machine-config' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"vcpu_count": 20,
"mem_size_mib": 1024,
"ht_enabled": false
}'在Kubernetes中,如果我们尝试在主机中配置vcpu多于max vcpu的pod,它将进入挂起状态。但是firecracker没有显示任何错误或警告,它只是启动了虚拟机。
有没有人能解释一下firecracker是如何处理vcpu的?
发布于 2019-11-24 00:10:23
Firecracker是一个VMM,而vCPU只是一个运行在主机系统上的线程。
我不会把Kubernetes资源管理与VMM的行为混为一谈--它们是正交的。鞭炮启动虚拟机,而不是pod。
如果您要在Kubernetes中使用OCI运行时,该运行时利用鞭炮进行隔离,则最终pod的请求/限制的数量将由Kubernetes (计划程序/kubelet)限制。同样,这与VMM的行为方式是正交的。
发布于 2019-11-26 19:25:45
在“鞭炮”中,vCPU被实现为线程。
在实例启动时,Firecracker将为配置的每个vCPU创建一个线程。
例如,配置了4个vCPU的运行microvm有6个线程:主线程(处理设备仿真)、API线程(Fc_api)和4个vCPU线程。
ubuntu@ip-172-31-20-103:~$ ps H -o 'tid comm' 571
TID COMMAND
571 firecracker
572 fc_api
730 fc_vcpu3
731 fc_vcpu2
734 fc_vcpu1
735 fc_vcpu0使用鞭炮,您可以超额订阅CPU和内存,因此来宾内存的数量和vCPU的数量可能会远远高于实际的物理CPU和RAM。
Kubernetes的情况有所不同,因为当您在pod定义中指定cpu和内存限制时,它将防止您同时过度订阅内存和cpu。
https://stackoverflow.com/questions/59004999
复制相似问题