kvm

1 .虚拟机

一个物理机上装一个或一种系统。

虚拟化:一个系统里面虚拟出无限个或无限种系统,这些虚拟的系统对你真实系统没有任何影响

生产环节:

一个物理机上装一个或一种系统。

资源浪费:性能不发挥到极致,浪费 发挥到极致,还是浪费

虚拟化:解决资源浪费,首先一台物理机顶配,然后在物理机虚拟出10-20台虚拟机

cpu 80%

内存70-80%

虚拟化考虑资源预留额度

虚拟化不是万能的,什么情况下不能用虚拟化?

对资源要求高的服务:数据库(磁盘IO要求高) 计算服务(视频转码,完全耗尽CPU资源)

虚拟化使用场景:资源使用不多不频繁业务,例如负载均衡,nginx web服务器,缓存


2 .虚拟技术演变过程

2.1软件模拟

软件模拟的永远都没有硬件好

软件模拟,理论上可以模拟任何硬件,甚至是不存在的硬件。但是因为这种方式全部是软件模拟硬件,所以非常低效,一般只用于研究测试的场景。采用这种技术的典型产品有Bochs、 QEMU等。


2.2虚拟化层翻译

  CPU和内存不模拟了,直接用真实的物理CPU和内存

主板,磁盘这种还是软件模拟方式

虚拟机发的指令直接到了真实cpu,但是为什么不会对宿主机造成影响呢?

软件全虚拟化:通过虚拟化引擎vmm实现了虚拟机和宿主机的指令隔离,缺点在于有瓶颈:虚拟化层:单点故障和压力高

半虚拟化:改造虚拟机系统内核加虚拟化层翻译

硬件支持的全虚拟化: 硬件支持的虚拟化层翻译==》生产必用方案(KVM)

功耗:电量消耗

续航:CPU--低功耗 屏幕--低功耗  电池--体积小电量大锂电池

虚拟化产品:VMworkstation(个人桌面使用) Esxi(服务器操作系统) KVM(支持超配) XEN(不支持超配)


2.3 容器虚拟化docker

技术解决方案和前面的全虚拟化不一样

KVM:装了一个完整版本的操作系统   1G

docker:借助宿主机的资源,自己只是一个小型操作系统,5M-500M


3. KVM虚拟机

一台kvm虚拟机=KVM内核模块+Qemu模拟的硬件
OpenStack只是一个管理虚拟机的web平台,但是创建虚拟机不是他的事,是有kvm实现的
[root@CentOS7 ~]# grep -Eo '(vmx|svm)' /proc/cpuinfo
vmx
[root@CentOS7 ~]# lsmod |grep kvm
kvm_intel             162153  0 
kvm                   525259  1 kvm_intel

