[没接触过kubevirt?]15分钟快速入门kubevirt

简介: 什么是kubevirt? kubevirt是一个容器方式运行虚拟机的项目。`kubevirt`是附加`kubernetes`集群上的,它是通过 `CustomResourceDefinition(CRD)`部署到`Kubernetes API`变成资源对象。使用方式类似创建`deploy、pod`......这些资源清单。

本文介绍

本文有两个版本,详细版、简洁版

前者适合新手,后者适合老手方便大家查找,从而过滤掉某些步骤,节约时间成本 所以大家按需查看哟。

简洁版:包含所有步骤,以及命令的执行过程(适合新手)

简洁版:只包含命令(适合有一定熟练度的人)

前言

  • 什么是kubevirt?

    kubevirt是一个容器方式运行虚拟机的项目。kubevirt是附加kubernetes集群上的,它是通过 CustomResourceDefinition(CRD)部署到Kubernetes API变成资源对象。使用方式类似创建deploy、pod......这些资源清单。

环境准备

  • 环境保证网络出外网
系统 服务
centos7 kubernetes集群

官网地址:https://kubevirt.io/

详细版

搭建步骤

安装KubeVirt

[root@master ~]# export RELEASE=v0.35.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-64999f7bf5-fblkh          1/1     Running   0          5m24s
virt-api-64999f7bf5-l8wzr          1/1     Running   0          5m24s
virt-controller-8696ccdf44-k9qpv   1/1     Running   0          4m52s
virt-controller-8696ccdf44-tpxwp   1/1     Running   0          4m52s
virt-handler-kl8tl                 1/1     Running   0          4m52s
virt-operator-78fbcdfdf4-468h4     1/1     Running   0          8m4s
virt-operator-78fbcdfdf4-nvvxx     1/1     Running   0          8m4s

所以服务启动后,执行下面这条命令

[root@master ~]# kubectl -n kubevirt wait kv kubevirt --for condition=Available
kubevirt.kubevirt.io/kubevirt condition met

安装virtctl客户端工具

[root@master ~]# export VERSION=v0.41.0
[root@master ~]# wget https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64
[root@master kubevirt]# cp virtctl-v0.41.0-linux-amd64 /usr/local/bin/virtctl
[root@master kubevirt]# chmod +x /usr/local/bin/virtctl ; ll /usr/local/bin/
total 64000
-r-xr-xr-x. 1 root root 17586312 Jan 11 10:52 docker-compose
-rwxr-xr-x. 1 root root 47944250 Apr 16 16:58 virtctl
[root@master kubevirt]# virtctl version
Client Version: version.Info{GitVersion:"v0.41.0", GitCommit:"b77b858ac9345ae6858cf409e1833f4548ec2809", GitTreeState:"clean", BuildDate:"2020-11-09T13:38:36Z", GoVersion:"go1.13.14", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{GitVersion:"{gitVersion}", GitCommit:"{gitCommit}", GitTreeState:"{gitTreeState}", BuildDate:"{buildDate}", GoVersion:"go1.13.14", Compiler:"gc", Platform:"linux/amd64"}

创建VirtualMachine

  • VirtualMachine(vm)类似于docker镜像一个模板可以启动很多运行实例vmi:
[root@master kubevirt]# cat test.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
  labels:
    kubevirt.io/vm: vm-cirros
  name: vm-cirros
spec:
  running: false
  template:
    metadata:
      labels:
        kubevirt.io/vm: vm-cirros
    spec:
      domain:
        devices:
          disks:
          - disk:
              bus: virtio
            name: containerdisk
          - disk:
              bus: virtio
            name: cloudinitdisk
        machine:
          type: ""
        resources:
          requests:
            memory: 64M
      terminationGracePeriodSeconds: 0
      volumes:
      - name: containerdisk
        containerDisk:
          image: kubevirt/cirros-container-disk-demo:latest
      - cloudInitNoCloud:
          userDataBase64: IyEvYmluL3NoCgplY2hvICdwcmludGVkIGZyb20gY2xvdWQtaW5pdCB1c2VyZGF0YScK
        name: cloudinitdisk
[root@master kubevirt]# kubectl apply -f test.yaml
virtualmachine.kubevirt.io/vm-cirros created

[root@master kubevirt]# kubectl get vm
NAME        AGE   VOLUME
vm-cirros   21m

启动VirtualMachineInstance

  • VirtualMachineInstance(vmi)类似于docker镜像的运行实例容器:
[root@master kubevirt]# virtctl start vm-cirros
VM vm-cirros was scheduled to start
[root@master kubevirt]# kubectl get vmi
NAME        AGE   PHASE     IP            NODENAME
vm-cirros   62s   Running   10.244.0.15   master

[root@master kubevirt]# virtctl console vm-cirros  # 进入虚拟机
Successfully connected to vm-cirros console. The escape sequence is ^]

