创建及管理KVM工具之virsh

一、什么是虚拟化

虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。

二、虚拟化能做什么

CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

三、虚拟化分类

虚拟化可分为两类,完全虚拟化(full virtualization)和半虚拟化(paravirtualization)。

完全虚拟化(full virtualization):完全虚拟化是一种虚拟化技术用于提供一种虚拟机环境,即一个完整的底层硬件仿真。完全虚拟化要求每个硬件的显著特征被映射到每一个虚拟机上。在虚拟机(VM)和硬件之间之间增加一个软件层–Hypervisor,实现虚拟机管理。工作与完全虚拟化的虚拟机不知道有hypervisor的存在。

半虚拟化(paravirtualization):半虚拟化是一种虚拟化技术,提出了一种虚拟机软件界面相似,但不完全相同的底层硬件。宿主计算机操作系统需要支持para-API,并通过virtual machine monitor (VMM)管理。也就是让虚拟机明确知道自己工作在虚拟环境中。

其中,hypervisor 可以划分为两大类。

类型 1,这种 hypervisor 是直接运行在物理硬件之上的,例如:vmware vsphere, kvm等。

类型 2,这种 hypervisor 运行在另一个操作系统(运行在物理硬件之上)中,例如:VMware workstation, xen(hvm)等。

除此之外,还有以下虚拟化分类:

用户空间虚拟化(容器)拥有独立的文件树和进程树于独立的名字空间中,容器间可通信。可打包如httpd, tomcat

服务于一个文件中,利于快速部署。

docker是容器的一种易于快速部署的方式,kvm+docker是流行的部署方式。

docker的其他实现方式:lxc, openvz, solaris containers, FreeBSD jails

库虚拟化:

WINE,Cywin

应用程序虚拟化:

jvm, pvm

四、KVM的相关术语

KVM (名称来自英语: Kernel-basedVirtual Machine 的缩写,即基于内核的虚拟机),是一种用于Linux内核中

的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以

加载核心模块的方式被移植到FreeBSD及illumos上。 

KVM必须在在具备硬件支持的Intel VT或AMD-V功能的平台上运行。

KVM安装后,宿主机(HOST)的kernel变为hypervisor。原有操作系统变为domain 0,提供控制台和I/O管理。KVM虚拟机可直接通过原kernel的kvm模块调用宿主机的cpu和

内存,I/O部分则需要先到domain0,再到宿主硬件设备。

运行模式如下:

内核模式:GuestOS执行I/O类操作;

用户模式:代表GuestOS请求I/O类操作;

来宾模式:GuestOS的非I/O类操作;

kvm hypervisor:安装过KVM的kernel;

两类组件:
/dev/kvm:字符设备文件,
工作于hypervisor,主要用于创建VM、为VM分配内存、读写VCPU的寄存器、向VCPU注入中断、运行VCPU等等;
qemu进程:工作于用户空间,主要用于实现模拟PC机的IO设备;
QEMU主要提供以下功能:

五、安装KVM
在正式安装之前,我们先来看看这张kmv和各管理工具的关系图。

kvm-libvert.jpg

QUME的主要功能:

   处理器模拟器

   仿真IO设备

   关联模拟的设备至真实设备;

   调试器

   与模拟器交互的用户接口

qemu:kmv的文本管理工具,包括qemu-kvm、qemu-img

libvirt:是一套免费、开源的支持Linux下主流虚拟化工具的C函数库,libvirtd是运行的守护进程的名称。包括GUI: virt-manager, virt-viewer,CLI: virt-install, virsh

安装步骤:

(1) 确保CPU支持HVM

# grep -E –color=auto "(vmx|svm)" /proc/cpuinfo

(2) 装载模块

# modprobe kvm

# lsmod | grep kvm

(3)验证

ls -l /dev/kvm

(4)安装libvirt

yum install libvirt -y

(5)安装其他管理组件

yum install -y virt-manager virt-viewer virt-install

# yum install -y qemu-kvm

(6)启动libvirtd守护进程

systemctl start libvirtd

验证:ifconfig多了virbr0虚拟网桥(只能是nat模式)

[root@localhost ~]# ifconfig

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

        ether 52:54:00:57:1a:76  txqueuelen 0  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

(7)启动virt tui

# virt-manager

ps aux

root      14996 13.9  8.7 1197240 87980 ?       Ssl  23:41   0:01 /usr/bin/python2 /usr/share/virt-manager/virt-manager


使用virsh测试各命令及创建虚拟机

