作者:林苍

布景

容器无疑现已成为新的云核算根底设施,企业私有云渠道的建造重心,正在从虚拟化的核算、存储、网络的建造,转向构建以容器、微服务等为中心的云原生渠道。不过值得注意的是,企业 IT 体系在进行容器化改造的过程中,由于前史遗留体系、技能债款、内核依赖等原因,根据虚拟机的运用在未来依然会广泛存在。企业的 IT 根底设施正在从单一的虚拟化架构逐渐走向虚拟机+容器的混合架构,Gartner 预测到 2026 年将会有 75% 的私有化环境需求混合布置虚拟机和容器负载。

CNStack 虚拟化服务(cnstack-virtualization)根据以 CNCF KubeVirt 为代表的云原生虚拟化技能,用一套操控平面一起办理容器和虚拟机,完成容器与虚拟机的资源共池办理、灵敏分配、一致调度。企业可将难以容器化的虚拟机运用无缝迁移到 CNStack 渠道上,逐渐完成 IT 体系的云原生化。

CNStack 虚拟化云服务

在 CNStack 2.0 中,虚拟化服务以独立云服务的形状进行布置,即能复用 CNStack 渠道与多集群服务供应的多租资源办理、一致网关、集群办理、多集群资源分发等根底才能,又能不失灵敏性地独立演进与发布。

CNStack 虚拟化服务在当时版别供应了如下才能,并会逐渐在后续版别上线更多才能(如虚拟机灾备、虚拟机热迁移、虚拟机迁移东西等):

  • 完好的虚拟机生命周期办理才能:支撑开关机、重启、暂停、快照等操作。
  • 虚拟机自运维才能
    • 在浏览器经过 VNC、串口带外办理协议运维虚拟机。
    • 快照与康复:经过快照保存虚拟机磁盘在某一时刻的状态,数据丢掉或反常时可快速康复。
    • 监控与告警:供应虚拟机 CPU、内存、磁盘 I/O、网络吞吐等要害运转指标的监控与告警。
  • 办理虚拟机镜像
    • 上传镜像,并依照租户操控资源的可见规模。
    • 根据快照制作虚拟机镜像。
  • ARM 多架构、IPv6、虚拟机固定 IP、边缘虚拟机自治、虚拟机快照克隆等特性
  • 虚拟机运用办理:CNStack 运用办理服务供应了对虚拟机运用的纳管功用,支撑对虚拟机内运用的一站式保管以及服务治理、才能敞开、运用监控、运用告警和运用防护等才能。

整体架构简介

CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理

  • cnstack-virt-console

根据阿里云自研的 ALFA 微前端计划,cnstack-virt-console 以微前端运用的形式被 CNStack Console 前端页面插件化集成。即可以确保终端用户在交互体会上的一致,也可满意虚拟化服务前端运用自在演进、独立布置分发的灵敏性。

  • cnstack-virt-api

供应虚拟化云服务的管控 API,将 VirtualMachine、DataVolume、VMImage 等自定义资源的读写操作以 RESTful 接口的形式进行封装。与其他的管控 API 相同,由 CNStack IAM Gateway 组件一致供使用户认证、鉴权、API 审计等根底才能,向集群外供应服务。值得一提的是,cnstack-virt-api 根据 CNStack 多集群服务的 cluster-gateway 组件,完成了跨集群的资源分发。

  • KubeVirt

CNCF KubeVirt 拓宽了办理运转虚拟机的 CRD,使得虚拟机资源可被视为 Kubernetes 集群的“一等公民”。KubeVirt 根据容器来办理运转 QEMU 虚拟机,供应了不同于容器的虚拟机生命周期办理接口,经过与标准的 CNI 容器网络插件和 CSI 容器存储插件对接,使得虚拟机可复用 Kubernetes 集群内的网络与存储资源。在 KubeVirt 社区版别的根底上,我们还为其拓宽支撑了 IPv6、GuestOS 监控、虚拟机固定IP、边缘虚拟机自治、虚拟机快照克隆等特性。

  • CDI

**containerized-data-importer (CDI) [ 1] **是 KubeVirt 社区下的一个子项目,拓宽了办理虚拟机磁盘的 CRD,担任出产含有虚拟机磁盘数据的 PersistentVolume 供 KubeVirt 虚拟机消费,并可支撑从 VMWare、oVirt 等外部虚拟化渠道导入磁盘数据。

  • vmimage-controller

拓宽了办理虚拟机镜像的 CRD。除了供应装备虚拟机所需求的 OS 元数据以外,还担任将镜像数据导入到集群,将集群内的虚拟机磁盘导出为镜像,并支撑 ISO、QCOW2 等多种镜像格局,支撑 OSS、HTTP、容器镜像等多种数据源。

