Kubernetes Kubevirt应用

本文详细介绍了Kubevirt在Kubernetes中的应用,包括Kubevirt组件、部署步骤、镜像来源、SSH密钥注入、热迁移和快照,以及网络配置等关键知识点。读者将了解到如何在Kubernetes环境中使用Kubevirt创建和管理虚拟机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、前言

1.1 Kubevirt概述

Kubevirt是k8s中的虚拟机管理插件,目的是为了满足企业从虚拟化转型到用kubernetes来管理一切虚拟化运行时,包含裸金属、VM、容器等。

1.2 Kubevirt如何应用在Kubernetes中

Kubevirt是通过Kubernetes的自定义资源来定义api资源来扩展的。主要添加了额外的虚拟化资源类型,比如VM类型的api资源。然后可以通过kubectl工具去管理这些api资源。本身扩展这些资源需要运行额外的控制器和代理,这些控制器和代理都是由Kubevrit来提供

1.3 Kubevrit组件介绍

kubevrit存在多个组件,每个组件负责的功能都不相同,不同点是资源调度策略都是由k8s去管理,其中,主要包含的组件有:

  • virt-api
    作为kubevirt的主要入口点,与k8s api-server进行交互验证并完成vmi、vm等资源类型的创建
  • virt-controller
    主要用于管理集群中VM的生命周期
  • virt-handler
    守护程序,运行在每一个节点,主要负责监视VM的状态,与virt-launcher进行通信,用于管理virt-launcher容器内qemu进程的命周期管理
  • virt-launcher
    每一个运行的VM都运行一个该组件,主要在VM的pod中管理qemu进程的生命周期

二、Kubervirt部署

2.1 kubernetes环境

在这里插入图片描述

2.2 前期准备工作

检测节点是否支持虚拟化功能
[root@master ~]# yum -y install qemu-kvm libvirt virt-install bridge-utils

支持虚拟化会是如下显示
在这里插入图片描述

2.3 安装Kubevirt

官方网址:https://kubevirt.io/
项目地址:https://github.com/kubevirt/kubevirt
使用以下命令进行部署操作

[root@master ~]# export RELEASE=v0.50.0
[root@master ~]# kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
[root@master ~]# kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml

查看各组件状态是否正常

[root@master ~]# kubectl get pods -n kubevirt 
NAME                              READY   STATUS    RESTARTS   AGE
virt-api-866b4ffbb-dd9vc          1/1     Running   0          7m13s
virt-api-866b4ffbb-mdtnr          1/1     Running   0          7m13s
virt-controller-75fbb798c-dkprg   1/1     Running   0          6m18s
virt-controller-75fbb798c-m29cx   1/1     Running   0          6m18s
virt-handler-zk57m                1/1     Running   0          6m18s
virt-operator-5c9bccf876-mcb69    1/1     Running   0          8m51s
virt-operator-5c9bccf876-x5q6c    1/1     Running   0          8m51s

2.4 virtctl客户端工具安装

方法一
[root@master ~]# export VERSION=v0.50.0
[root@master ~]# wget https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64
[root@master ~]# cp virtctl-v0.50.0-linux-amd64  /usr/local/bin/virtctl 
[root@master ~]# chmod a+x /usr/local/bin/virtctl 
[root@master ~]# virtctl version 
Client Version: version.Info{
   GitVersion:"v0.50.0", GitCommit:"7e034450c10ad2a879db960b9912be2dff7ed9ce", GitTreeState:"clean", BuildDate:"2022-02-10T13:39:37Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{
   GitVersion:"v0.50.0", GitCommit:"7e034450c10ad2a879db960b9912be2dff7ed9ce", GitTreeState:"clean", BuildDate:"2022-02-10T13:39:37Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
方法二

使用kubenetes的插件管理工具krew
Krew项目地址
https://github.com/kubernetes-sigs/krew/
安装参考文档
https://krew.sigs.k8s.io/docs/user-guide/setup/install/
安装方法如下:

自行去官网下载对应的源码包
[root@master ~]# tar -xf krew-linux_amd64.tar.gz
[root@master ~]# ./krew-linux_amd64 install krew
export PATH="${PATH}:${HOME}/.krew/bin"
[root@master ~]# kubectl krew install virt 安装插件

2.5 启动虚拟机实例测试

VirtualMachine:类似与k8s里面的deployment这些
VirtualMachineInstance:类型与k8s里面的pod

例子如下:

[root@master]# vm.yaml 
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: testvm
  labels:
    app: vm
spec:
  running: false  #设置状态
  template: 
    metadata:
      name: testvm
      labels:
        app: vm
    spec:
      domain: 
        devices:
          disks:
          - name: containerdisk  #这里定义一个用于启动虚拟机的镜像启动盘
            disk:
              bus: virtio
          - name: emptydisk  #这里定义一个空盘,用于存储其他数据用
            disk:
              bus: virtio
        resources:  #内存和cpu请求
          requests:
            memory: 512M
            cpu: 1
      volumes: #定义虚拟磁盘的来源以及类型
      - name: containerdisk #这里名称需要和device下的一致
        containerDisk: #指定一个包含qcow2,raw,img的dockers镜像,一般从网络上进行拉取
          image: kubevirt/cirros-registry-disk-demo
      - name: emptydisk 
        emptyDisk:  #定义空卷,并设置大小
          capacity: 1Gi

注意事项:
1.running和runStrategy(启动策略)两个不可以同时存在
2.devices下都是定义磁盘,一般第一个定义为启动盘,定义启动盘分为很多种的类型,根据自己需求来设置。
3.resources 是定义内存和cpu的
4.volumes下都是定义卷的类型这些,和device下的磁盘进行关联


启动测试
[root@master ~]# kubectl apply -f vm.yaml 
[root@master ~]# kubectl get vm  
NAME     AGE    STATUS    READY
testvm   8m6s   Stopped   False
启动虚拟机实例
[root@master ~]# virtctl start testvm
VM testvm was scheduled to start
查看运行的pod以及虚拟机实例状态
[root@master ~]# kubectl get vmi,pods
NAME                                        AGE   PHASE     IP              NODENAME   READY
virtualmachineinstance.kubevirt.io/testvm   41s   Running   10.244.219.95   master     True

NAME                             READY   STATUS    RESTARTS   AGE
pod/virt-launcher-testvm-nrkfh   2/2     Running   0          41s

通过virtctl的方式进入虚拟机
[root@master ~]# virtctl console testvm
退出虚拟机按ctrl + ]

通过ssh的方式进入虚拟机
[root@master ~]# ssh cirros@10.244.219.95
输入用户名和密码即可进入
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc pfifo_fast qlen 1000
    link/ether 66:17:22:4e:7f:c4 brd ff:ff:ff:ff:ff:ff
    inet 10.244.219.95/32 brd 10.255.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::6417:22ff:fe4e:7fc4/64 scope link 
       valid_lft forever preferred_lft forever


进入pod查看服务运行情况
[root@master ~]# kubectl exec -it virt-launcher-testvm-nrkfh /bin/bash
bash-<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ball-4444

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

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

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

打赏作者

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

抵扣说明:

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

余额充值