1. 获取各命令帮助

virsh help KEYWORD

#virsh help list

2. 查看域,–all选项可查看关机的虚拟机域,域id每次开关机后可能不一样

root@localhost ~]# virsh list –all

 Id    Name                           State

—————————————————-

 –     debian8                        shut off

3. 查看虚拟机配置文件

注意为xml格式,可以到处到某处查看或以此为模板创建其他虚拟机

虚拟机以域(domain)为单位创建

# virsh dumpxml debian8 > /tmp/mytemplate.xml

4. 创建域

create 

virsh create <file> [–console] [–paused] [–autodestroy] [–pass-fds <string>] [–validate]

    [–file] <string>  file containing an XML domain description

    –console        attach to console after creation

    –paused         leave the guest paused after creation

    –autodestroy    automatically destroy the guest when virsh disconnects

    –pass-fds <string>  pass file descriptors N,M,… to the guest

    –validate       validate the XML against the schema

5. 获取域id

[root@localhost ~]# virsh domid debian8

3

6. 获取域uuid

[root@localhost ~]# virsh domuuid debian8

9332c5a4-4abc-4e7f-bec0-faf394950a55

7. 获取域信息

[root@localhost ~]# virsh dominfo debian8

Id:             3

Name:           debian8

UUID:           9332c5a4-4abc-4e7f-bec0-faf394950a55

OS Type:        hvm

State:          running

CPU(s):         2

CPU time:       428.6s

Max memory:     1047552 KiB

Used memory:    1047552 KiB

Persistent:     yes

Autostart:      disable

Managed save:   no

Security model: selinux

Security DOI:   0

Security label: system_u:system_r:svirt_t:s0:c327,c602 (enforcing)

8. 登录虚拟机控制台

[root@localhost ~]# virsh console debian8

Connected to domain debian8

Escape character is ^]

使用ctrl+],退出console

9. 开启域

[root@localhost ~]# virsh start debian8

Domain debian8 started

10. 重启域

reboot

11. 关闭域 

destory

shutdown

12. 删除域

undefine

13. 暂停域并保存域状态至某文件中

# virsh save debian8 /tmp/debian_save1 –running

–running 下次恢复,直接启动

14. 从保存文件中恢复域

# virsh restore /tmp/debian_save1

管理域的命令:

15. 改变内存大小

不能超出预设值,只能调小,可以当前生效,也可以下次生效

# virsh setmem debian8 786m –current

[root@localhost ~]# virsh dominfo debian8

Id:             5

Name:           debian8

UUID:           9332c5a4-4abc-4e7f-bec0-faf394950a55

OS Type:        hvm

State:          running

CPU(s):         2

CPU time:       1471.5s

Max memory:     1047552 KiB

Used memory:    804864 KiB  #此处为改过的值

Persistent:     yes

Autostart:      disable

Managed save:   no

Security model: selinux

Security DOI:   0

Security label: system_u:system_r:svirt_t:s0:c470,c985 (enforcing)

[root@localhost ~]# free -mh

                     total        used        free      shared  buff/cache   available

Mem:           977M        741M         73M        4.2M        162M         64M

Swap:          1.9G        1.1G        827M

16. 设定内存最大内存

运行中的域不能修改最大内存值

[root@localhost ~]# virsh setmaxmem debian8 900m –config 

下次启动有效

17. 设定vcpu数量

# virsh setvcpus debian8 1 –config

不能实时改,下次启动有效

18. 获取vcpu信息

[root@localhost ~]# virsh vcpuinfo debian8

VCPU:           0   #vcpu

CPU:            0    #在宿主机cpu位置

State:          running

CPU time:       675.5s

CPU Affinity:   yyyy

VCPU:           1

CPU:            1

State:          running

CPU time:       694.2s

CPU Affinity:   yyyy

19. 获取域网络接口信息

[root@localhost ~]# virsh domiflist debian8

Interface  Type       Source     Model       MAC

——————————————————-

vnet0      network    default    virtio      52:54:00:82:53:a2

20. 获取域的接口统计信息

[root@localhost ~]# virsh domifstat debian8 vnet0

vnet0 rx_bytes 197810

vnet0 rx_packets 3755

vnet0 rx_errs 0

vnet0 rx_drop 0

vnet0 tx_bytes 13400

vnet0 tx_packets 111

vnet0 tx_errs 0

vnet0 tx_drop 0

21. 获取域块设备信息

[root@localhost ~]# virsh domblklist debian8

