【问题标题】:How aws firecracker handles vcpu?aws firecracker 如何处理 vcpu?
【发布时间】:2020-03-19 03:51:43
【问题描述】:

我已在 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,它将进入挂起状态。但是 firecracker 没有显示任何错误或警告,它只是启动了 vm。

谁能解释一下鞭炮如何处理vcpu?

【问题讨论】:

    标签: linux kubernetes kata-containers firecracker


    【解决方案1】:

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

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

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

    【讨论】:

    • 是否有任何文档或资源来理解这个概念。
    • 爆竹文档可以在其github repo上找到
    【解决方案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-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      相关资源
      最近更新 更多