2

我已在 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?

4

2 回答 2

3

Firecracker 是一个 VMM,而 vCPU 只是在主机系统上运行的一个线程。

我不会将 Kubernetes 资源管理与 VMM 的行为方式混为一谈——它们是正交的。Firecracker 启动虚拟机,而不是 Pod。

如果您要在 Kubernetes 中使用使用 Firecracker 进行隔离的 OCI 运行时,则生成的 pod 的请求数/限制数将受到 Kubernetes(调度程序/kubelet)的限制。同样,这与 VMM 的行为方式是正交的。

于 2019-11-23T16:10:22.607 回答
2

在 Firecracker 中,vCPU 被实现为线程。

在实例启动时,Firecracker 将为每个配置的 vCPU 创建一个线程。

例如,配置了 4 个 vCPU 的正在运行的 microvm 有 6 个线程:主线程(处理设备仿真)、api 线程(fc_ap​​i)和 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。

于 2019-11-26T11:25:44.907 回答