KVM虚拟化
KVM安装
1、环境准备
CentOs7 联网 内存最好在20G不上 windows支持虚拟化
虚拟机开启虚拟化配置
2、系统环境
1 [root@ CentOS7-200 ~]# cat /etc/redhat-release 2 CentOS Linux release 7.3.1611 (Core) 3 4 [root@ CentOS7-200 ~]# uname -r 5 3.10.0-514.el7.x86_64 6 7 [root@ CentOS7-200 ~]# getenforce 8 Disabled 9 10 [root@ CentOS7-200 ~]# systemctl stop firewalld.service
CentOS7内置到系统内核,无需内核
[root@ CentOS7-200 ~]# egrep -o '(vmx|svm)' /proc/cpuinfo
检查CPU是否开启虚拟化
安装kvm用户模块
yum install qemu-kvm qemu-kvm-tools libvirt -y
libvirt 用来管理kvm kvm属于内核态,不需要安装。但是需要一些类似于依赖的
启动libvirt
systemctl start libvirtd.service
systemctl enable libvirtd.service
启动之后我们可以使用ifconfig进行查看,libvirtd已经为我们安装了一个桥接网卡
[root@ linux ~]# ip a 5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:a5:70:e9 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
3、创建虚拟机
步骤:
1)准备虚拟机硬盘
2)需要系统iso镜像
3)需要安装一个vnc的客户来连接
宿主机为本地的名称,kvm虚机是
[root@localhost ~]#
4、上传镜像
使用dd命令,复制系统的镜像,只需要挂载上光盘即可
[root@ linux ~]# cd /opt/ [root@ linux opt]# dd if=/dev/cdrom of=/opt/CentOS-7-x86_64-Minimal-1810.iso
5、创建磁盘
qemu-img软件包是安装quem-kvm-tools依赖给安装上的
[root@ linux opt]# qemu-img create -f qcow2 /opt/c73.qcow2 6G [root@ linux opt]# ll total 4277444 -rw-r--r-- 1 root root 4379901952 Apr 24 14:42 CentOS-7-x86_64-Minimal-1810.iso -rw-r--r-- 1 root root 197120 Apr 24 14:43 c73.qcow2
-f 制定虚拟机格式
/opt/Centos 存放路径
6G 代表镜像大小
6、安装虚拟机
[root@ linux opt]# yum install -y virt-install [root@ linux opt]# virt-install --virt-type=kvm --name=c73 --vcpus=1 -r 1024 --cdrom=/opt/CentOS-7-x86_64-Minimal-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --disk path=/opt/c73.qcow2,size=6,format=qcow2 #默认连接端口是从5900开始的 [root@ CentOS7-200 opt]# virsh list --all Id Name State ---------------------------------------------------- 3 c73 running [root@ CentOS7-200 opt]# netstat -lntup|grep 5900 tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 8440/qemu-kvm
virt-install常用参数
1.-n --name= 客户端虚拟机名称 2.-r --ram= 客户端虚拟机分配的内存 3.-u --uuid= 客户端UUID 默认不写时,系统会自动生成 4.--vcpus= 客户端的vcpu个数 5.-v --hvm 全虚拟化 6.-p --paravirt 半虚拟化 7.-l --location=localdir 安装源,有本地、nfs、http、ftp几种,多用于ks网络安装 8.--vnc 使用vnc ,另有--vnclient=监听的IP --vncport =VNC监听的端口 9.-c --cdrom= 光驱 安装途径 10.--disk= 使用不同选项作为磁盘使用安装介质 11.-w NETWORK, --network=NETWORK 连接客户机到主机网络 12.-s --file-size= 使用磁盘映像的大小 单位为GB 13.-f --file= 作为磁盘映像使用的文件 14.--cpuset=设置哪个物理CPU能够被虚拟机使用 15.--os-type=OS_TYPE 针对一类操作系统优化虚拟机配置(例如:‘linux’,‘windows’) 16.--os-variant=OS_VARIANT 针对特定操作系统变体(例如’rhel6’, ’winxp’,'win2k3')进一步优化虚拟机配置 17.--host-device=HOSTDEV 附加一个物理主机设备到客户机。HOSTDEV是随着libvirt使用的一个节点设备名(具体设备如’virsh nodedev-list’的显示的结果) 18.--accelerate KVM或KQEMU内核加速,这个选项是推荐最好加上。如果KVM和KQEMU都支持,KVM加速器优先使用。 19.-x EXTRA, --extra-args=EXTRA 当执行从"--location"选项指定位置的客户机安装时,附加内核命令行参数到安装程序 20.--nographics "virt-install" 将默认使用--vnc选项,使用nographics指定没有控制台被分配给客户机
7、vnc连接虚拟机
安装CentOS7 系统
注意:如果查看5900端口开启,但是VNC无法连接KVM虚拟机时,看下防火墙是否开启。创建的虚机用VNC连接时从默认端口5900开始,即虚机一:192.168.37.144:5900 虚机二:192.168.37.144:5901
安装完启动,并查看端口
[root@ linux opt]# virsh list --all Id Name State - c73 shut off [root@linux opt]# virsh start c73
#c73 是虚拟机的名字,是我们创建的时候定义的
常用的virsh管理命令
列出所有的虚拟机 virsh list --all 显示虚拟机信息 virsh dominfo c73 列出ID为6的虚拟机名 virsh domname 6 显示虚拟机内存和cpu的使用情况 virt-top 关闭虚拟机 virsh shutdown c73 强制关闭虚拟机 virsh destroy c73 启动虚拟机 virsh start c73 设置虚拟机随系统自启 virsh autostart c73 关闭虚拟机随系统自启 virsh autostart --disable c73 删除虚拟机 virsh undefine c73 通过控制窗口登录虚拟机 virsh console c73 挂起$hostname虚拟机 virsh suspend c73 恢复挂起的虚拟机 virsh resume c73 查看网卡配置信息 virsh domiflist c73 查看该虚拟机的磁盘位置 virsh domblklist c73 查看KVM虚拟机当前配置 virsh dumpxml c73
8、桥接配置
(建议先配置宿主机桥接网络→创建虚机)
[root@ linux ~]# brctl show bridge name bridge id STP enabled interfaces virbr0 8000.5254005f3794 yes virbr0-nic #生成这个
9、查看物理网卡配置
[root@linux ~]# ifconfig virbr0 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:86:9b:5b txqueuelen 1000 (Ethernet) RX packets 41 bytes 1468 (1.4 KiB) 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
配置桥接设备br0
yum -y install bridge-utils
1)手动添加临时生效
[root@ linux ~]# brctl addbr br0 [root@ linux ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000000000000 no docker0 8000.0242e20b14dc no virbr0 8000.5254005f3794 yes virbr0-nic [root@ CentOS7-200 ~]# brctl addif br0 ens33 执行此步后,会导致xshell与宿主机断开连接,以下操作在宿主机完成. 删除ens33上面的ip地址,将br0上面添加上固定ip地址: [root@ linux ~]# ip addr del dev ens33 10.0.0.200/24 //删除ens33上的IP地址 [root@ linux ~]# ifconfig br0 10.0.0.200/24 up //配置br0的IP地址并启动设备 [root@ linux ~]# route add default gw 10.0.0.254 //重新加入默认网关 连接xshell查看是否生效 [root@ linux ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.0.254 0.0.0.0 UG 0 0 0 br0 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 172.16.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens37 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 [root@linux ~]# ifconfig br0 br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.200 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::20c:29ff:fe0e:41a prefixlen 64 scopeid 0x20<link> ether 00:0c:29:0e:04:1a txqueuelen 1000 (Ethernet) RX packets 44264 bytes 33757615 (32.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 31974 bytes 49194899 (46.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@ linux ~]# ping www.baidu.com PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data. 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=128 time=4.95 ms 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=128 time=4.19 ms 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=128 time=6.30 ms ^C --- www.a.shifen.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 4.194/5.151/6.301/0.872 ms
此时宿主机的ip:192.168.37.144已经绑定到br0网卡;但是服务器重启后就不能生效。
2)配置文件配置桥接设备永久生效
为KVM宿主机创建虚拟网卡,并将物理网卡作为桥设备
[root@ linux ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 . [root@ linux opt]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 DEVICE=ens33 TYPE=Ethernet ONBOOT=yes BRIDGE=br0 NM_CONTROLLED=no [root@ linux opt]# vim /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=10.0.0.200 NETMASK=255.255.255.0 GATEWAY=10.0.0.254 NM_CONTROLLED=no [root@ linux opt]# systemctl restart network.service
3)通过vnc链接kvm虚机修改网卡配置
[root@ linux ~]# virsh list --all Id Name State ---------------------------------------------------- - c73 running [root@ linux ~]# systemctl stop firewalld.service [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 DEVICE=ens33 TYPE=Ethernet BOOTPROTO=static ONBOOT=yes IPADDR=192.168.47.144 PREFIX=24 GATEWAY=192。168.37.2 DNS1=223.5.5.5 此处配置后则不需要手动添加/etc/resolv.conf DNS2=1.1.1.1 [root@localhost ~]# vim /etc/resolv.conf #必须有否则xshell连不上 nameserver 223.5.5.5
还有一个是下面添加 223.6.6.6
[root@localhost ~]# ifup ens33
注意:此时宿主机还需要通过图形化工具设置网卡为桥接方式,否则无法ping通网关和外网。
二、kvm图形管理工具(virt-manager)
virt-manager是用于管理KVM虚拟环境的主要工具,virt-manager默认设置下需要使用root用户才能够使用该工具。当你想在KVM hypervisor服务器上托管虚拟机,由最终用户而非root用户访问这些虚拟机时并不总是很便利。 virt-manager可以设置本机,同样也可以连接远程宿主机来管理。 利用virt-manager、xmanager、xshell启动界面来管理虚拟机,适合管理单机的KVM.
1、查看sshd是否开启x11转发
[root@ linux~]# grep X11Forwarding /etc/ssh/sshd_config --colour
X11Forwarding yes
# X11Forwarding no
2、安装xorg-x11
yum install -y xorg-x11-font-utils.x86_64 xorg-x11-server-utils.x86_64 xorg-x11-utils.x86_64 xorg-x11-xauth.x86_64 xorg-x11-xinit.x86_64 xorg-x11-drv-ati-firmware
3、安装libvirt
libvirt是管理虚拟机的API库,不仅支持KVM虚拟机,也可以管理Xen等方案下的虚拟机。
yum install virt-manager libvirt libvirt-Python python-virtinst libvirt-client virt-viewer qemu-kvm mesa-libglapi -y
因为我的主机是服务器,没有图形化界面,想要用virt-manager图形化安装虚拟机,还需要安装X-window。
yum install libXdmcp libXmu libxkbfile xkeyboard-config xorg-x11-xauth xorg-x11-xkb-utils -y
开启libvirt服务
systemctl start libvirtd.service
systemctl enable libvirtd.service
4、配置xshell
5、启动virt-manager
断开xshell会话,重新连接,输入命令:virt-manager,就可以自动弹出kvm管理软件
virt-manager
出现乱码的话,安装以下包
yum install dejavu-sans-mono-fonts -y
centos5,6 网卡昵称默认为eth0,eth1
centos7 网卡昵称默认为ens33,ens37