我在aws firecracker中发出了以下命令来配置VM。我的主机中只有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,它将移至挂起状态。但是鞭炮没有显示任何错误或警告,它只是启动了虚拟机。
有人请解释鞭炮如何处理vcpu吗?
答案 0 :(得分:0)
爆竹是VMM,而vCPU只是在主机系统上运行的线程。
我不会将Kubernetes资源管理与VMM的行为混为一谈-它们是正交的。爆竹启动虚拟机,而不是Pod。
如果要在Kubernetes中使用利用Firecracker进行隔离的OCI运行时,则结果Pod的请求/限制数将受到Kubernetes(调度程序/小管)的限制。同样,这与VMM的行为正交。
答案 1 :(得分:0)
在Firecracker中,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
使用Firecracker,您可以同时预订CPU和内存,因此来宾内存的数量和vCPU的数量可以比实际的物理CPU和RAM高得多。
Kubernetes的情况有所不同,因为当您在pod定义中指定cpu和内存限制时,它将防止您过度订阅内存和cpu。