RancherVM 是一个开源的、轻量化的虚拟机管理工具,让用户能够和运行 Docker 容器一样,打包和运行虚拟机。
RancherVM 项目自几年前推出以来,得到了大量用户的积极反馈。用户也在过去几年时间里为 Rancher Labs 工程团队提出了不少极有价值的意见与建议,尤其是对节点集群上的虚拟机的管理这一方面的需求。
如今,用户可以在 Kubernetes 上使用 RancherVM 了! 现在的 RancherVM 中添加了资源调度、基于浏览器的 VNC 客户端、IP 地址发现、基于密钥的身份验证以及新版本的用户界面。本文将带你一探究竟!
RancherVM 设计思路
RancherVM 在深层次上大量使用了 Docker 容器化以及容器镜像仓库。虚拟机基础镜像被打包成 Docker 镜像发布到任意 Docker 镜像仓库中。RancherVM 还自带了很多存储在 Docker Hub 中的、大受欢迎的操作系统镜像。用户可以在各种公有和私有镜像仓库中进行自由选择,甚至可以运行自己的私有镜像仓库:https://docs.docker.com/registry/deploying/。
现在,每个虚拟机都运行在 Kubernetes pod 中,我们称之为 VM pod。Kubernetes 控制器负责管理 vm pod 的生命周期,授予用户启动或关闭虚拟机、修改机器的 cpu 和内存分配的权限等等。
持久化存储
RancherVM 系统定义了自己的自定义资源定义(Custom Resource Definitions, 简称 CRD),并将所有状态存储在其中。因此,除了运行 Kubernetes 所需要的持久化数据存储之外,RancherVM 对存储不再有其他额外的要求。REST 服务器会提供端口,供这些 CRD 上的 CRUD 操作的执行。并且通过全新的 UI,REST 服务器已有了更好的用户体验。
调度
我们现在利用 Kubernetes 调度器,将 vm pod 智能化地放置在多个节点上。限制 CPU 和内存资源可以确保 vm pod 可以安全地调度到资源充足的主机上。根据节点的大小,单个主机可以实现 100+个 vm pods。调度虚拟机不需要额外的开销,而扩展性的限制应该是由 Kubernetes 本身决定的。在实践中,我们已经看到了 1000+个节点集群的案例。
网络
RancherVM 使用桥接网络为用户虚拟机提供连接。每一个虚拟机 pod 为了保留自己的网络身份,会将其分配到的 MAC 地址保存到它的虚拟机 CRD 中。IP 地址管理需要一个外部的 DHCP 服务器。当然如果 DHCP 的租约过期,vm pod 关闭了很长时间的话,它的 IP 地址可能会改变。
控制器会在每个节点上运行,将 MAC 地址解析成外部 DHCP 分配的 IP 地址。通常云供应商不会这么做,因为他们是通过实现 DHCP 服务器来执行自己的 IP 地址管理的(IPAM)。这样我们在桥接网络时就不需要控制 DHCP 服务器或者在虚拟机内部添加 instrument。
这种设计也存在着一些固有的扩展性限制——你桥接的网络必须具有足够的大小,能够向每个 VM 提供唯一的 IP 地址。
如何使用 RancherVM
RancherVM 需要一个运行中的 Kubernetes 集群,其中包含了运行基于 Debian 的操作系统和 KVM 的节点。
运行下面的命令可以将 RancherVM 组件部署到你的 Kubernetes 集群中。
GUI
部署完成后,你可以通过查询前端 Kubernetes 服务找到 UI 端点:
现在你可以导航到<node_ip>:30874 来访问 UI。
如果想要启动 SSH 远程访问,你还可以添加你的公钥。在 Credentials 界面上,单击 Create,添加你的公钥,起上一个好名字后,然后单击 OK。
创建实例也非常简单。在 Instances 界面上单机 Create。你会看到一个需要填写的表格。你需要添加自己的公钥或者启用 NoVNC 网络服务器。单击 OK 就可以了!
过一会你就可以看到虚拟机运行起来了,并且分配了 IP 地址。
现在你可以使用自己的私钥通过 SSH 连接到机器。用户名是依你所部属的操作系统而异的。比如 Ubuntu 用户的用户名是Ubuntu
,CentOS 用户是Centos
,Fedora 用户是Fedora
等等。
出于安全考虑,在默认情况下,基于密码的 SSH 连接是禁用的。如果你选择放弃将公钥添加到虚拟机规范中,你可以使用 NoVNC 来访问机器。单击 NoVNC 按钮打开浏览器内的控制台。如果是 Rancher 提供的镜像,那么用户名是rancher
,密码是rancher
。
Dashboard 提供了当前系统中 CRDs 的概要情况:
CLI
使用 kubectl 的用户,可以通过操作 CRD 从命令行来管理系统。这里有一些从命令行向系统添加凭证和虚拟机的示例:https://github.com/rancher/vm/tree/master/hack/example
并不是所有的修改都会立即生效,有时可能需要停止之后再启动虚拟机才能响应一些规范的更改,比如 CPU/内存分配的变更。
RancherVM 的下一步开发计划
在未来的几周内,RancherVM 将增加对实时迁移的支持。用户可能会遇到这样的情况,例如现有虚拟机的资源需求超过了物理主机上可用的资源上限,或者运维人员为了做一些维护工作而需要中断主机执行,在这些情况下,以一种对终端用户而言透明的方式将正在运行的虚拟机迁移到另一台主机上,是至关重要的。
我们也在考虑将 RancherVM 与像 Longhorn 这样的复制块存储系统进行集成。
RancherVM 完全开源,任何人都可以免费使用。未来 RancherVM 还会进一步发展。欢迎扫描下方二维码,加入 Rancher 官方技术交流群,与我们联系,提出您宝贵的问题或建议❤️
评论