kubernetes 上部署 kubevirt 运行虚拟机

kubevirt 功能

架构

在这里插入图片描述

1.kubernetes api 新增了 CRD 自定义资源类型用于 VMI 专用
2.kubernetes api 会把 CRD 的类型转交额外的控制器进行管理 (virt-controller)
3 node 节点会有由额外的守护进行关联 CRD (virt-handler)
4.virt-controller 负责对 NODE 节点中调度 VMI
5 virt-handler 结合 kubelet 负责启动, 配置 VMI,
6. 支持 stateful VMI, 支持 replicaset VMI
7. kubevirt 部署在 kubenetes 集群中,创建 VMI 是类似以往创建 POD 模式 并由 kubevirt 管理 VMI
8. 安装,使用 kubevirt 不需要额外为用户添加任何权限,只需要默认授权即可
9 假如需要对 VMI 添加内部,外部网络,建议使用 multus cni 对其进行支持

multus

multus github 官方文档
在这里插入图片描述

描述

1 上图只有一个 POD,但具备三个网卡, eth0, net0, 及 eth1, net0 都是用于连接到 kubernetes 服务
2 net0, net1 是一个额外的网络,可以支持 (vlan/vxlan/ptp) 网络
3. 理解是对于 kubetnetes 看来,依旧每个 POD 只有一个网卡
4. 但对于 pod 内部来说,使用的是 net0, net1 两个网卡进行工作就是具备了两个网卡

参考安装文档

VMI

一个 vmi 运行在一个 pod 里面
通俗说,这个运行了 vmi 的 POD 跟其他 k8s 常见的 pod 没有区别,就是里面跑了 qmeu 进程
一个执行 vmi 的 pod 里面,会跑了下面三个常见进程
/usr/bin/virt-launcher-monitor
/usr/bin/virt-launcher --> 管理了下面的子进程(libvirtd | virtlogd|virt-launcher)
/usr/libexec/qemu-kvm

pod

pod 中执行了 上面 virt + qemu 命令,启动了 vm 进程
pod 与 vmi 是一对一关系,通常一个 pod 只有一个 vmi
pod 具有 API特性
可以控制 VMI 启动,关闭,重启
可以离线修改 vmi 配置 (libvirt.xml)
保证了 vmi 运行状态

相关总结描述

在 kubernetes 集群下运行
kuebevirt 只是 kubernetes 中的一个插件, 用于支持 VM 运行
可以在 kubernetes 下使用传统 pod, pvc 等各种资源

无法使用 windows pod
pod 一般以无状态方式运行, pod 销毁, 所有数据无法保存
需要使用 PV, PVC 方式保存永久性数据

可以在 kubernetes 下运行 vm, 以虚拟机方法运行 (以下简称 VMI)

可以运行 WINDOWS VM, Linux 也可以
同样支持 pv, pvc 作为额外的磁盘设备使用
可以保存 Linux, windows 下所有修改的数据 (即启动盘, 数据盘都可以永久性保存数据)
建议使用 selector, 在固定的 NODE 下启动固定的 VMI 虚拟机

VMI 状态

stopped
provistioning
starting
running
paused
migrationg
terminationg
unknown

已知缺点或需要注意地方

VMI 启动盘 (C:) 独享限制

VMI 启动盘, 数据盘, 只支持 RAW 格式, 不支持 QCOW2
即, 每个 VMI 使用中的磁盘都需要独享模式, 不支持共享模式, 不支持镜像模式
EX: 启动一个 WINDOWS VMI, 启动盘(C:) 设定为 60GB, 启动前需要预先准备( copy ) 该 60GB 数据文件
上述问题会导致部署时严重应该改 NODE 的 IO 抢夺

无法实现 io QOS 限制

假如在某个 NODE 中同时部署了多个 VMI
由于当前 DOCKER 还没有比较好的 IO QOS 限制功能
导致其中一个 VMI 在抢夺 IO 时候, 会导致该 NODE 中的所有 VMI IO 资源造成锁

无法实现磁盘扩容

在创建了磁盘后, 无法实现对该磁盘设备进行扩容(测试失败)

windows VMI 重启(进程) 后无法获取 IP 地址

官方指导, 物理重启 VMI 方法为 delete pod, create pod
由于 kurbernetes 默认使用了 dhcp 方法分配 IP
默认下, dhcp release 时间太长了
导致重启该 VMI 下,默认情况下 windows 会根据之前 IP 地址请求沿用 IP 地址
假设该 IP 地址没在使用中, 那么 windows 会继续使用之前的 IP 地址
那么 windows 使用的 IP 地址与 kubernetes 记录的 IP 地址不一致
除非 windows 在关机时候执行 ipconfig /release 操作

VMI 启动磁盘残余问题

关闭对应 VMI 方法为 kubernetes delete -f xxxx.yaml
pod 进程已关闭, 但之前 VMI 使用中的启动盘数据 (C: 60GB FILE) 依旧存在在对应 node 中
需要额外方法维护改文件删除问题

参考文档

kubevirt github 地址
kubevirt 官方网页

kubevirt 工作原理

在这里插入图片描述

一个正常运行的 kubernetes 集群
启动了 kuebevirt pod (linux 系统)该 pod 调用了 /usr/bin/virt-launcher 进程, 用于启动 VMI
VMI 是运行在 kubernetes pod 下的一个进程

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
虚拟机上安装和部署 Kubernetes 可以按照以下步骤进行: 1. 准备虚拟机环境:请确保你已经准备好具备足够资源的虚拟机,比如内存、CPU 和存储空间。虚拟机可以是基于 Linux 的操作系统,比如 Ubuntu、CentOS 或者其他 Linux 发行版。 2. 安装 Docker:Kubernetes 使用容器技术来运行应用程序,所以需要先安装 Docker。可以根据虚拟机的操作系统选择适合的 Docker 安装方式,并按照官方文档进行安装。 3. 安装 kubeadm、kubelet 和 kubectl:kubeadm 是 Kubernetes 的安装工具,kubelet 是 Kubernetes 的组件之一,而 kubectl 则是 Kubernetes 的命令行工具。可以通过以下命令在虚拟机上安装它们: ``` # 安装 kubeadm、kubelet 和 kubectl sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl ``` 4. 初始化 Kubernetes 控制平面:在虚拟机运行以下命令来初始化 Kubernetes 控制平面: ``` sudo kubeadm init ``` 初始化完成后,会显示一些配置信息和加入集群的命令。请记录这些信息,后续会用到。 5. 配置 kubectl:在虚拟机上设置 kubectl 的配置文件,使其能够与 Kubernetes 集群通信。运行以下命令来创建和配置 kubectl: ``` mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 6. 安装网络插件:Kubernetes 需要网络插件来实现 Pod 之间的通信。常用的网络插件有 Calico、Flannel、Weave 等。可以根据自己的需求选择一个网络插件,并按照其官方文档进行安装和配置。 7. 加入其他节点:如果你有多个虚拟机,并希望将它们加入 Kubernetes 集群,可以使用之前初始化时显示的加入集群的命令来加入其他节点。 以上是在虚拟机上安装和部署 Kubernetes 的简要步骤,具体细节和配置可能会因环境和需求而有所不同。建议在安装前参考官方文档和相关教程,并根据具体情况进行操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Terry_Tsang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值