基于kubernetes实现虚拟化的解决方案-KSV

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生命周期管理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2QQObfZD-1676850627802)(image/architecture.png)]

​ 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 主要包含物理节点、网络、存储、虚拟机、镜像、硬盘、安全组等组件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwFZJ0nW-1676850627803)(image/architecture@9648f00e9cd241c09f89a2ffc92d7bfa@.png)]

​ 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.服务器节点的硬件配置必须满足以下条件:

硬件最低配置推荐配置
CPU4 核8 核
内存8 GB16 GB
系统磁盘100 GB200 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

部署步骤

  1. 时区同步

    yum -y install ntp ntpdate
    ntpdate cn.pool.ntp.org
    sudo hwclock --systohc
    timedatectl set-timezone Asia/Shanghai
    timedatectl
    
  2. root 用户登录服务器节点。

  3. 执行以下命令检查服务器节点的架构:

    uname -m
    
  4. 根据服务器节点的架构类型下载安装包。

    • 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>

备注

  • –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:

​ 不知到什么缘由的报错,但是修改个主机名就好了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SQhoDTzV-1676850627805)(image/image-20230219225018971.png)]

KSV登录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2REcTMms-1676850821530)(image/image-20230202100616741.png)]

从安装成功回显中的 ConsoleUsernamePassword 参数分别获取 KSV Web 控制台的地址、系统管理员用户名和系统管理员密码。

备注

KSV 默认提供以下用户:

  • 系统管理员:用户名 admin,密码 P@88w0rd
    在这里插入图片描述
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值