Target     Source

————————————————

vda        /var/lib/libvirt/images/debian8.qcow2

hda        –

22. 获取域块设备(存储)统计信息

[root@localhost ~]# virsh domblkstat debian8

 rd_req 21908

 rd_bytes 670065746

 wr_req 1105

 wr_bytes 29772800

 flush_operations 229

 rd_total_times 97947369758

 wr_total_times 60546346501

 flush_total_times 1534616225

创建及管理磁盘:

23. 创建磁盘

[root@localhost ~]# qemu-img create -f qcow2 -o preallocation=metadata /tmp/test.qcow2 120G 稀疏格式

Formatting '/tmp/test.qcow2', fmt=qcow2 size=128849018880 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off 

[root@localhost ~]# du -lh /tmp/test.qcow2 

19M /tmp/test.qcow2

[root@localhost ~]# ll -lh /tmp/test.qcow2 

-rw-r–r–. 1 root root 121G Jan 12 13:53 /tmp/test.qcow2

24. 增加磁盘大小

[root@localhost ~]# qemu-img resize /tmp/test.qcow2 150G

Image resized.

[root@localhost ~]# ll -h /tmp/test.qcow2 

-rw-r–r–. 1 root root 121G Jan 12 13:57 /tmp/test.qcow2

[root@localhost ~]# du -lh /tmp/test.qcow2 

19M /tmp/test.qcow2

25. 附加磁盘到域

# qemu-img create -f qcow2 -o preallocation=metadata /tmp/mytest.img 20G

[root@localhost ~]# virsh attach-disk debian8 /tmp/mytest.img vdb

Disk attached successfully

26. 拆除磁盘

[root@localhost ~]# virsh detach-disk debian8 vdb

Disk detached successfully

网卡管理

网桥查看命令

[root@localhost ~]# brctl show

bridge name bridge id                  STP enabled interfaces

br0 8000.000000000000          no

virbr0 8000.525400571a76  yes virbr0-nic

                        vnet0

27.添加域网卡到宿主机桥上

[root@localhost ~]# virsh attach-interface debian8 bridge virbr0 为宿主机nat网桥

Interface attached successfully

[root@localhost ~]# virsh domiflist debian8

Interface  Type       Source     Model       MAC

——————————————————-

vnet0      network    default    virtio      52:54:00:82:53:a2

vnet1      bridge     virbr0     rtl8139     52:54:00:ca:04:d3

vnet2      bridge     br0        rtl8139     52:54:00:89:3b:1d

28. 删除域网卡

[root@localhost ~]# virsh detach-interface debian8 bridge –mac 52:54:00:89:3b:1d

Interface detached successfully


使用qemu命令手动创建虚拟机

qemu-kvm为创建工具

原创文章,作者:allen,如若转载,请注明出处:http://www.178linux.com/66897

(4)
allenallen
上一篇 2017-01-19
下一篇 2017-01-20

相关推荐

  • 98-mysql数据备份

    一. 数据备份基础知识

    2016-11-20
  • 你会用Python写洗脑神曲吗?

    Python实战班-学员学习成果展示 同样是周末,有些人是闲聊着度过,有些人是学习充电度过。 人与人最大的区别,是下班后的时间。看你怎么去利用。 周末时,马哥Python实战班的学员正在认真上课,他们中的不少人,月薪在10k以上,甚至月薪20k以上。 但他们没有虚度周末时光。 #最浪费时间的就是:思而不学+犹豫不决。# 马哥Python实战班二期的小伙伴们才…

    Linux干货 2016-07-05
  • Puppet基于Master/Agent模式实现LNMP平台部署

    前言 随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的、繁琐的工作利用自动化处理。前期我们介绍了运维自动化工具ansible的简单应用,本期带来的是运维自动化神器puppet基于Master/Agent模式实现LNMP平台部署。 Puppet 简介 Puppet是基于ruby语言开发的一种L…

    Linux干货 2015-07-13
  • Linux中高级文件系统管理

    一、磁盘配额管理             定义:限制普通用户对某个目录写空间大小的限制     1、此策略是针对文件系统,并非硬盘     2、可以根据不同组和不同用户进行不同的策…

    Linux干货 2016-08-29
  • Nginx 编译安装

    简介 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配…

    Linux干货 2016-12-01
  • Linux Sysadmin–part4

    一、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) A.POST加电自检 主板在接通电源后,系统首先由POST程序来对内部各个设备进行检查,自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。 B.BIOS…

    2017-10-10