[root@CentOS7 ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
[root@CentOS7 ~]# uname -r
3.10.0-327.el7.x86_64
[root@CentOS7 ~]# getenforce 
Disabled
[root@CentOS7 ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
[root@CentOS7 ~]# hostname -I
10.0.0.201 172.16.1.201 192.168.122.1 

[root@KVM ~]# yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install 
[root@KVM ~]# rpm -qa|grep -E 'qemu|libvirt|virt'
python-virtinst-0.600.0-29.el6.noarch   # 一套Python的虚拟机安装工具
gpxe-roms-qemu-0.9.7-6.14.el6.noarch    # 虚拟机iPXE的启动固件,支持虚拟机从网络启动
virt-manager-0.9.0-29.el6.x86_64        # 基于Libvirt的图像化虚拟机管理软件,需要图形界面操作系统
qemu-img-0.12.1.2-2.479.el6.x86_64      # 用于操作虚拟机硬盘镜像的创建、查看和格式转化
libvirt-python-0.10.2-54.el6.x86_64     # libvirt为Python提供的API
qemu-kvm-0.12.1.2-2.479.el6.x86_64      # KVM在用户空间运行的程序
qemu-kvm-tools-0.12.1.2-2.479.el6.x86_64
libvirt-0.10.2-54.el6.x86_64            # 用于管理虚拟机,它提供了一套虚拟机操作API
libvirt-client-0.10.2-54.el6.x86_64     # Libvirt的客户端,最重要的功能之一就是就在宿主机关机时可以通知虚拟机也关机,使虚拟机系统正常关机,而不是被强制关机,造成数据丢失
virt-top-1.0.4-3.15.el6.x86_64          # 类似于top命令,查看虚拟机的资源使用情况
virt-what-1.11-1.2.el6.x86_64           # 在虚拟机内部执行,查看虚拟机运行的虚拟化平台
virt-viewer-0.5.6-8.el6.x86_64          # 显示虚拟机的控制台console

systemctl status libvirtd.service

4 .查看环境是否统一

[root@KVM ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core) 
[root@KVM ~]#  uname -r
3.10.0-327.el7.x86_64
[root@KVM ~]# getenforce 
Disabled
[root@KVM ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
[root@KVM ~]# hostname -I
10.0.0.201 172.16.1.201 192.168.122.1

5. 查看libvirtd是否启动

[root@KVM ~]# systemctl status libvirtd.service
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2017-08-01 08:28:43 CST; 1h 52min ago
     Docs: man:libvirtd(8)
           http://libvirt.org
 Main PID: 1130 (libvirtd)
   CGroup: /system.slice/libvirtd.service
           ├─1130 /usr/sbin/libvirtd
           ├─1336 /sbin/dnsmasq --conf-file=/var/lib/libvi...
           └─1339 /sbin/dnsmasq --conf-file=/var/lib/libvi...

8月 01 08:28:39 oldboyedu libvirtd[1130]: 2017-08-01 00:2…务
8月 01 08:28:43 oldboyedu systemd[1]: Started Virtualizat...
8月 01 08:28:48 oldboyedu dnsmasq[1336]: started, version...
8月 01 08:28:48 oldboyedu dnsmasq[1336]: compile time opt...
8月 01 08:28:48 oldboyedu dnsmasq-dhcp[1336]: DHCP, IP ra...
8月 01 08:28:48 oldboyedu dnsmasq[1336]: reading /etc/res...
8月 01 08:28:48 oldboyedu dnsmasq[1336]: using nameserver...
8月 01 08:28:48 oldboyedu dnsmasq[1336]: read /etc/hosts ...
8月 01 08:28:48 oldboyedu dnsmasq[1336]: read /var/lib/li...
8月 01 08:28:48 oldboyedu dnsmasq-dhcp[1336]: read /var/l...
Hint: Some lines were ellipsized, use -l to show in full.

5.1 开启

[root@KVM ~]# systemctl start libvirtd.service

6 .创建虚拟机

6.1创建磁盘

[root@CentOS7 kvm_data]#mkdir -p /application/kvm_data
[root@CentOS7 kvm_data]#qemu-img create -f qcow2 /application/kvm_data/moban.qcow2 20G
[root@CentOS7 kvm_data]# qemu-img info moban.qcow2
image: moban.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
生成kvm虚拟机:virt-install
查看在运行的虚拟机:virsh list
查看所有虚拟机:virsh list --all
查看kvm虚拟机配置文件:virsh dumpxml name
启动kvm虚拟机:virsh start name
正常关机:virsh shutdown name 
非正常关机(相当于物理机直接拔掉电源):virsh destroy name
删除:virsh undefine name(彻底删除,找不回来了,如果想找回来,需要备份/etc/libvirt/qemu的xml文件)
根据配置文件定义虚拟机:virsh define file-name.xml
挂起,终止:virsh suspend name
恢复挂起状态:virsh resume name

6.2 修改clone.xml配置文件

[root@KVM ~]# virsh dumpxml c72-moban > clone.xml
[root@KVM ~]# cp clone.xml clone.xml.ori
[root@KVM ~]# vim clone.xml
[root@KVM ~]# diff clone.xml clone.xml.ori 
2,3c2,3
<   <name>c72-clone</name>
<   <uuid>515c35a8-a0f4-4371-a26b-aaf5f0cb01ba</uuid>
---
>   <name>c72-moban</name>
>   <uuid>47b413f7-31db-4543-8b4a-8b9a9bd56a7d</uuid>
34c34
<       <source file='/application/kvm_data/clone.qcow2'/>
---
>       <source file='/application/kvm_data/moban.qcow2'/>
66,67c66,67
<     <interface type='network'
<       <mac address='53:54:00:1c:cc:83'/>
---
>     <interface type='network'>
>       <mac address='52:54:00:1c:cc:83'/>

6.3 执行创建虚拟机的命令

先要把一个镜像上传到宿主机的目录
vnc:linux版本远程桌面  端口号:5900
windows:RDP  remote desktop protocol  端口号:3389
[root@CentOS7 kvm_data]# virt-install --virt-type=kvm --name=c72-moban --vcpus=1 -r 1024 -c /application/tools/CentOS7_2.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --disk path=/application/kvm_data/moban.qcow2,size=20,format=qcow2

6.3 管理虚拟机

[root@CentOS7 ~]# virsh list
 Id    名称                         状态
----------------------------------------------------

[root@CentOS7 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     c72-moban                      关闭

6.4 kvm虚拟机两要素:配置文件和磁盘文件

[root@CentOS7 ~]# ls /etc/libvirt/qemu  # kvm虚拟机的配置文件都在这个目录
c72-moban.xml 
[root@CentOS7 ~]# qemu-img info /application/kvm_data/moban.qcow2 
image: /application/kvm_data/moban.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 1.1G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
生成kvm虚拟机:virt-install
查看在运行的虚拟机:virsh list
查看所有虚拟机:virsh list --all
查看kvm虚拟机配置文件:virsh dumpxml name
启动kvm虚拟机:virsh start name
正常关机:virsh shutdown name 
非正常关机(相当于物理机直接拔掉电源):virsh destroy name
删除:virsh undefine name(彻底删除,找不回来了,如果想找回来,需要备份/etc/libvirt/qemu的xml文件)
根据配置文件定义虚拟机:virsh define file-name.xml
挂起,终止:virsh suspend name
恢复挂起状态:virsh resume name

6.4.1 磁盘文件格式介绍

http://www.cnblogs.com/feisky/archive/2012/07/03/2575167.html
raw 和qcow2简单区别
	raw不支持快照
	qcow2支持快照
注意:关闭虚拟机后操作

7. 克隆虚拟机

7.1 导出xml配置文件并修改配置

[root@KVM ~]# uuidgen
40e3944f-4b35-450e-896b-0ffb25488d38
[root@KVM ~]# virsh dumpxml c72-moban > clone.xml
[root@KVM ~]# cp clone.xml clone.xml.ori
[root@KVM ~]# vim clone.xml
[root@KVM ~]#  diff clone.xml clone.xml.ori 
2,3c2,3
<   <name>c72-clone</name>
<   <uuid>40e3944f-4b35-450e-896b-0ffb25488d38</uuid>
---
>   <name>c72-moban</name>
>   <uuid>47b413f7-31db-4543-8b4a-8b9a9bd56a7d</uuid>
34c34
<       <source file='/application/kvm_data/clone.qcow2'/>
---
>       <source file='/application/kvm_data/moban.qcow2'/>
67c67
<       <mac address='52:54:00:1c:cc:82'/>
---
>       <mac address='52:54:00:1c:cc:83'/>

7.1.1复制磁盘文件

[root@CentOS7 ~]# cd /application/kvm_data/
[root@CentOS7 kvm_data]# cp moban.qcow2 clone.qcow2 
如果在本机克隆,那么直接导入就可以
如果是克隆到远程主机,先需要将配置文件和磁盘文件发送到远程主机,最后都是导入即可。

7.1.2 导入虚拟机

[root@CentOS7 ~]# virsh define clone.xml
定义域 c72-clone(从 clone.xml)

[root@CentOS7 ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     c72-clone                      关闭
 -     c72-moban                      关闭

vnc端口谁先启动谁先用,第一个启动5900 第二个5901 第三个5902

8  .快照

	磁盘格式要为qcow2
	关机做快照最好,开机也能做快照
创建快照
virsh snapshot-create-as c72-clone    kuaizhao1
命令   创建快照指令      虚拟机名称  快照名称
查看快照列表
virsh snapshot-list      c72-clone
命令   查看快照列表指令      虚拟机名称
# 查看快照信息
virsh snapshot-info           c72-clone    kuaizhao1
命令   查看指定快照信息指令   虚拟机名称   快照名称
# 还原
virsh snapshot-revert     c72-clone    kuaizhao1
命令   还原指定快照指令   虚拟机名称   快照名称
# 删除快照
virsh snapshot-delete     c72-clone    kuaizhao1
命令   删除指定快照指令   虚拟机名称   快照名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值