KVM部署
1.虚拟化支持
KVM虚拟化需要CPU的硬件辅助虚拟化的支持,用来加速,在本环境中为Intel的CPU,使用的Intel VT技术。(目前前主流的CPU都支持虚拟化技术,但是有些电脑的bios出厂时是默认cpu虚拟化是关闭的,,该功能在有些主机里面可能需要去BIOS里面开启)
在这里简单介绍一下怎么开启
你开启一台虚拟机的时候会报错:
错误已经很明显了,说明CPU的硬件辅助虚拟化的支持(Intel VT技术)没有开启,就是告诉你让你在BIOS里开启CPU虚拟化支持
开启CPU虚拟化支持:
重启电脑后按F2或F10进入BIOS界面(不同主板型号进入BIOS所需按键不同。自己的电脑自行研究,这里不进行过多介绍)。
示例电脑 :
1.Thinkpad X250进入BIOS界面:开机按F12,按Tab选择app menu,选择Setup回车
如图所示:
2.
进入BIOS,移动光标选择security选项,选择virtualization并回车。注意:若无VT选项或不可更改,则表示你的电脑不支持VT技术。
3.将下面这两项都改成Enabled,按下F10保存即可
注:主板不一样其BISO中显示关键词也不一样的,主要是找到Virtual或Virtualization将其设置为Enabled。
这样CPU的硬件辅助虚拟化的支持就开启了,再打开虚拟机就可以了
5.2 软件准备
操作系统: CentOS 7.2
软件包: CentOS自带yum源
关闭防火墙
关闭SELinux:将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled
sed -i "s/SELINUX=enabled/SELINUX=disabled/g" /etc/sysconfig/selinux
开始安装
5.3 检查CPU虚拟化支持
如果是用vmware workstation的虚拟机做kvm实验的化,需要开启嵌套虚拟化
1.在物理机BIOS设置里开启虚拟化功能
2.此时你的vm仍然不能开启虚拟化,下列两个
需要把它点上,但是你会发现不能点,第一步找到这台虚拟机存在的目录
打开该目录找到 虚拟机名字.vmx结尾的文件,增加一行
5.关闭虚拟机,然后启动,就可以勾选开启虚拟化功能了,打上对勾,注意:先关机,再开机,不能重新启动,否则还是打不开
进入虚拟机后查看虚拟化支持:
grep -E 'svm|vmx' /proc/cpuinfo
vmx 为Intel的CPU指令集
svm 为AMD的CPU指令集
二者存在一个即可正常安装
5.4 安装软件包
[root@localhost ~]# yum -y groupinstall '虚拟化主机'
安装KVM各个软件包
yum -y install qemu-kvm qemu-img libvirt libvirt-client libvirt-python python-virtinst virt-install virt-manager virt-top virt-viewer bridge-utils
KVM各个软件包的及其作用
qemu-kvm:主要的KVM程序包,该软件包主要包含KVM内核模块和基于KVM重构后的QEMU模拟器。KVM模块作为整个虚拟化环境的核心工作在系统空间,负责CPU和内存的调度。QEMU作为模拟器工作在用户空间,负责虚拟机I/O模拟。 qemu-img:主要用来QEMU磁盘镜像的管理,如新建一块磁盘镜像给虚拟机。 libvirt:提供Hypervisor和虚拟机管理的API。 libvirt-client:KVM客户端命令行管理工具virsh,负责虚拟机的启动、停止和管理等。 libvirt-daemon:libvirtd守护进程,作为客户端管理工具跟Hypervisor和虚拟机之间的桥梁。 libvirt-daemon-driver-xxx:从名字来看属于libvirtd服务的驱动文件,作为libvirtd服务跟Hypervisor不同对象(如qemu模拟器,网络,存储等)间的接口。 libvirt-python:python的libvirt库 python-virtinst:创建虚拟机所需要的命令行工具和程序库 virt-install:创建和克隆虚拟机的命令行工具包。 virt-manager:图形界面的KVM管理工具。 virt-top:虚拟机统计命令 virt-viewer:GUI连接程序,连接到已配置好的虚拟机 bridge-utils:网桥管理工具包,负责桥接网络的创建、配置和管理等工作。
[root@controller ~]# lsmod |grep kvm
以上输出说明内核模块加载成功,其中: kvm作为核心模块,协同QEMU实现整个虚拟化环境的正常运行。 kvm_intel作为平台(Intel)独立模块,激活KVM环境的CPU硬件虚拟化支持。
5.5 激活并启动libvirtd服务
systemctl enable libvirtd systemctl start libvirtd
5.10 创建虚拟机
方法一:# virt-manager
针对这种方法,我们可以在服务端部署vncserver,然后用VNC Viewer来连接它的桌面,然后用图形化去创建虚拟机
安装X-Windows图形界面
yum -y groupinstall "X Window System" yum -y install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts
设置默认启动图形界面
unlink /etc/systemd/system/default.target ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
重启
reboot
进入虚拟机验证一下
安装vnc服务
yum install tigervnc-server -y
配置vnc
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
vim /etc/systemd/system/vncserver@\:1.service
修改如下两行内容
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i" PIDFile=/root/.vnc/%H%i.pid
重启systemd
systemctl daemon-reload
为root用户设置密码
vncpasswd
启动VNC并将其加入开机启动
systemctl enable vncserver@:1.service systemctl start vncserver@:1.service
添加防火墙规则,放行vncserver
firewall-cmd --permanent --add-service vnc-server systemctl restart firewalld.service
客户端连接
先下载一个Windows的vnc客户端,https://www.realvnc.com/download/viewer/
打开vncviewer客户端工具,然后访问地址是:服务端ip:1,比如我的访问地址就是:19.168.109:1
打开applications--》System Tools--》Virtual Machine Manager
用本地镜像安装:
这里我事先把镜像传上去了
选择yes
选择内存,直接下一步
选择磁盘大小(这里为了演示,把磁盘给小一些。否则创建不成功有可能。这里给2G)
注意:可能这里创建的时候会报错,关于权限的错误,解决方法就是,重启机器,然后把镜像放到除了/root/下,比如/var下,然后把内存给成512,磁盘给2G(这里是为了演示,生产环境根据实际需求来定).
开始装系统:
直接下一步的安装即可(选个磁盘,设置个root密码就可以了)
安装完成,重启
尝试连接Hypervisor
验证下是否可以上网:
第二种方式:利用命令行安装,设置网络为桥接模式
默认情况下所有虚拟机只能够在host内部互相通信,如果需要通过局域网访问虚拟机,需要创建一个桥接网络。 1.停止NetworkManager服务 # systemctl stop NetworkManager 该服务开启的情况下直接去修改网卡的配置文件会造成信息的不匹配而导致网卡激活不了。 2.修改以太网卡配置文件 (修改前先备份)
# cat ifcfg-eno16777736
DEVICE=eno16777736
BOOTPROTO=static
ONBOOT=yes
BRIDGE=br0
HWADDR=00:0C:29:96:9D:84
NM_CONTROLLED=no
原有的以太网络不需要配置IP地址,指定桥接的网卡设备(如br0)即可。 3.修改桥接网卡配置文件
# cat ifcfg-br0
TYPE=Bridge
HWADDR=00:0C:29:96:9D:84
BOOTPROTO=static
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.8.129
NETMASK=255.255.255.0
GATEWAY=192.168.8.1
DNS1=202.103.24.68
NM_CONTROLLED=no
#桥接网卡的需要配置IP地址,当然也可以用DHCP。需要注意的是桥接网卡br0中DEVICE的名字一定要与以太网卡eno1中BRIDGE对应。
注意:上面写的备份不能再当前目录下面
验证一下网卡:
创建虚拟机:
首先需要创建qcow2格式的虚拟磁盘
qemu-img create -f qcow2 /data/zzl.qcow2 1G
接着运行:
grubby --update-kernel=ALL --args="console=ttyS0" #文本方式控制vm
reboot
创建虚拟机:
virt-install --name test1 --memory 1024 --arch x86_64 --vcpus 2 --os-type linux --os-variant=rhel7 --disk /data/kvm/zzl.qcow2,format=qcow2,size=10,bus=virtio --network bridge=virbr0 --location=/iso/CentOS-7.0-1406-x86_64-DVD.iso --graphics none --console pty,target_type=serial --extra-args 'console=ttyS0,115200n8 serial'
安装的过程中,需要选择时区,安装包选择(最小化),root密码设置,以及网络设置等等。
安装完后进去虚拟机:
验证网络
总结:常用操作
1. 开启子机 virsh start test1 也可以在开启的同时连上控制台 virsh start test1 --console 2. 关闭子机 virsh shutdown test1 (这个需要借助子机上的acpid服务) 另外一种方法是 virsh destroy test1 3. 让子机随宿主机开机自动启动 virsh autostart test1 解除自动启动 virsh autostart --disable test1 4. 列出子机 virsh list //只能列出启动的子机 virsh list --all //可以把所有子机都列出来 5. 删除子机 virsh destroy test1 virsh undefine test1 6. 挂起子机 virsh suspend test1 7. 恢复子机 virsh resume test1 8.退出虚拟机的操作: Ctrl+]键
创建快照:
1.# virsh snapshot-create test1 #创建快照 Domain snapshot 1488780255 created 2.# virsh snapshot-list test1 #列出快照 Name Creation Time State ------------------------------------------------------------ 1488780255 2017-03-06 01:04:15 -0500 running 3.# virsh snapshot-current test1 #查看快照 <domainsnapshot> <name>1488780255</name> ... </domainsnapshot> 4.#ls /var/lib/libvirt/qemu/snapshot/test1/ #快照文件的存放目录 1488780255.xml
调整虚拟机的内存与cpu的大小
7. 调整cpu和内存查看子机配置: virsh dominfo test1 virsh edit test1 修改: <memoryunit='KiB'>524288</memory> <currentMemoryunit='KiB'>524288</currentMemory> <vcpuplacement='static'>2</vcpu> 为: <memoryunit='KiB'>624288</memory> <currentMemoryunit='KiB'>624288</currentMemory> <vcpuplacement='static'>1</vcpu> 重启虚拟机: virsh destroy test1 virsh start test1
不重启可在线添加网卡:
8. 不重启虚拟机在线增加网卡 virsh domiflist test1 查看test1子机的网卡列表 virsh attach-interface test1 --type bridge--source br0 //命令行增加一块网卡 virsh dumpxml test1 >/etc/libvirsh/qemu/test1.xml //命令行增加的网卡只保存在内存中,重启就失效,所以需要保存到配置文件中,其中/etc/libvirsh/qemu/test1.xml 为test1子机的配置文件 virsh console test1 //进入虚拟机后,执行 ifconfig -a 发现多了一个网卡 eth1