CNStack 云原生虚拟化

相较于 OpenStack、VMWare vSphere 等传统的虚拟化渠道来说,根据 KubeVirt 等云原生软件构建的 CNStack 云原生虚拟化渠道有以下特色:

  • 敞开性

传统的虚拟化渠道内往往集成了厂商供应的一整套网络、存储软件。而 Kubernetes 则根据 CSI、CNI 等标准供应了渠道无关的资源抽象,根据 Kubernetes 构建的虚拟化渠道可依照该标准自在对接各种类型的网络与存储资源,对客户来说避免了厂商确定(vendor lock-in)的忧虑。

  • 云原生的技能盈利

毫无疑问云原生现已成为干流的技能领域,蓬勃发展的社区内囊括了监控、日志、安全、运用办理等丰厚的软件生态。根据 Kubernetes 构建的虚拟化渠道,一致的操控面与数据面使得虚拟机运用可以更快捷地享用云原生的技能盈利。

KubeVirt 架构简介

下文着重介绍 KubeVirt 是如何根据 Kubernetes 处理网络、存储资源的虚拟化,以及虚拟机与容器是如何共享网络与存储资源,更多具体的 KubeVirt 架构介绍可见其**官方文档 [ 2] **。

虚拟化技能的本质是对硬件设备的模仿,KubeVirt 供应了 **VirtualMachine [ 3] **CR 来描绘虚拟机,VirtualMachine CR 的中心是经过 **Domain [ 4] **类型来描绘运转虚拟机所需的设备资源(熟悉 **Libvirt [5 ] **的读者会发现这简直就对应于 Libvirt Domain 的概念),终究经过 Libvirt 交由 **QEMU [ 6] **模仿出虚拟机的硬件设备,也支撑经过 Device Plugin 运用直通的宿主机 PCI 设备以降低设备模仿的开支。

KubeVirt 首要组件包含操控面的 virt-api 与 virt-controller,以 daemonset 布置的 virt-handler 担任办理装备节点上的虚拟机,以及实际运转 QEMU 虚拟机进程的 virt-launcher Pod,virt-launcher 承当了虚拟机存储网络与容器存储网络之间的桥梁。

虚拟机存储

虚拟机的磁盘数据存储在 virt-launcher Pod 挂载的 volume 中,volume 就交由各种 CSI 容器存储插件进行供应。KubeVirt 支撑文件与块设备两种数据格局来存储磁盘数据:

  • 文件:对应于 FileSystem VolumeMode 的 PV,PV 内只要一个磁盘镜像文件,QEMU 经过这种特别格局的文件来模仿物理磁盘。
  • 块设备:对应于 Block VolumeMode 的 PV,QEMU 直接经过块设备接口读取磁盘数据。由于 by-pass 了 PV 上的文件体系,具有更好的功用。

针对实际交付需求,CNStack 虚拟化服务支撑本地与分布式存储两种场景:

  • 本地存储:根据阿里巴巴开源的 open-local 容器存储插件,主动化节点本地磁盘的分配与调度,使得虚拟机可以灵敏、低成本地运用本地存储资源。
  • 分布式存储:根据阿里巴巴自研的 vCNS 云原生分布式存储软件,将 NVMe、SSD、HDD 等不同功用的磁盘进行分层地存储池化办理,为虚拟机供应了高功用、牢靠的耐久存储。

虚拟机网络

CNI 容器网络插件在容器的 network namespace 中创立 veth 网络设备(pod-nic)以供容器内进程运用,KubeVirt 供应了多种方法(**Network Binding Mode [7 ] **)衔接 pod-nic 与 QEMU 虚拟机内的网络设备(VM-nic),Pod 之间的网络通信链路仍是由 CNI 容器网络插件来办理。

  • bridge:pod-nic 与 VM-nic 直接经过 layer-2 bridge 衔接,VM-nic 经过 DHCP 协议直接获取到 pod-nic 的 layer-3 IP,Pod 充当了交换机的角色。
  • masquerade:VM-nic 获取到的是本地 IP(只在 Pod 有用,一般固定为 10.0.1.2),VM-nic 发出/收到的流量都被 Pod 内的 iptables/nftables 规矩 NAT 为 Pod IP 进行传输,Pod 充当了路由器的角色。
  • sriov, slirp, passt 等其他 KubeVirt Network Binding 就不逐个介绍。

CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理

虚拟机固定 IP

