作者:林苍
背景
容器无疑曾经成为新的云计算基础设施,企业公有云平台的建设重心,正在从虚拟化的计算、存储、网络的建设,转向构建以容器、微服务等为外围的云原生平台。不过值得注意的是,企业 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-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 就不一一介绍。
虚拟机固定 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 等集中式存储中,以供创立虚拟机。
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 产品官网
https://www.aliyun.com/activity/middleware/cnstack
CNCF OCM
https://open-cluster-management.io/
CNCF KubeVirt
https://kubevirt.io/
open-local
https://github.com/alibaba/open-local
hybridnet
https://github.com/alibaba/hybridnet
相干链接
[1] containerized-data-importer (CDI)
https://github.com/kubevirt/containerized-data-importer
[2] 官网文档
https://kubevirt.io/user-guide/architecture/#additional-services
[3] VirtualMachine
http://kubevirt.io/api-reference/main/definitions.html#_v1_vi…
[4] Domain
http://kubevirt.io/api-reference/main/definitions.html#_v1_do…
[5] Libvirt
https://libvirt.org/
[6] QEMU
https://www.qemu.org/
[7] Network Binding Mode
https://kubevirt.io/user-guide/virtual_machines/interfaces_an…
[8] Golden Image
https://opensource.com/article/19/7/what-golden-image
[9] Tekton CICD
https://tekton.dev/
[10] kickstart
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/performing_an_advanced_rhel_8_installation/performing_an_automated_installation_using_kickstart
[11] Sysprep
https://learn.microsoft.com/en-us/windows-hardware/manufactur…