一、什么是虚拟化
最常见的VMware Workstation Pro、Oracle VM VirtualBox就是可以实现虚拟化的软件。虚拟化,把一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,这样就可以充分利用硬件资源。
虚拟化技术分为:全虚拟化和半虚拟化。
·早期的CPU硬件不支持虚拟化,虚拟机上的操作系统(guestos)想要使用cpu资源,需要通过VMM(Hypervisor,虚拟机管理器)来翻译指令,这个过程比较耗费资源,这种虚拟化技术叫做全虚拟化。
·半虚拟化技术,通过修改guestos内核,让guestos可以直接使用cpu资源,而不需要翻译指令了,从而节省了资源,但修改内核比较鸡肋(XEN)。
现在的CPU基本直接支持虚拟化,不需要通过VMM翻译指令了,也就无所谓半虚拟化和全虚拟化了。
二、KVM(Kernel-bases Virtual Machine)
结构简单,包含两个部分:
·设备驱动/dev/kvm
·针对模拟PC硬件的用户控件组件
·KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化的CPU上运行,即具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU。
三、KVM虚拟化特性
·嵌入到Linux内核中(提高兼容性)
·代码级资源调用(提高性能)
·虚拟机就是一个进程(内存易于管理)
·直接支持NUMA技术(提高扩展性)
·Red Hat收购了KVM
·保持开源发展模式
·更好的商业支持及服务保障
四、RHEL7.0安装KVM
实验环境:RHEL7.0 RAM:4G ip:192.168.10.201 主机名:node1
所需软件:虚拟机VMware Workstation 14 Pro、TightVNC
实验关闭防火墙和SELinux
0、查看是否cpu支持虚拟化
[root@node1 ~]# grep -E ‘(vmx|svm)’ /proc/cpuinfo
1、安装kvm相关包
kvm是内核的一个模块,模块只需调用即可。
[root@node1 ~]# yum install -y qeum-kvm qemu-kvm-tools virt-manager libvirt virt-install
或者yum install -y virt-* libvirt bridge-utils qemu-img
2、创建硬盘
[root@node1 ~]# qemu-img create -f raw /opt/rhel-7.0-x86_64.raw 10G
-f:格式,这里使用raw格式
/opt/rhel-7.0-x86_64.raw:磁盘存放路径
10G:磁盘的大小
3、启动libvirtd服务
查看kvm模块:[root@node1 ~]# lsmod | grep kvm
启动libvirtd服务:[root@node1 ~]# systemctl start libvirtd
设置开机启动:[root@node1 ~]# systemctl enable libvirtd
4、准备rhel7.0 ISO镜像。
4.1、准备rhel7.0的光盘
设置完成之后,光盘放在/dev/cdrom中
4.2、制作iso镜像
[root@node1 ~]# dd if=/dev/cdrom of=/opt/rhel-7.0.iso
7311360+0 records in
7311360+0 records out
3743416320 bytes (3.7 GB) copied, 169.061 s, 22.1 MB/s
5、图形化安装
[root@node1 ~]# virt-install –name mykvm-rhel-7.0 –virt-type kvm –ram 1024 –cdrom=/opt/rhel-7.0.iso –disk path=/opt/rhel-7.0-x86_64.raw –network network=default –graphics vnc,listen=0.0.0.0 –noautoconsole
报错:ERROR Error in network device parameters: Virtual network ‘default’ does not exist: Network not found: no network with matching name ‘default’
默认网络不存在
解决方法:查找一个跟libvirt相关的default文件
[root@node1 ~]# find / -name “default.xml”
设置default网络:
[root@node1 ~]# virsh net-define /usr/share/libvirt/networks/default.xml
[root@node1 ~]# virsh net-start default
重新运行安装命令:
6、打开TightVNC
TightVNC下载地址:http://www.tightvnc.com/download.php
输入远程主机:192.168.10.201:5900
然后连接。进入非常熟悉的图形化安装界面:
如果要设置网卡名字为et0的话,选择第一项安装的时,再按Tab键,输入:net.ifnames=0 biosdevname=0
然后按回车键
如果不需要修改网卡名,则选择Install Red Hat Enterprise Linux 7.0直接按回车键进入系统安装。这里使用默认的,不修改网卡名。
安装过程略。
这个虚拟机的XML放在/etc/libvirt/qemu/目录中
[root@node1 qemu]# ls /etc/libvirt/qemu
mykvm-rhel-7.0.xml networks
五、KVM管理
·查看所有虚拟机:[root@node1 ~]# virsh list –all
·启动虚拟机:[root@node1 ~]# virsh start mykvm-rhel-7.0
·编辑虚拟机:[root@node1 ~]# virsh edit mykvm-rhel-7.0
可以根据实际情况修改这个配置文件。
1、修改CPU(只能在7.x版本),当前是1,最大是4
<vcpu placement=’auto’ current=”1″>4</vcpu>
修改配置需要虚拟机重启才能生效。
重启:关闭再启动
[root@node1 ~]# virsh shutdown mykvm-rhel-7.0
Domain mykvm-rhel-7.0 is being shutdown
[root@node1 ~]# virsh start mykvm-rhel-7.0
Domain mykvm-rhel-7.0 started
设置2个cpu:
[root@node1 ~]# virsh setvcpus mykvm-rhel-7.0 2
用TightVNC登录虚拟机,然后激活cpu
echo 1 > /sys/devices/system/cpu/cpu1/online
查看一下:
只支持热添加,不能热减少。
2、修改内存:
[root@node1 ~]# virsh edit mykvm-rhel-7.0
<memory unit=’KiB’>2048576</memory>
重启后:
查看当前内存:
[root@node1 ~]# virsh qemu-monitor-command mykvm-rhel-7.0 –hmp –cmd info balloon
balloon: actual=1024
修改内存为600M:
[root@node1 ~]# virsh qemu-monitor-command mykvm-rhel-7.0 –hmp –cmd balloon 600
3、硬盘
全镜像模式:raw
稀疏模式:qcow2
[root@node1 ~]# qemu-img –help
Supported formats: vvfat vpc vmdk vhdx vdi sheepdog sheepdog sheepdog raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd nbd nbd iscsi gluster gluster gluster gluster dmg cow cloop bochs blkverify blkdebug
硬盘支持的格式
4、网络设置
4.1在node1中添加网桥
[root@node1 ~]# brctl addbr br0
4.2将node1的eno16777736网卡添加到br0中
[root@node1 ~]# brctl addif br0 eno16777736
4.3配置br0、eno16777736网卡
复制/etc/sysconfig/network-script/目录中的ifcfg-eno16777736文件,命名为ifcfg-br0
[root@node1 network-scripts]# cp ifcfg-eno16777736 ifcfg-br0
编辑ifcfg-br0,其内容为:
TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR0=192.168.10.201
PREFIX0=24
GATEWAY0=192.168.10.2
DNS1=119.29.29.29
DNS2=182.254.116.116
编辑ifcfg-eno16777736文件,其内容:
DEVICE=eno16777736
NAME=eno16777736
ONBOOT=yes
BRIDGE=br0
之后重启网络: # systemctl restart network
如果重启网络失败,就重启机子。
如果是临时配置,上面步骤4.2、4.3的操作可以使用一条命令完成:
[root@node1 ~]# brctl addif br0 eno16777736 && ip addr del dev eno16777736 192.168.10.201/24 && ifconfig br0 192.168.10.201/24 up && route add default gw 192.168.10.2
这是临时配置,机子重启后失效。建议还是修改配置文件可以永久保存的
5、从node1中登录kvm虚拟机
5.1配置console:
修改/etc/default/grub,把GRUB_CMDLINE_LINUX_DEFAULT这一行添加:console=ttyS0
保存退出
更新grub2:
[root@node1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
重启。
5.2登录:
重启之后,得运行虚拟机才可以登录。
[root@node1 ~]# systemctl start serial-getty@ttyS0
[root@node1 ~]# virsh start mykvm-rhel-7.0
[root@node1 ~]# virsh console mykvm-rhel-7.0
进入系统登录界面:
6、删除虚拟机
先停止虚拟机,再删除:virsh undefine 名称
Ctrl+]:可以从kvm虚拟机中退出。
补充:RHEL7.3非图形化安装kvm
实验环境:rhel7.3,主机名:node2,ip:192.168.10.202
1、安装kvm包
#yum install -y virt-* libvirt bridge-utils qemu-img
2、磁盘挂载
添加一块硬盘用于安装kvm虚拟机,格式化为ext4,挂载到/kvm_data目录。事先创建好/kvm_data目录。
3、准备iso镜像
3.1编辑虚拟机设置,选择下载好的rhel7.3 iso镜像
3.2使用dd命令制作iso镜像,放在/tmp目录中
#dd if=/dev/cdrom of=/tmp/ rhel7.3.iso
4、网络设置
将复制一份ifcfg-ens33文件,名字为ifcfg-br0
[root@node2 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-br0
ifcfg-ens33文件的内容为:
NAME=”ens33″
DEVICE=”ens33″
ONBOOT=yes
BOOTPROTO=none
BRIDGE=br0
ifcfg-br0文件的内容为:
NAME=”br0″
DEVICE=”br0″
ONBOOT=yes
NETBOOT=yes
BOOTPROTO=static
TYPE=Bridge
IPADDR=192.168.10.202
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
DNS1=119.29.29.29
DNS2=114.114.114.114
配置好ifcfg-ens33、 ifcfg-br0文件之后重启网络
[root@node2 ~]# systemctl restart network
5、安装
[root@node2 ~]# virt-install –name=kvm01 –virt-type kvm –memory=512,maxmemory=1024 –vcpus=1,maxvcpus=2 –os-type=linux –os-variant=rhel7.3 –location=/tmp/rhel7.3.iso –disk path=/kvm_data/kvm01.img,size=10 –bridge=br0 –graphics=none –console=pty,target_type=serial –extra-args=”console=tty0 console=ttyS0″
等待一会,进入以下界面:
·设置时区:输入2,按回车键,输入1,按回车键,输入5
输入5,按回车键,
输入62,按回车键
·磁盘设置:
输入5,按回车键,进入:
输入c,按回车键,进入:
输入c,按回车键,进入:
输入1,按回车键,再输入c,按回车键。
·设置root密码
输入8,按回车键,进入:
设置好密码,之后输入yes,按回车键。回到主页面:
输入b,按回车键,开始安装系统。
等待几分钟之后,安装完成:
按回车键,系统将重启。不单kvm的虚拟机重启,就连实验机(node2)也跟着重启。node2重启后,远程ssh登录。
查看kvm虚拟机:
启动虚拟机:
[root@node2 ~]# virsh start kvm01
Domain kvm01 started
连接虚拟机:
[root@node2 ~]# virsh console kvm01
Connected to domain kvm01
Escape character is ^]
卡在这里。
解决方法:修改/etc/default/grub.cfg文件,如下图所示,在文件GRUB_CMDLINE_LINUX_DEFAUL这一行中添加console=ttyS0
[root@node2 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@node2 ~]# init 6
重启之后,启动kvm虚拟机,并连接
[root@node2 ~]# virsh start kvm01
Domain kvm01 started
连接虚拟机:
[root@node2 ~]# virsh console kvm01
输入root和密码,按回车键进入系统。
配置网络:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改内容如上图所示。
因为宿主机的ip网段是:192.168.10.0,并且使用了桥连方式,所以kvm里面的虚拟机的ip必须在192.168.10.0网段中。
重启网络:[root@localhost ~]# systemctl restart network
ping www.baidu.com
OK网络正常了。
至此。kvm安装系统成功。
Ctrl+]:可以退出kvm虚拟机。
使用VNC连接KVM虚拟机的方法:
1、修改宿主机的qemu配置
[root@node2 ~]# vim /etc/libvirt/qemu.conf
将#vnc_listen = “0.0.0.0”的#去掉,如下图所示:
保存退出。
2、由于安装的时候没有启用图形界面,所以的修改kvm01机子的配置
[root@node2 ~]# virsh edit kvm01
添加以下内容:
<graphics type=’vnc’ port=’5900′ autoport=’no’ listen=’0.0.0.0′>
<listen type=’address’ address=’0.0.0.0’/>
</graphics>
如下图所示:
保存退出。
关闭kvm01机子再开启。
并且宿主机node2清空防火墙,关闭selinux。
如果不清空或关闭防火墙,不关闭selinux,则:
设置防火墙规则和selinux:
·防火墙设置:
[root@node2 ~]# firewall-cmd –permanent –add-port=5900/tcp
[root@node2 ~]# firewall-cmd –reload
·SELinux设置:
[root@node2 ~]# semanage port -a -t http_port_t -p tcp 5900
如果semanage命令不存在,则装selinu相关包:
[root@node2 ~]# yum install setools* policycoreutils* -y
3、打开TightVNC
输入ip:端口,点击Connect即可。
输入root和密码即可登录系统。