前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[没接触过kubevirt?]15分钟快速入门kubevirt

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

原创
作者头像
秋意零
发布2022-04-17 17:38:28
1.3K0
发布2022-04-17 17:38:28
举报
文章被收录于专栏:YeTechLogYeTechLog

@TOC

本文介绍

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

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

| 详细版 | 简洁版 |

| ------ | ------ |

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

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

前言

  • 什么是kubevirt?

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

环境准备

  • 环境保证网络出外网

| 系统 | 服务 |

| :-----: | :------------: |

| centos7 | kubernetes集群 |

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

详细版

搭建步骤

安装KubeVirt
代码语言:shell
复制
[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

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

代码语言:shell
复制
[root@master ~]# kubectl -n kubevirt wait kv kubevirt --for condition=Available

kubevirt.kubevirt.io/kubevirt condition met
安装virtctl客户端工具
代码语言:shell
复制
[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:
代码语言:shell
复制
[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镜像的运行实例容器:
代码语言:shell
复制
[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   maste



[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 foreve

    inet6 ::1/128 scope host

       valid\_lft forever preferred\_lft foreve

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 foreve

    inet6 fe80::2c3e:2aff:fe46:2994/64 scope link tentative flags 08

       valid\_lft forever preferred\_lft foreve

       

$    #  按 ctrl+]  退出虚拟机

$ [root@master kubevirt]#
启动和停止命令

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

  • 创建 VirtualMachine后,可以像这样打开或关闭它:
代码语言:shell
复制
# Start the virtual machine:  启动虚拟机

virtctl start vm   



# Stop the virtual machine:  停止虚拟机

virtctl stop vm
  • kubectl也可以使用:
代码语言:shell
复制
# 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服务

代码语言:shell
复制
[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)
255qE5oqA5pyvTG9ncw==,size_20,color_FFFFFF,t_70,g_se,x_16)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简洁版

安装KubeVirt

代码语言:shell
复制
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
代码语言:shell
复制
kubectl -n kubevirt wait kv kubevirt --for condition=Available

安装virtctl客户端工具

代码语言:shell
复制
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

代码语言:shell
复制
[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

代码语言:shell
复制
virtctl start vm-cirros

kubectl get vmi

virtctl console vm-cirros  # 进入虚拟机

按 ctrl+]  退出虚拟机

启动和停止命令

代码语言:shell
复制
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作为服务公开

代码语言:shell
复制
[root@master kubevirt]# virtctl expose virtualmachine  vm-cirros --name vmiservice-node  --target-port 22  --port 24 --type NodePort

[root@master kubevirt]# kubectl get svc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文介绍
  • 前言
  • 环境准备
  • 详细版
    • 搭建步骤
      • 安装KubeVirt
      • 安装virtctl客户端工具
      • 创建VirtualMachine
      • 启动VirtualMachineInstance
      • 启动和停止命令
      • vm作为服务公开
  • 简洁版
    • 安装KubeVirt
      • 安装virtctl客户端工具
        • 创建VirtualMachine
          • 启动VirtualMachineInstance
            • 启动和停止命令
              • vm作为服务公开
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
              http://www.vxiaotou.com