当前位置: 首页 > news >正文

【K8s】Kubernetes 虚拟机管理工具之 KubeVirt

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【K8s】Helm Chart 方式部署 Sentry


目录

一、基本介绍

二、部署过程

1、获取最新版本

2、部署 KubeVirt Operator

3、部署 KubeVirt

4、查看状态

5、安装 Virtctl 客户端

6、虚拟机使用示例


一、基本介绍

KubeVirt 是一个用于在 Kubernetes 集群中管理、运行虚拟机的开源项目,旨在为 Kubernetes 上的虚拟化提供通用解决方案。

传统上,Kubernetes 擅长管理容器,而虚拟机则通常由其他工具(如 OpenStack)管理。KubeVirt 可以将容器和虚拟机作为统一的工作负载,在同一个平台上进行编排、部署和管理。

KubeVirt 的主要功能如下:

  • 统一的 API

    • KubeVirt 引入了新的自定义资源定义(CRD),如 VirtualMachine、VirtualMachineInstance、VirtualMachineInstanceReplicaSet 等,因此可以通过 YAML 方式定义和管理虚拟机

  • 生命周期管理

    • KubeVirt 会自动处理虚拟机的生命周期,包括其调度

  • 存储集成

    • KubeVirt 与 Kubernetes 的存储卷(PersistentVolume)无缝集成,可以使用现有的 CSI(Container Storage Interface)驱动为虚拟机分配存储,如 Ceph、NFS 或本地存储

  • 网络集成

    • KubeVirt 虚拟机可以使用 Kubernetes 的网络模型,并利用 CNI(Container Network Interface)插件来连接到集群网络,实现虚拟机与 Pod 在同一个网络中互相通信

  • 实时迁移

    • KubeVirt 支持虚拟机在集群节点之间的不停机迁移,这对于维护和升级集群节点非常重要,可以确保服务的高可用性

  • 高可用性

    • 借助 Kubernetes 的调度和自愈能力,KubeVirt 也能提供虚拟机的容错。如果一个节点上的虚拟机出现故障,Kubernetes 会自动将其重新调度到健康的节点上

KubeVirt 的架构设计利用了 Kubernetes 的可扩展性,将虚拟机管理功能作为附加组件集成进来。其核心组件及示意图如下:

  • virt-api

    • 是一个在 Kubernetes 集群中运行的 API Server 扩展,负责处理所有与 KubeVirt 相关的 API 请求(如创建 VirtualMachine 资源),并将它们写入 ETCD 数据库

  • virt-controller

    • 是一个 Kubernetes 控制器,负责监控 KubeVirt 的自定义资源,并根据这些资源的期望状态来管理实际的虚拟机状态

  • virt-handler

    • 是一个运行在每个 Kubernetes 节点上的 DaemonSet,负责管理其所在节点上的虚拟机,其角色类似于 kubelet

  • virt-launcher

    • 是一个特殊的 Pod,负责托管和运行虚拟机,每个虚拟机实例都对应一个 virt-launcher

    • virt-launcher 内部包含 QEMU 等虚拟机进程,并负责将虚拟机的计算、网络和存储资源映射到 Pod 的资源上

GitHub 地址:https://github.com/kubevirt/kubevirt

官方指南地址:https://kubevirt.io/user-guide/


二、部署过程
1、获取最新版本
export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | jq -r .tag_name)
echo $KUBEVIRT_VERSION

2、部署 KubeVirt Operator
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml# 输出如下
namespace/kubevirt created
customresourcedefinition.apiextensions.k8s.io/kubevirts.kubevirt.io created
priorityclass.scheduling.k8s.io/kubevirt-cluster-critical created
clusterrole.rbac.authorization.k8s.io/kubevirt.io:operator created
serviceaccount/kubevirt-operator created
role.rbac.authorization.k8s.io/kubevirt-operator created
rolebinding.rbac.authorization.k8s.io/kubevirt-operator-rolebinding created
clusterrole.rbac.authorization.k8s.io/kubevirt-operator created
clusterrolebinding.rbac.authorization.k8s.io/kubevirt-operator created
deployment.apps/virt-operator created