KubeVirt 很大程度复用了容器网络来建立虚拟机网络链路,这种架构确保了虚拟机和容器网络(包含 Service、Ingress、NetworkPolicy 等)之间的无缝衔接。但这也对虚拟机用户带来了一些运用体会上的差异,Pod IP 在重建前后往往会变化,但虚拟机用户却习惯于运用固定 IP 的虚拟机。CNStack 虚拟化服务根据由阿里巴巴开源的 hybridnet 容器网络插件,支撑了虚拟机固定 IP 的才能,可以确保虚拟机所处 Pod 在重建后的 IP 与 Mac 地址确保不变。

虚拟机镜像(Golden Image)

关于个人电脑用户来说,信任一定不会陌生如何经过 ISO 光盘或者 U 盘来装置操作体系。虚拟机内操作体系(GuestOS)的装置则不太相同,各操作体系发行版一般会供应了两种格局:

  • ISO 光盘文件:最为常见,需求用户手动装置操作体系,或许还需求用户手动装置驱动,装备内核启动参数,装置 Cloud-init、GuestAgent、kdump 等 GuestOS 运维软件。
  • Golden Image:只要少部分发行版供应,免装置,开机即可运用,现已预先装备好了运维 GuestOS 所需各类软件,创立自 Golden Image 镜像的虚拟机也会具有更好的运维体会。例如 Ubuntu Cloud Image、阿里云官方供应的 ECS 镜像等。

由于大多数虚拟机用户缺少构建 **Golden Image [ 8] **的布景知识,一般只能供应 ISO 光盘文件(或者直接从发行版的官网下载)。我们根据 KubeVirt 与 **Tekton CICD [ 9] **建立了虚拟机镜像构建流水线(VMImage Pipeline),根据 ISO 光盘文件,主动构建出 Golden Image 并上传到 OSS 等集中式存储中,以供创立虚拟机。

CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理

VMImage Pipeline

上述 VMImage Pipeline 对应于一个 Tekton Pipeline,由若干 Tekton Task 组成。以构建 CentOS 的 Golden Image 为例,流程如下:

  • Install OS

CentOS、Fedora 等 Linux 发行版支撑经过 **kickstart [ 10] **主动化装置操作体系,ISO 内的装置程序启动后假如检测到 kickstart 装备文件,则会依照其装备主动履行装置程序。Windows 操作体系也支撑经过 **Sysprep [ 11] **完成相似的主动装置功用。值得一提的是,为了之后能经过 SSH 协议衔接装备虚拟机,需求导入暂时的用户信息。

  • Config OS

根据上一步装置结束的体系盘 PVC 创立虚拟机,并启动暂时 Pod 经过 SSH 协议衔接到虚拟机,履行 bootstrap 脚本,装备 kernel 启动参数,装置 Cloud-init、QEMUGuestAgent 等软件。

  • Reset TempConfig

到这一步时,体系盘现已装备结束了,但是之前虚拟机运转时在体系盘内残留了网卡的 mac 地址、ssh 衔接记载等敏感信息,我们经过 virt-sysprep 东西抹去体系内的暂时装备,生成一个干净的镜像文件。

  • Upload Image

将 PVC 内的磁盘文件上传到 OSS 等集中式存储中,之后毁掉该 PVC。后续创立虚拟机时,可经过 CDI DataVolume HTTP Source 重新下载磁盘文件到新建虚拟机的 PVC 中。

CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理

展望

关于企业来说,布置办理虚拟机仅仅第一步,如何运维办理虚拟机内的运用还需求不少工作,针关于虚拟机运用的传统运维东西很难适配云原生的软件生态。CNStack 虚拟化服务后续除了会继续丰厚虚拟机的运维才能之外,还希望能够为虚拟机内运用供应与容器运用相同的运维办理体会。

参考资料:

CNStack 产品官网

www.aliyun.com/activity/mi…

CNCF OCM

open-cluster-management.io/

CNCF KubeVirt

kubevirt.io/

open-local

github.com/alibaba/ope…

hybridnet

github.com/alibaba/hyb…

相关链接

[1]containerized-data-importer (CDI)

github.com/kubevirt/co…

[2]官方文档

kubevirt.io/user-guide/…

[3] VirtualMachine

kubevirt.io/api-referen…

[4] Domain

kubevirt.io/api-referen…

[5] Libvirt

libvirt.org/

[6]QEMU

www.qemu.org/

[7]Network Binding Mode

kubevirt.io/user-guide/…

[8] Golden Image

opensource.com/article/19/…

[9] Tekton CICD

tekton.dev/

[10] kickstart

access.redhat.com/documentati…

[11]Sysprep

learn.microsoft.com/en-us/windo…