login as 'cirros' user. default password: 'gocubsgo'. use 'sudo' for root.
vm-cirros login: cirros
Password:
$ 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 1450 qdisc pfifo_fast qlen 1000
    link/ether 2e:3e:2a:46:29:94 brd ff:ff:ff:ff:ff:ff
    inet 10.244.0.16/24 brd 10.244.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::2c3e:2aff:fe46:2994/64 scope link tentative flags 08
       valid_lft forever preferred_lft forever
       
$    #  按 ctrl+]  退出虚拟机
$ [root@master kubevirt]#

启动和停止命令

spec.running 字段如果设置为true为启动、false为停止**

  • 创建 VirtualMachine 后,可以像这样打开或关闭它:
# Start the virtual machine:  启动虚拟机
virtctl start vm   

# Stop the virtual machine:  停止虚拟机
virtctl stop vm
  • kubectl也可以使用:
# Start the virtual machine:  启动虚拟机
kubectl patch virtualmachine vm --type merge -p \
    '{"spec":{"running":true}}'

# Stop the virtual machine:  停止虚拟机
kubectl patch virtualmachine vm --type merge -p \
    '{"spec":{"running":false}}'

vm作为服务公开

VirtualMachine 可以作为服务公开。实际服务将在 VirtualMachineInstance 启动后可用。

例如, 在创建 VirtualMachine 后,将 SSH 端口 (22) 公开为NodePort服务

[root@master kubevirt]# virtctl expose virtualmachine  vm-cirros --name vmiservice-node  --target-port 22  --port 24 --type NodePort
Service vmiservice-node successfully exposed for virtualmachine vm-cirros
[root@master kubevirt]# kubectl get svc
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes        ClusterIP   10.96.0.1       <none>        443/TCP        95d
vmiservice-node   NodePort    10.106.62.191   <none>        24:31912/TCP   3s

最后使用远程工具连接即可:

注意 端口使用svc NodePort端口**,如图所示:

255qE5oqA5pyvTG9ncw==,size_20,color_FFFFFF,t_70,g_se,x_16)在这里插入图片描述在这里插入图片描述

简洁版

安装KubeVirt

export RELEASE=v0.35.0
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml
kubectl get pods -n kubevirt
kubectl -n kubevirt wait kv kubevirt --for condition=Available

安装virtctl客户端工具

export VERSION=v0.41.0
wget https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64
cp virtctl-v0.41.0-linux-amd64 /usr/local/bin/virtctl
chmod +x /usr/local/bin/virtctl ; ll /usr/local/bin/
virtctl version

创建VirtualMachine

[root@master kubevirt]# cat test.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
  labels:
    kubevirt.io/vm: vm-cirros
  name: vm-cirros