3、部署 KubeVirt
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml# 输出如下
kubevirt.kubevirt.io/kubevirt created

4、查看状态
# 查看组件状态
kubectl get po -n kubevirt# 输出如下
NAME                              READY   STATUS    RESTARTS   AGE
virt-api-dd4cc786-bct8l           1/1     Running   0          2m32s
virt-controller-b9bbc9458-2lrdp   1/1     Running   0          117s
virt-controller-b9bbc9458-j6pmn   1/1     Running   0          117s
virt-handler-5rghn                1/1     Running   0          117s
virt-operator-7b7bbf7c6f-g2q4c    1/1     Running   0          3m57s
virt-operator-7b7bbf7c6f-gh5t2    1/1     Running   0          3m57s======================================================================
# 查看服务状态
kubectl get kubevirt -n kubevirt# 输出如下
NAME       AGE     PHASE
kubevirt   7m25s   Deployed

5、安装 Virtctl 客户端
wget -O virtctl https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/virtctl-${KUBEVIRT_VERSION}-linux-amd6
chmod +x virtctl🔔 virtctl 用于与虚拟机进行交互(启动/停止/控制台等)

6、虚拟机使用示例

1)部署虚拟机

kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml# 输出如下
virtualmachine.kubevirt.io/testvm created

2)查看虚拟机列表

可以看到虚拟机处于停止状态

kubectl get vms# 输出如下
NAME     AGE   STATUS    READY
testvm   72s   Stopped   False

3)启动虚拟机

./virtctl start testvm# 输出如下
VM testvm was scheduled to start======================================================================
kubectl get vmis# 输出如下
NAME     AGE     PHASE     IP           NODENAME   READY
testvm   8m15s   Running   10.42.0.16   ubuntu     True

4)访问虚拟机

./virtctl console testvm

5)停止虚拟机

./virtctl stop testvm

6)删除虚拟机

kubectl delete vms testvm

http://www.dtcms.com/a/403167.html

相关文章:

  • 一命速通:Go 语言操作 Office Excel 文档,从入门到实战解析
  • 基于 C++ 的高雷诺数湍流直接数值模拟求解器设计与性能优化
  • SpringBoot 整合机器学习框架 Weka 实战操作详解
  • 做采购常用的几个网站连锁销售平台
  • 使用 Python 拆分与合并 Excel 文档:告别繁琐,拥抱自动化
  • JavaWeb--day9--SpringBootWeb案例(一)
  • 前端JavaScript中常见的异常类型
  • 网站建设报价多少钱门店推广是什么意思
  • 同时卖出认购期权和认沽期权怎么样?
  • Java入门基础完整指南
  • 济南营销网站制作公司哪家好网站建设杭州公司
  • 实验室:将 XSS 反映到 HTML 上下文中,大多数标记和属性都被阻止
  • 上海企业网站推广南昌网站建设700起
  • 第6.3节 iOS Agent开发<二>
  • 【Trie】 UVA1401 Remember the Word
  • 深度学习学习路线图:从MNIST到MobileNetV4,从理论到实践的完整指南
  • PyTorch 数据处理工具箱:从数据加载到可视化的完整指南
  • LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(4——通过jsoncpp库建立搜索模块)
  • LVS三种模式及原理
  • 有招聘网站策划的吗济南网站开发招聘
  • 【多线程】互斥锁(Mutex)是什么?
  • 18.1 Python+AI一键生成PPT!ChatPPT核心技术深度解析
  • 影响网站权重的因素有哪些wordpress 仪表盘 渗透
  • Nginx反向代理与缓存功能-第一章
  • 精读《C++20设计模式》——创造型设计模式:构建器系列
  • SpringCloud高可用集群搭建及负载均衡配置实战
  • AI产品独立开发完全指南:技术栈选择、案例分析与商业化路径
  • Jenkins+Tomcat持续集成教程
  • 哪里有免费建设网站承德在线
  • 【金融保研复习】知识点与可能的题目