B站释义:【基于kubernetes实现虚拟化的解决方案-KSV】 https://www.bilibili.com/video/BV1m54y1P77i/
前言:
在不讨论容器与虚拟机的优缺点的情况下,每个虚拟机或都包含其完整操作系统的实例,并且可以像独立服务器一样运行。相比之下,在容器化环境中,多个容器共享一个操作系统实例,而且绝大多数都是类Linux操作系统。
虚拟机 (VM) 是计算机及其操作系统 它不绑定到特定的硬件。 VM 依靠虚拟化将单个物理计算机划分为多个虚拟计算机。 这种分离允许组织和基础架构提供商轻松创建和销毁虚拟机,而不会影响底层硬件。
并非所有应用程序服务都能在容器中良好运行,因此企业需要同时运行这两种服务。
例如,对于LDAP/Active Directory应用程序、标记化应用程序和具有密集GPU需求的应用程序,虚拟机比容器更好。您可能还有一个遗留应用程序,由于某些原因(没有源代码、许可证问题、使用小众语言等)无法实现现代化,因此必须在虚拟机中运行,也有可能需要在特定的操作系统(如Windows)运行。
无论应用需要虚拟机或容器的原因是什么,运行和管理多个环境都会增加操作的复杂性,需要单独的控制平面和可能单独的基础架构技术栈。如果您需要运行一个或一小组虚拟机,那么这似乎不是什么大事。但如果您有许多这样的应用呢?如果您需要跨不同的云环境运行这些应用程序的多个实例,该怎么办?您的运维操作可能会很快变得非常复杂。
如果可以将虚拟机作为Kubernetes环境的一部分来运行,那不是很好吗?
建议通读原文链接:https://baijiahao.baidu.com/s?id=1734866391278464887&wfr=spider&for=pc
Kubevirt优势
KubeVirt是一个Kubernetes插件,它为Kubernetes提供了在与容器相同的基础结构上提供、管理和控制虚拟机的能力。KubeVirt是由云原生计算基金会(CNCF)赞助的开源项目,目前正处于孵化阶段。
KubeVirt使Kubernetes能够使用与容器化工作负载相同的工具来调度、部署和管理虚拟机,从而消除了使用不同监视和管理工具的单独环境的必要性。为虚拟机和Kubernetes一起工作提供了可能。
KubeVirt的优势有哪些?
KubeVirt与Kubernetes现有的功能和工具(如监控、日志记录、警报和审计)集成,主要优势包括:
- 集中式管理:使用一组工具管理VM和容器。
- 没有虚拟层性能损失:无需为虚拟机创建硬件虚拟层。
- 可预测的性能:KubeVirt使用Kubernetes CPU管理器将vCPU和RAM对应到虚拟机上,以满足需要可预测延迟和性能的应用。
- 虚拟机CI/CD:使用和容器应用相同的CI/CD工具集成和交付虚拟机应用。
- 授权管理:KubeVirt提供了一组基于RBAC的集群身份规则,用于管理访问KubeVirt资源的用户授权。
对VM和容器的集中化管理,简化了基础架构技术栈,并提供了各种好处。例如,采用KubeVirt可以消除对虚拟机和容器的不同流程,从而减少DevOps团队的运维工作,加快日常运维操作。此外,当更多虚拟机迁移到Kubernetes时,可以明显感觉到软件和实用程序使用成本的下降,更不用说虚拟层性能损失了。从长远来看,通过利用Kubernetes打包和调度虚拟应用程序的能力,您可以减少基础架构的资源消耗。
Kubernetes和KubeVirt提供更敏捷的部署速度、更低的成本和更简便的管理。使用Kubernetes自动化VM的生命周期管理,有助于整合虚拟化和容器化两者类型应用的CI/CD流程。通过统一使用Kubernetes对所有应用进行自动化测试和部署,可以减少部署应用时出错的风险并实现更快的迭代速度。
建议阅读:https://www.kubernetes.org.cn/9596.html
Kubevirt架构
kubevirt是Red Hat开源的以容器方式运行虚拟机的项目,是基于kubernetes运行,利用k8s CRD为增加资源类型VirtualMachineInstance(VMI),使用CRD的方式是由于kubevirt对虚拟机的管理不局限于pod管理接口。通过CRD机制,kubevirt可以自定义额外的操作,来调整常规容器中不可用的行为。kubevirt可以使用容器的image registry去创建虚拟机并提供VM生命周期管理。
kubevirt以CRD的形式将VM管理接口接入到kubernetes中,通过一个pod去使用libvirtd管理VM的方式,实现pod与VM的一一对应,做到如同容器一般去管理虚拟机,并且做到与容器一样的资源管理、调度规划、这一层整体与企业IAAS关系不大,也方便企业的接入,统一纳管。
CRD介绍:https://www.jianshu.com/p/f68b04026e2a
-
K8S api-server
,HTTP API 服务器,是所有虚拟化相关流程的入口点。 -
virt-api
,:KubeVirt是以CRD形式去管理virt-launcher Pod。virt-api就是所有管理虚拟机操作的入口,它只接收指令,比如:CRD更新,删除,增加,以及对虚拟机的start,stop,delete,console等等。 -
virt-controller
,管理和监控 VMI 对象及其关联的 Pod,对其状态进行更新。- virt-controller会根据vmi CRD,生成对应的virt-launcher Pod,并且维护CRD的状态。与kubernetes api-server通讯监控VMI资源的创建删除等状态。
-
virt-handler
,以 DaemonSet 运行在每一个节点上,监听 VMI 的状态向上汇报,管理 VMI 的生命周期。- virt-handler会以deamonset形式部署在每一个节点上,负责监控节点上的每个虚拟机实例状态变化,一旦检测到状态的变化,会进行响应并且确保相应的操作能够达到所需(理想)的状态。virt-handler还会保持集群级别VMI Spec与相应libvirt域之间的同步;报告libvirt域状态和集群Spec的变化;调用以节点为中心的插件以满足VMI Spec定义的网络和存储要求。
-
virt-launcher
,以 Pod 方式运行,每个 VMI Object 都会对应一个 virt-launcher Pod,容器内有单独的 libvirtd,用于启动和管理虚拟机- 每个virt-launcher pod对应着一个VMI,kubelet只负责virt-launcher pod运行状态,不会去关心VMI创建情况。virt-handler会根据CRD参数配置去通知virt-launcher去使用本地的libvirtd实例来启动VMI,随着Pod的生命周期结束,virt-lanuncher也会去通知VMI去执行终止操作;其次在每个virt-launcher pod中还对应着一个libvirtd,virt-launcher通过libvirtd去管理VM的生命周期,这样做到去中心化,不再是以前的虚拟机那套做法,一个libvirtd去管理多个VM。
virtctl:virtctl是kubevirt自带类似kubectl的命令行工具,它是越过virt-launcher pod这一层去直接管理VM虚拟机,可以控制VM的start、stop、restart。
KSV概述
KSV 是基于 Kubernetes 云原生架构,从底层为用户屏蔽了复杂的基础设施架构和 Kubernetes 基础配置。您可以将 KSV 运行在私有云、公有云、虚拟机、物理机、边缘节点等各类开发或生产环境。在功能层面,KSV 主要包含物理节点、网络、存储、虚拟机、镜像、硬盘、安全组等组件。
KSV 底层原理
KSV 底层基于 K3S 、 Kubevirt 及rook ceph等技术,底层原理描述如下表所示:
产品计费
KSV 目前提供个人免费版、开发者版和企业版三种模式的虚拟化服务。个人免费版用于助力个人用户和微型团队,提供 3 个节点内的免费虚拟化服务。开发者版和企业版为中小型团队和大型企业用户提供更多节点数、更全面的虚拟化服务体验。
下表展示了 KSV 个人免费版、开发者版和企业版的服务能力差异对比。
版本 | 计费方式 | 资源定价 | 服务能力 |
---|---|---|---|
个人免费版 | License 模式 | 免费 | 最多 3 个节点最多 9 台虚拟机社区支持 |
开发者版 | License 模式 | 按需付费 | 多达 10 个节点多达 90 台虚拟机社区支持 |
企业版 | License 模式 | 按需付费 | 不限节点不限虚拟机1 年内软件免费升级社区支持5*8 工作时段技术支持 |
Centos7.9部署KSV流程
内核升级
内核的分类
kernel-ml 中的ml是英文【 mainline stable 】的缩写,elrepo-kernel中罗列出来的是最新的稳定主线版本。
kernel-lt 中的lt是英文【 long term support 】的缩写,elrepo-kernel中罗列出来的长期支持版本。
安装内核过程
1.导入仓库源
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
2.查看可安装的软件包
yum --enablerepo="elrepo-kernel" list --showduplicates | sort -r | grep kernel-ml.x86_64
3.选择 ML 或 LT 版本安装
无指定版本默认安装最新
#安装ML版本
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
#安装LT版
yum --enablerepo=elrepo-kernel install kernel-lt-devel kernel-lt -y
4.查看现有内核启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
5.修改默认启动项
xxx 为序号数字,以指定启动列表中第x项为启动项
grub2-set-default xxxx
6.重启
reboot
7.再次查看内核版本
uname -r
检查环境
1.检查操作系统版本:
cat /etc/issue
2.服务器节点的硬件配置必须满足以下条件:
硬件 | 最低配置 | 推荐配置 |
---|---|---|
CPU | 4 核 | 8 核 |
内存 | 8 GB | 16 GB |
系统磁盘 | 100 GB | 200 GB |
3.检查 CPU 核心数:
cat /proc/cpuinfo | grep "processor" | sort | uniq | wc -l
4.检查内存大小:
cat /proc/meminfo | grep MemTotal
5.检查可用磁盘大小:
df -hl
6.服务器节点必须至少具有 1 个未格式化且未分区的磁盘,或 1 个未格式化的分区。该磁盘或分区的最低配置为 100 GB,推荐配置为 200 GB。检查服务器节点磁盘分区:
lsblk -f
7.服务器节点需要支持虚拟化。如果服务器节点不支持虚拟化,KSV 将以模拟模式运行。该模式将占用更多资源,且虚拟机相关模块无法使用。
检查服务器节点是否支持虚拟化(若无回显则不支持虚拟化):
- x86 架构:
grep -E '(svm|vmx)' /proc/cpuinfo
- ARM64 架构
ls /dev/kv
部署步骤
-
时区同步
yum -y install ntp ntpdate ntpdate cn.pool.ntp.org sudo hwclock --systohc timedatectl set-timezone Asia/Shanghai timedatectl
-
以 root 用户登录服务器节点。
-
执行以下命令检查服务器节点的架构:
uname -m
-
根据服务器节点的架构类型下载安装包。
- x86 架构
curl -OL https://virtualization.kubesphere.cloud/v1.6.1/kubesphere-virtualization-x86_64-v1.6.1.tar.gz
- ARM64 架构
curl -OL https://virtualization.kubesphere.cloud/v1.5.0/kubesphere-virtualization-arm64-v1.5.0.tar.gz
4.执行以下命令解压安装包:
tar -zxvf kubesphere-virtualization-x86_64-v1.6.1.tar.gz
5.执行以下命令进入安装包解压后生成的目录:
cd kubesphere-virtualization-x86_64
6.执行以下命令开始安装:
./install.sh -a --ratio <overcommit ratio>
备注文章来源:https://www.toymoban.com/news/detail-677212.html
- –ratio 为可选参数,用于指定 KSV 集群的超卖比,即每个物理 CPU 可以虚拟化多少个虚拟 CPU。您可以根据业务需求将 设置为实际的超卖比数值,取值需为 1 至 10 的整数。如果未设置该参数,超卖比默认值为 2。
- 超卖比还将决定 KSV 可创建虚拟机的总数。可创建虚拟机的总数 = 集群 CPU 核心总数 x 超卖比。
- 只有安装 KSV 时可以设置超卖比,升级时不支持修改超卖比。
- 安装可能需要较长时间,请等待安装完成。
如果显示如下信息则安装成功:
#####################################################
### Welcome to KubeSphere Virtualization! ###
#####################################################
Console: http://10.18.4.10:30890
Username: admin
Password: P@88w0rd
NOTE:
Please change the default password of the admin user
after login.
#####################################################
https://kubesphere.cloud/ksv/ 2023-02-13 16:41:42
#####################################################
-
(可选)安装结束后,执行以下命令查看安装日志:
ksv logs
报错解决
1.error: Pipeline[K3sCreateClusterPipeline] execute failed: Module[GreetingsModule] exec failed:
不知到什么缘由的报错,但是修改个主机名就好了。
KSV登录
从安装成功回显中的 Console、Username 和 Password 参数分别获取 KSV Web 控制台的地址、系统管理员用户名和系统管理员密码。
备注
KSV 默认提供以下用户:文章来源地址https://www.toymoban.com/news/detail-677212.html
- 系统管理员:用户名 admin,密码 P@88w0rd
到了这里,关于基于kubernetes实现虚拟化的解决方案-KSV的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!