在计算机技术中,虚拟化意味着建立设备或资源的虚拟版本,如服务器,存储设备,网络或者操做系统等等node
- [x] 虚拟化技术分类:
- 系统虚拟化(咱们主要讨论的反向)
- 存储虚拟化(raid,lvm)
- 网络虚拟化(sdn)
- GPU虚拟化(比特币)
- 软件虚拟化
- 硬件支持虚拟化
(1)纯软件仿真python
- 经过模拟完整的硬件环境来虚拟化用户平台
- 模拟X86,ARM,PowerPC等多种CPU
- 效率比较低
- QEMU,Bochs,PearPC
(2)虚拟化层翻译linux
- 多数的虚拟化而采用虚拟机管理程序Hypervisor
- Hypervisor是一个软件层或子系统
- 也称为VMM(Virtual Machine Monitor,虚拟机监控器)
- 容许多种操做系统在相同的物理系统中运行
- 控制硬件并向用户操做系统提供访问底层硬件的途径
- 向来宾操做系统提供虚拟化的硬件
无硬件辅助的全虚拟化ios
- 基于二进制翻译的全虚拟化
- Hypervisor运行在Ring 0
- Guest OS运行在Ring 1
- 机制:异常,捕获,翻译
- 示例:
- VMware Workstation
- QWMU
- Virtual PC
硬件辅助的全虚拟化docker
- Intel VT 和 AMD-V建立一个新的Ring -1 单独给Hypervisor使用
- Guest OS能够直接使用Ring 0 而无须修改
- 示例:
- VMware ESXi
- Microsoft Hyper-V
- Xen3.0
- KVM
(3)容器技术shell
CentOS7.3DVD镜像下载地址:http://man.linuxde.net/download/CentOS_7_3vim
- CPU必须支持虚拟化技术,在BIOS设置为启动
- 目前,多数服务器基础桌面计算机均处理启动状态
咱们须要先用虚拟机,而后在虚拟机里再用虚拟化,也就是嵌套虚拟化windows
- VMware 嵌套虚拟化
- 产品:Workstation,Player,ESXi
- 支持:ESXi,Hyper-V,KVM,Xen
装机时虚拟机须要安装以下软件centos
进入后,ifconfig咱们发现api
网卡并无IP地址,咱们能够经过以下操做,打开网卡配置文件的ONBOOT
[root@localhost network-scripts]# pwd /etc/sysconfig/network-scripts [root@localhost network-scripts]# cat ifcfg-ens32 TYPE=Ethernet BOOTPROTO=dhcp DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens32 UUID=17fb5987-5317-4bca-8514-9e1b73933184 DEVICE=ens32 #NBOOT=yes #打开这个
而后重启网络服务
#将ssh配置文件修改为以下所示 [root@localhost ~]# sed -n '93p;129p' /etc/ssh/sshd_config GSSAPIAuthentication no UseDNS no #重启动服务 [root@localhost ~]# systemctl restart sshd
若是出现license information(license not accepted),即说明须要赞成许可信息,输入1-回车-2-回车-c-回车-c-回车。便可解决
#搭建本地光盘源yum仓库 [root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo CentOS-CR.repo CentOS-Media.repo CentOS-Debuginfo.repo CentOS-Sources.repo [root@localhost yum.repos.d]# mkdir bak [root@localhost yum.repos.d]# mv C* bak/ [root@localhost yum.repos.d]# vim local.repo [root@localhost yum.repos.d]# cat local.repo [local] name=local baseurl=file:///media/cdrom/ gpgcheck=0 enabled=1 [root@localhost yum.repos.d]# mount /dev/sr0 /media/cdrom/ mount: /dev/sr0 写保护,将以只读方式挂载 [root@localhost yum.repos.d]# yum -y clean all 已加载插件:fastestmirror, langpacks 正在清理软件源: local Cleaning up everything Cleaning up list of fastest mirrors [root@localhost yum.repos.d]# yum makecache 已加载插件:fastestmirror, langpacks local | 3.6 kB 00:00 (1/4): local/filelists_db | 3.0 MB 00:00 (2/4): local/group_gz | 155 kB 00:00 (3/4): local/other_db | 1.3 MB 00:00 (4/4): local/primary_db | 3.0 MB 00:00 Determining fastest mirrors 元数据缓存已创建
咱们的装机方式已经安装了以下软件组
@base @core @virtualization-hypervisor #虚拟化主机选项 @virtualization-platform #虚拟化平台选项 @virtualization-tools #虚拟化主机选项
咱们还须要增长以下软件包
@virtualization-client @gnome-desktop
#yum安装包组 [root@localhost ~]# yum -y group install virtualization-client [root@localhost ~]# yum -y group install gnome-desktop
#检查CPU特性 [root@localhost ~]# grep vmx /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ida arat epb pln pts dtherm hwp hwp_noitfy hwp_act_window hwp_epp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm rdseed adx smap xsaveopt [root@localhost ~]# egrep '^flags.*(vmx|svm)' /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ida arat epb pln pts dtherm hwp hwp_noitfy hwp_act_window hwp_epp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm rdseed adx smap xsaveopt
[root@localhost ~]# which virsh #查看虚拟机管理命令 /usr/bin/virsh [root@localhost ~]# virsh list --all #查看全部虚拟机 Id 名称 状态 ---------------------------------------------------- [root@localhost ~]# startx 切换到图形界面模式
在图形界面下选择左上角Application
可是,咱们在工做中一般须要远程来管理KVM的环境。而SSH方式是看不到桌面模式的。
(1)SSH图形化显示
windows安装软件x-manager。而后xshell软件开启X11转发
而后咱们链接上虚拟机之后,输入virt-manager出现下图
(2)VNC图形化显示
VNC是一个优秀的远程管理软件,它有两部分组成VNCServer,VNCViewer。
#看一下系统里是否有必须的包 [root@localhost ~]# rpm -qa | grep vnc tigervnc-license-1.3.1-9.el7.noarch #必须的 gtk-vnc2-0.5.2-7.el7.x86_64 gvnc-0.5.2-7.el7.x86_64 tigervnc-server-minimal-1.3.1-9.el7.x86_64 #必须的
#安装vnc-server [root@localhost ~]# yum -y install tigervnc-server #安装服务端软件包 [root@localhost ~]# cat /etc/sysconfig/vncservers #查看vnc配置文件 # THIS FILE HAS BEEN REPLACED BY /lib/systemd/system/vncserver@.service [root@localhost ~]# ll /lib/systemd/system/vncserver@.service #原来这才是配置文件 -rw-r--r--. 1 root root 1880 11月 16 2016 /lib/systemd/system/vncserver@.service #而后咱们须要建立vnc密码 [root@localhost ~]# vncpasswd Password: Verify: #启动vnc-server [root@localhost ~]# vncserver New 'localhost.localdomain:1 (root)' desktop is localhost.localdomain:1 Creating default startup script /root/.vnc/xstartup Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/localhost.localdomain:1.log [root@localhost ~]# ps aux | grep vnc root 6241 0.9 1.6 250192 31032 pts/0 Sl 10:07 0:00 /usr/bin/vnc :1 -desktop localhost.localdomain:1 (root) -auth /root/.Xauthority -geometry 1024x768 -rfbwait 30000 -rfbauth /root/.vnc/passwd -rfbport 5901 -fp catalogue:/etc/X11/fontpath.d -pn root 6250 0.0 0.2 96716 4068 pts/0 S 10:07 0:00 /usr/bin/vncconfig -iconic root 6991 0.0 0.0 112668 972 pts/0 S+ 10:07 0:00 grep --color=auto vnc
而后咱们须要关闭Centos7.3的防火墙
[root@localhost ~]# service firewalld stop #否则vnc客户端链接不上 Redirecting to /bin/systemctl stop firewalld.service [root@localhost ~]# systemctl disable firewalld.service #永久关闭防火墙
接下来咱们在windows主机上安装vnc客户端
https://www.realvnc.com/en/connect/download/viewer/ 能够下载vnc viewer
(1)咱们须要添加一块80G的硬盘来存储操做系统的安装介质,ISO文件
(2)利用fdisk分出一块40G的分区
[root@localhost ~]# ll /dev/sdb* brw-rw----. 1 root disk 8, 16 Apr 4 08:48 /dev/sdb brw-rw----. 1 root disk 8, 17 Apr 4 08:48 /dev/sdb1 #40G
(3)建立LVM逻辑卷
[root@localhost ~]# ll /dev/sdb* brw-rw----. 1 root disk 8, 16 Apr 4 08:48 /dev/sdb brw-rw----. 1 root disk 8, 17 Apr 4 08:48 /dev/sdb1 [root@localhost ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created. [root@localhost ~]# vgcreate vmvg /dev/sdb1 Volume group "vmvg" successfully created [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree cl 1 2 0 wz--n- 19.00g 0 vmvg 1 0 0 wz--n- 40.00g 40.00g [root@localhost ~]# vgdisplay #查看vg详细 --- Volume group --- VG Name cl System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 19.00 GiB PE Size 4.00 MiB Total PE 4863 Alloc PE / Size 4863 / 19.00 GiB Free PE / Size 0 / 0 VG UUID 6ROh78-78oc-QfPu-1YnI-pW76-TiFa-4kWjSQ --- Volume group --- VG Name vmvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 40.00 GiB PE Size 4.00 MiB Total PE 10239 Alloc PE / Size 0 / 0 Free PE / Size 10239 / 40.00 GiB #vmvg可用的PE一共10239 VG UUID Hxeycr-8UEv-qiF2-JTZi-txEl-E5G7-Iho3x5 [root@localhost ~]# lvcreate -n lvvm1 -l 10239 vmvg #将vmvg能够用PE所有分配给lvvm1 Logical volume "lvvm1" created. [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root cl -wi-ao---- 17.00g swap cl -wi-ao---- 2.00g lvvm1 vmvg -wi-a----- 40.00g [root@localhost ~]# mkfs.ext4 /dev/vmvg/lvvm1 格式化lvvm1
(4)挂载逻辑卷
[root@localhost ~]# mkdir /vm
[root@localhost ~]# mount /dev/vmvg/lvvm1 /vm/
[root@localhost ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/cl-root xfs 17G 3.7G 14G 22% / devtmpfs devtmpfs 901M 0 901M 0% /dev tmpfs tmpfs 912M 0 912M 0% /dev/shm tmpfs tmpfs 912M 8.9M 903M 1% /run tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 144M 871M 15% /boot tmpfs tmpfs 183M 0 183M 0% /run/user/0 /dev/mapper/vmvg-lvvm1 ext4 40G 49M 38G 1% /vm [root@localhost ~]# echo "mount /dev/vmvg/lvvm1 /vm/" >> /etc/rc.local
(5)建立iso镜像文件存放目录
[root@localhost ~]# mkdir /ios root@localhost ~]# cd /iso/ [root@localhost iso]# ls CentOS-6.5-x86_64-bin-DVD1.iso
将光盘安装镜像文件上传到/ios目录下:
(1)使用向导的默认配置来建立虚拟机
启动VNC远程管理程序链接Linux,打开Virtual Machine Manager
点击建立新的虚拟机
选择本地安装iso镜像
最后新建的虚拟机自动进入装机状态
同窗们选择全英文,最小化装机便可。因为我们是嵌套的虚拟化,装机图形界面可能稍微有点卡。不过不要紧,等一下就好。
特别提示:
当咱们以virt-manager进行手动管理建立虚拟机时,有可能在进入安装操做系统界面时大概率遭遇到键盘失灵的状况。若是同窗们遇到这个问题,不要着急,这是由于字符集混乱识别的问题,咱们须要调整一下虚拟机的设置后,便可恢复。
咱们作以下调整便可。
而后咱们正常开机就会进入装机界面,你会发现键盘的操做恢复了。。。
(2)以自定义规划方式建立虚拟机
咱们发现按照向导的默认方式安装虚拟机,虚拟机的磁盘并无放在咱们规划好的目录里
所以在工做中,咱们须要在安装过程当中进行自定义存储池的操做,步骤以下
到此咱们新的VM存储池就建立完了,可是在存储池里咱们还须要建立一个Volume卷(磁盘)
而后就进入操做系统的装机界面了。装完机之后咱们查看,磁盘卷位置已经修改。
#建立一块虚拟机的存储磁盘 [root@localhost ~]# qemu-img create -f qcow2 /vm/chensiqi.qcow2 10G #qcow2格式磁盘 /vm/chensiqi.qcow2磁盘位置 10G为磁盘大小 Formatting '/vm/chensiqi.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off [root@localhost ~]# ll -h /vm/ 总用量 1.1G -rw-------. 1 qemu qemu 8.1G 4月 9 12:26 centos6.5-2.qcow2 #真占了8G -rw-r--r-- 1 qemu qemu 193K 4月 9 12:09 chensiqi.qcow2 #只是小文件 drwx------ 2 root root 16K 4月 4 09:03 lost+found
咱们经过qemu-img来建立的磁盘在最初只是个小文件,直到磁盘空间被占满。
然而咱们经过virt-manager建立的磁盘却真的占了8G
#建立一个虚拟机 [root@localhost ~]# virt-install \ #建立虚拟机命令 > --name=vm1 \ #虚拟机的名字 > --disk path=/vm/chensiqi.qcow2 \ #虚拟磁盘路径 > --vcpus=1 --ram=1024 \ #分配的CPU和内存大小 > --cdrom=/iso/CentOS-6.5-x86_64-bin-DVD1.iso \ #系统安装盘位置 > --network network=default \ #网络模式,default为NAT > --graphics vnc,listen=0.0.0.0 \ #虚拟机的显示类型为VNC > --os-type=linux \ > --os-variant=rhel6
执行上边的命令就会弹出Virt Viewer的窗口,进入装机界面
没有virtio的全虚拟化的设备访问路径以下图所示:
拥有virtio的全虚拟化的设备访问路径以下图所示:
- [x] 若是VM中安装了QEMU guest agent,Host就可使用libivrt向VM发送命令,例如“冻结”,“释放”文件系统,虚拟CPU的热添加及移除等。
- [x] RHEL/CetnOS7中有相应的安装包。qemu-guest-agent-xxx.rpm
- [x] Windows须要手工安装
#这个管理包已经安装 [root@localhost ~]# rpm -qa | grep qemu-guest-agent qemu-guest-agent-2.5.0-3.el7.x86_64 [root@localhost ~]# which virsh /usr/bin/virsh
经过libvirt来使用QEMU guest agent
libvirtd是一个守护进程,virsh,virt-install等等都是依靠这个守护进程来间接访问qemu-kvm及配置文件。若是咱们关闭这个进程,那么virsh,virsh-install,virt-manager就都不能访问了。(同窗们能够试一下)
[root@localhost ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 3 centos6.5-2 running 14 vm2 running - centos6.5 关闭
[root@localhost ~]# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来得到命令的帮助信息 'quit' 退出 virsh # list --all Id 名称 状态 ---------------------------------------------------- 3 centos6.5-2 running 14 vm2 running - centos6.5 关闭 virsh #
virsh所支持的命令有不少,建议同窗们从virsh的帮助里查看
[root@localhost ~]# virsh --help virsh [options]... [<command_string>] virsh [options]... <command> [args...] options: -c | --connect=URI hypervisor connection URI -d | --debug=NUM debug level [0-4] -e | --escape <char> set escape sequence for console -h | --help this help -k | --keepalive-interval=NUM keepalive interval in seconds, 0 for disable -K | --keepalive-count=NUM number of possible missed keepalive messages -l | --log=FILE output logging to file -q | --quiet quiet mode -r | --readonly connect readonly -t | --timing print timing information -v short version -V long version --version[=TYPE] version, TYPE is short or long (default short) commands (non interactive mode): **如下省略若干字**
命令 | 概述 |
---|---|
attach-device | 使用XML文件中的设备定义在虚拟机中添加设备 |
attach-disk | 在虚拟机中附加新磁盘设备 |
attach-interface | 在虚拟机中附加新网络接口 |
create | 从XML配置文件生成虚拟机并启动新虚拟机 |
define | 为虚拟机输出XML配置文件 |
destroy | 强制虚拟机中止 |
detach-device | 从虚拟机中分离设备,使用一样的XML描述做为命令attach-device |
detach-disk | 从虚拟机中分离磁盘设备 |
detach-interface | 从虚拟机中分离网络接口 |
domblkstat | 显示正在运行的虚拟机的块设备统计 |
domid | 显示虚拟机ID |
domifstat | 显示正在运行的虚拟机的网络接口统计 |
dominfo | 显示虚拟机信息 |
domname | 显示虚拟机名称 |
domstate | 显示虚拟机状态 |
domuuid | 显示虚拟机UUID |
dumpxml | 输出虚拟机XML配置文件 |
help | 打印基本帮助信息 |
list | 列出全部虚拟机 |
migrate | 将虚拟机迁移到另外一台主机中 |
nodeinfo | 有关管理程序的输出信息 |
quit | 退出这个互动终端 |
reboot | 从新启动虚拟机 |
restore | 恢复之前保存在文件中的虚拟机 |
resume | 恢复暂停的虚拟机 |
save | 将虚拟机当前状态保存到某个文件中 |
setmaxmem | 为管理程序设定内存上限 |
setmem | 为虚拟机设定分配的内存 |
setvcpus | 修改成虚拟机分配的虚拟CPU数目 |
shutdown | 关闭某个虚拟机 |
start | 启动未激活的虚拟机 |
suspend | 暂停虚拟机 |
undefine | 删除与虚拟机关联的全部文件 |
vcpuinfo | 显示虚拟机的虚拟CPU信息 |
vcpupin | 控制虚拟机的虚拟CPU亲和性 |
version | 显示virsh版本 |
(1)经过命令开启和关闭虚拟机
#交互模式管理虚拟机
#启动虚拟机
[root@localhost ~]# virsh #进入交互模式
欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来得到命令的帮助信息 'quit' 退出 virsh # list #显示全部启动状态的虚拟机 Id 名称 状态 ---------------------------------------------------- 3 centos6.5-2 running 14 vm2 running virsh # list --all #显示全部虚拟机 Id 名称 状态 ---------------------------------------------------- 3 centos6.5-2 running 14 vm2 running - centos6.5 关闭 virsh # start centos6.5 #启动名称为centos6.5的虚拟机 域 centos6.5 已开始 virsh # list --all Id 名称 状态 ---------------------------------------------------- 3 centos6.5-2 running 14 vm2 running 15 centos6.5 running #已经启动了 #关闭虚拟机 virsh # shutdown 14 #shutdown优雅的关闭计算机,但有时咱们这样关闭不了 域 14 被关闭 virsh # list --all Id 名称 状态 ---------------------------------------------------- 3 centos6.5-2 running 14 vm2 running #仍旧在运行 - centos6.5 关闭 virsh # destroy 14 #destroy强制关闭虚拟机 域 14 被删除 virsh # list --all Id 名称 状态 ---------------------------------------------------- 3 centos6.5-2 running - centos6.5 关闭 - vm2 关闭 #被强制关闭了。
(2)经过命令来设定虚拟机的主机开启自动引导启动
关于主机开机引导时是否自动启动虚拟机,咱们能够经过虚拟机的图形界面或者命令来设置,图形界面设置方式以下图所示:
[root@localhost ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 1 vm2 running #设置主机开机自动引导后,重启咱们发现虚拟机自动开启 - centos6.5 关闭 - centos6.5-2 关闭
咱们经过命令来控制虚拟机的开机自动引导
[root@localhost ~]# virsh 欢迎使用 virsh,虚拟化的交互式终端。 输入:'help' 来得到命令的帮助信息 'quit' 退出 virsh # help autostart #查看autostart的帮助 NAME autostart - 自动开始一个域 SYNOPSIS autostart <domain> [--disable] DESCRIPTION 设置一个域在启动时自动开始. OPTIONS [--domain] <string> 域名,id 或 uuid #能够经过域名,id或uuid来控制 --disable 禁止自动启动 virsh # list --all Id 名称 状态 ---------------------------------------------------- 1 vm2 running - centos6.5 关闭 - centos6.5-2 关闭 virsh # autostart centos6.5 #开启虚拟机的开机自引导 域 centos6.5标记为自动开始 virsh # autostart centos6.5 --disable #关闭虚拟机开机自引导 域 centos6.5取消标记为自动开始 virsh # autostart centos6.5 域 centos6.5标记为自动开始
重启主机后,咱们发现虚拟机已经能够自动启动
[root@localhost ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 1 vm2 running 2 centos6.5 running - centos6.5-2 关闭
(3)经过命令进行虚拟机的暂停和唤醒
[root@localhost ~]# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:'help' 来得到命令的帮助信息 'quit' 退出 virsh # help suspend #查看命令帮助 NAME suspend - 挂起一个域 SYNOPSIS suspend <domain> DESCRIPTION 挂起一个运行的域。 OPTIONS [--domain] <string> 域名,id 或 uuid virsh # list --all Id 名称 状态 ---------------------------------------------------- 1 vm2 running 2 centos6.5 running - centos6.5-2 关闭 virsh # suspend vm2 #暂停虚拟机 域 vm2 被挂起 virsh # list --all Id 名称 状态 ---------------------------------------------------- 1 vm2 暂停 #成功 2 centos6.5 running - centos6.5-2 关闭 virsh # resume vm2 #唤醒虚拟机 域 vm2 被从新恢复 virsh # list --all Id 名称 状态 ---------------------------------------------------- 1 vm2 running 2 centos6.5 running - centos6.5-2 关闭