RancherVM兴衰启示录:复盘这个2018年的KVM容器化实验,它给今天的虚拟化容器留下了什么教训

📅 2026/8/23 12:52:06
RancherVM兴衰启示录:复盘这个2018年的KVM容器化实验,它给今天的虚拟化容器留下了什么教训
RancherVM兴衰启示录复盘这个2018年的KVM容器化实验它给今天的虚拟化容器留下了什么教训【免费下载链接】old-vm(OBSOLETE) Package and Run Virtual Machines as Docker Containers项目地址: https://gitcode.com/gh_mirrors/ol/old-vmRancherVM 是 Rancher Labs 于 2018 年推出的开源项目把KVM 虚拟机打包成 Docker 容器镜像以 VM Pod 的形式跑在 Kubernetes 集群上让你像管理普通容器一样管理虚拟机。项目已于 2020 年被标记为 OBSOLETE停止维护但它虚拟机即容器的大胆实验恰好预演了今天 Kata Containers、KubeVirt 们走过的路。本文带你快速复盘它的架构、部署方式以及它留下的 5 条关键教训。 时代背景2018 年容器和虚拟机的第一次结婚2018 年前后Kubernetes 1.8 刚刚支持CRD自定义资源定义社区开始思考一个新问题能否把 QEMU/KVM 虚拟机塞进 Pod获得容器的易用性 虚拟机的隔离性RancherVM 的答案是任意 QEMU/KVM 镜像推荐压缩qcow2可以打包成普通 Docker 镜像推到任意镜像仓库分发用户提交一个VirtualMachineCRD 声明要几核、多少内存、什么镜像、哪些 SSH 公钥控制器自动创建对应的 VM Pod自带 Web UI可管理密钥、节点、虚拟机并通过浏览器访问 VNC 控制台。整个控制面由几个 Pod 组成见部署清单 deploy/ranchervm.yaml$ kubectl -n ranchervm-system get pods backend / frontend / ip-controller / vm-controller⚙️ 核心设计一个偷天换日的网络技巧RancherVM 最惊艳的部分是让 VM 看起来就是一个容器。秘密藏在入口脚本 image/vm-tools/startvm 中设计文档见 docs/networking.md容器启动时Kubernetes 已给eth0分好 IP、MAC、网关、DNSstartvm记下这套配置把eth0挂到容器内的 Linux 桥br0上给桥上的虚拟网卡通过内置dnsmasq独占 DHCP把原容器的 IP 和 MAC 原封不动过户给虚拟机exec启动 QEMU/KVMQEMU 进程成为容器 PID 1直通桥接网络。结果就是kubectl看到的 IP、端口转发、Service 发现全部对 VM 透明生效。虚拟机在集群里户口和容器一模一样这是它最有前瞻性的设计。其他值得一提的机制镜像分发用 qcow2 压缩可减 50% 体积 镜像仓库构建示例见 image/ 目录下的 Ubuntu、CentOS、Windows 等 Dockerfile快照与发布MachineImageCRD 支持从运行中的 VM 做快照、备份并发布成新镜像pkg/apis/ranchervm/v1alpha1/types.go热迁移修改spec.node_name即触发 QMP 迁移带进度查询与失败回滚pkg/qemu/migrate.go、pkg/controller/vm/migrate.go存储支持本地卷、emptyDir后期接入了 Longhorn 分布式块存储。 使用体验一份声明式 YAML 起一台 VM部署后创建一台 Ubuntu 虚拟机只需要提交类似下面的VirtualMachine资源示例见 deploy/example/virtualmachine.yamlapiVersion: vm.rancher.io/v1alpha1 kind: VirtualMachine metadata: name: example-ubuntu spec: action: start cpus: 1 memory_mb: 512 image: rancher/vm-ubuntu:16.04.4-server-amd64 public_keys: - james代价是部署门槛不低所有节点要求启用 KVM、处于同一二层网络且已有 DHCP 服务器、并预先配好宿主机桥接网卡——这些硬性前提为它的衰落埋下了伏笔。⚠️ 衰落复盘它留下的 5 条教训网络是最硬的骨头。容器网络模型veth overlay CNI与 VM 需要的 L2/DHCP 桥接天然冲突。IP 过户技巧虽妙却依赖全网同 L2 广播域跨机房、跨云、CNI 环境下寸步难行。今天 Kata 与 KubeVirt 都选择了给 VM 单独建模 CNI IPAM绕开了这个死结。资源密度与镜像体积是容器用户的敏感神经。每个 VM Pod 都要拉几 GB 的 qcow2 镜像、占用百 MB 起步的内核内存调度与存储成本远高于普通容器。虚拟机镜像必须当作重型资产管理预分发、多副本可用RancherVM 的MachineImage状态机provision/ready/nodes 列表正是为这件事做的尝试。安全模型要默认安全。VM 容器需要特权挂载/dev/kvm、自定义网络、透传 QEMU 参数安全面比普通容器大得多。项目自己也提示不建议自定义 KVM 参数。后来的方案普遍用安全沙箱运行时seccomp、gVisor 之外的 Kata 硬件隔离把特权收进白名单。单机迁移漂亮集群编排是深水区。热迁移 回滚已经实现但故障恢复、节点驱逐、滚动升级等 Kubernetes 运维语义与 QEMU 进程的对接复杂度高维护成本最终压垮了团队——2020 年项目宣布 OBSOLETE。生态位被后来者覆盖。Rancher 团队的力量转向了 Kubernetes 生态更主流的方向VM in Pod这块拼图由 Kata Containers、cloud-hypervisor、KubeVirt 以不同技术路线续写。 遗产哪些设计活到了今天虚拟机镜像进容器仓库今天用image-builder、cloud-image containerd 分发 VM 模板已成标配镜像即 qcow2/vhd 打进 OCI 镜像的思路与 RancherVM 一脉相承CRD 声明式管理 VMKubeVirt 的VirtualMachineCRD 几乎复刻了它的 API 心智模型声明 spec → 控制器收敛 → 回写 status 状态机pending/running/migrating/error这套状态设计在今天仍常见热迁移作为一等公民改node_name触发迁移的模式仍是VM 上 K8s的标准玩法VM 与容器同构管理的验证它证明了容器网络语义可以透明地套在 VM 上——这正是安全沙箱容器Kata 等今天交付的核心体验。 结语RancherVM 不是失败品而是一份 2018 年的预告片它以较小的工程体量提前跑通了KVM 虚拟机容器化 声明式管理 热迁移全链路。如果你想在今天做 VM-in-Container 或安全容器相关的工作不妨把它当作第一手的历史教材重读一遍——很多今天的理所当然当年正是从这个仓库里第一次被验证的。想动手研究的话可以获取源码后重点阅读 docs/networking.md 与 image/vm-tools/startvmgit clone https://gitcode.com/gh_mirrors/ol/old-vm.git注项目已停止维护仅建议用于架构研究与学习。【免费下载链接】old-vm(OBSOLETE) Package and Run Virtual Machines as Docker Containers项目地址: https://gitcode.com/gh_mirrors/ol/old-vm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考