spec:
  running: false
  template:
    metadata:
      labels:
        kubevirt.io/vm: vm-cirros
    spec:
      domain:
        devices:
          disks:
          - disk:
              bus: virtio
            name: containerdisk
          - disk:
              bus: virtio
            name: cloudinitdisk
        machine:
          type: ""
        resources:
          requests:
            memory: 64M
      terminationGracePeriodSeconds: 0
      volumes:
      - name: containerdisk
        containerDisk:
          image: kubevirt/cirros-container-disk-demo:latest
      - cloudInitNoCloud:
          userDataBase64: IyEvYmluL3NoCgplY2hvICdwcmludGVkIGZyb20gY2xvdWQtaW5pdCB1c2VyZGF0YScK
        name: cloudinitdisk
[root@master kubevirt]# kubectl apply -f test.yaml
virtualmachine.kubevirt.io/vm-cirros created

[root@master kubevirt]# kubectl get vm
NAME        AGE   VOLUME
vm-cirros   21m

启动VirtualMachineInstance

virtctl start vm-cirros
kubectl get vmi
virtctl console vm-cirros  # 进入虚拟机
按 ctrl+]  退出虚拟机

启动和停止命令

virtctl start vm   
virtctl stop vm

# Start the virtual machine:  启动虚拟机
kubectl patch virtualmachine vm --type merge -p \
    '{"spec":{"running":true}}'

# Stop the virtual machine:  停止虚拟机
kubectl patch virtualmachine vm --type merge -p \
    '{"spec":{"running":false}}'

vm作为服务公开

[root@master kubevirt]# virtctl expose virtualmachine  vm-cirros --name vmiservice-node  --target-port 22  --port 24 --type NodePort
[root@master kubevirt]# kubectl get svc
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Ubuntu Linux KVM
分享一些OpenStack的qcow2格式实例镜像
分享一些OpenStack的qcow2格式实例镜像
19082 1
分享一些OpenStack的qcow2格式实例镜像
|
存储 算法 关系型数据库
【CEPH-初识篇】ceph详细介绍、搭建集群及使用,带你认识新大陆
你好,我是无名小歌。 今天给大家分享一个分布式存储系统ceph。 什么是ceph? Ceph在一个统一的系统中独特地提供对象、块和文件存储。Ceph 高度可靠、易于管理且免费。Ceph 的强大功能可以改变您公司的 IT 基础架构和管理大量数据的能力。Ceph 提供了非凡的可扩展性——数以千计的客户端访问 PB 到 EB 的数据。ceph存储集群相互通信以动态复制和重新分配数据。
1870 0
【CEPH-初识篇】ceph详细介绍、搭建集群及使用,带你认识新大陆
|
机器学习/深度学习 资源调度 Kubernetes
进击的Kubernetes调度系统(三):支持批任务的Binpack Scheduling
阿里云容器服务团队结合多年Kubernetes产品与客户支持经验,对Kube-scheduler进行了大量优化和扩展,逐步使其在不同场景下依然能稳定、高效地调度各种类型的复杂工作负载。 《进击的Kubernetes调度系统》系列文章将把我们的经验、技术思考和实现细节全面地展现给Kubernetes用户和开发者,期望帮助大家更好地了解Kubernetes调度系统的强大能力和未来发展方向。
5445 115
|
存储 Linux 虚拟化
开源虚拟化平台oVirt4.3简单搭建实践(下)
开源虚拟化平台oVirt4.3简单搭建实践(下)
2036 0
开源虚拟化平台oVirt4.3简单搭建实践(下)
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
274930 0
|
6月前
|
存储 运维 Kubernetes
容器很爽,但 VM 还活着——聊聊 K8s 上的混合工作负载:KubeVirt 到底是不是救命稻草?
容器很爽,但 VM 还活着——聊聊 K8s 上的混合工作负载:KubeVirt 到底是不是救命稻草?
548 9
|
存储 Kubernetes 调度
|
存储 Kubernetes 算法框架/工具
Kubevirt
Kubevirt
1083 12
|
Kubernetes 搜索推荐 应用服务中间件
制作KubeVirt镜像
制作KubeVirt镜像
1116 13
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
5142 11

热门文章

最新文章