写点什么

在 K8S 上使用 RancherVM,以容器的方式跑虚机

2020 年 4 月 15 日

在K8S上使用RancherVM,以容器的方式跑虚机

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 官方技术交流群,与我们联系,提出您宝贵的问题或建议❤️


2020 年 4 月 15 日 23:0397

评论

发布
暂无评论
发现更多内容

大数据应用场景

dongge

【Spring Boot系列】之多种依赖集成方式

TinyKing

深圳泰利能源有限公司涉嫌传销 共计2.7亿元

CECBC区块链专委会

区块链 基金

从 Node.js(JavaScript) 到 Golang,我的开发体验

Garfield

go node.js golang新手

数字货币交易平台源码,数字货币交易所开发核心功能

13530558032

关于显性知识和隐性知识

Tanmer

知识管理 知识产权

案例分享丨红外自动感应门设计与实现详解

华为云开发者社区

物联网 传感器 感应探测器 SMT32处理器 感应门

区块链支付新模式开发,USDT支付系统搭建

13530558032

kubernetes node affinity 写法

Geek_f24c45

Kubernetes

架构设计开学第一天

escray

学习 从零开始学架构 架构师预科班

Spring Bean处理器

TinyKing

Spring Framework

你问我答:现有的应用有必要做微服务改造吗?

博云技术社区

DevOps 微服务 容器云 云平台 博云

技术分享:即构互动白板音视频同步、多端有序协作技术实践

ZEGO即构

音视频 在线教育 SVG

华为云FusionInsight大数据技术普惠创新,释放千行百业数据价值

FI洞见

大数据 FusionInsight 华为云

凡泰极客与Rancher达成深度战略合作,加速企业构建私有化小程序生态

fino星君

十年Java开发传奇经历:我是如何从外包逆袭成为大厂架构师的

Java成神之路

Java 程序员 面试 微服务 多线程

数字资产钱包开发,数字加密货币app搭建

13530558032

2020-08-29-第十二周作业

路易斯李李李

FlinkX 如何读取和写入 Clickhouse?

Apache Flink

flink

3种双集群系统方案设计模式详解

华为云开发者社区

数据库 数据仓库 数据 双集群系统 双ETL模式

当有人把GoF的23个设计模式嚼碎给你——你才会发现有多简单

周老师

Java 编程 程序员 架构 面试

读懂k8s 容器编排控制器 Deployment

Garfield

k8s pod k8s入门

某程序员毕业进UC,被阿里收购!跳去优酷土豆,又被阿里收购!再跳去饿了么,还被阿里收购!难道阿里想收购的是他?

程序员生活志

职场 阿里

42图揭秘,「后端技术学些啥」

我是程序员小贱

XSKY对象存储获全球备份领域领导者Commvault官方认证

XSKY融合存储

融云Geek Online 2020 编程挑战赛重磅来袭

InfoQ_967a83c6d0d7

云算力挖矿平台APP,算力挖矿建设开发

13530558032

区块链助力军事人力资源配置

CECBC区块链专委会

区块链 军事

LeetCode题解:155. 最小栈,单个栈存储入栈元素与最小值之差,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

腾讯技术专家图解29种设计模式中常见问题类级与方法级解决方案

周老师

Java 编程 程序员 架构 面试

人的转型才是关键 数字化时代你具备数字领导力么

CECBC区块链专委会

区块链 数字化时代

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

在K8S上使用RancherVM,以容器的方式跑虚机-InfoQ