创建及管理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)
上一篇 2017-01-19 21:22
下一篇 2017-01-20 16:06

相关推荐

  • 加密通讯过程

    一次加密通讯的过程 1、client_hello   客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下: 支持的最高TSL协议版本version,从低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,当前基本不再使用低于 TLSv1 的版本 客户端支持的加密…

    Linux干货 2017-02-07
  • 磁盘阵列RAID

    磁盘阵列RAID 什么是RAID RAID的全称是Redundant Array of Inexpensive Disks 可以释义为 廉价磁盘冗余阵列,后来的RAID里的字母I被认为是Independent,即独立的磁盘冗余阵列。 RAID的作用 由于服务器中磁盘读写率太大,所以磁盘经常损坏,raid可以让坏了一块磁盘时,服务器不至于岩机。当然这只是其中的…

    Linux干货 2017-06-18
  • Puppet基于Master/Agent模式实现LNMP平台部署

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

    Linux干货 2015-07-13
  • LAMP三个主机的简单配置和php-admin,wordpress

    LAMP:组合应用httpd2.4:yum install httpd.2.4php-fpm:yum install php-fpm php-mysqlmysql: yum install mysql 注意:在做实验时,一定要将iptables和selinux给关了。 http:只需在httpd上写一个必须的文件/etc/httpd/conf.d/fcgic…

    2017-06-06
  • 虚拟化技术介绍、Xen的简单实现

    虚拟化是什么? 虚拟化是一种资源管理技术, 是将计算机的各实体资源, 如服务、网络、内存及存储等, 予以抽象、转换后呈现出来, 打破实体之间的不可切割的障碍, 使用户可以比原本的配置更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式, 地域或物理配置所限制。一般情况下, 虚拟化资源包括计算能力和数据存储 —<转自维基百科&…

    2016-05-31
  • Linux基础之—基础权限和特殊权限以及FACL权限管理

    Linux是多用户多任务的操作系统,了解掌握Linux的权限分配机制,也是管理Linux系统安全的基础之一。 文件目录的权限格式如下:   1.其中权限位可以看对象到是一个9个占位符,其实分为三位一组: (1) 第一组:对应的是文件或目录的所有者属主权限。owner (2) 第二组:对应的是文件或目录的所属组权限。group (3) 第三组:对应的…

    Linux干货 2016-08-07