#查看是否支持虚拟化
[root@kvm1 ~]# egrep 'vmx|svm' /proc/cpuinfo |wc -l
8
#libvirt安装
#libvirt,提供hypervisor及虚机管理的API
#virt-install,虚拟机安装工具,rhel中,叫python-virtinst
#bridge-utils,linux网桥管理工具包,复制桥接网络的管理
#virt-manager,图形化管理工具
[root@kvm1 ~]# yum install -y libvirt libvirt-client virt-install virt-manager qemu-kvm
#启动libvirt守护进程
[root@kvm1 ~]# systemctl start libvirtd
[root@kvm1 ~]# systemctl enable libvirtd
1、nat
libvirt默认使用了一个名为default的nat网络,这个网络默认使用virbr0作为桥接接口,使用dnsmasq来为使用nat网络的虚拟机提供dns及dhcp服务,dnsmasq生效后的配置文件默认保存在以下路径:
#mac&&ip绑定的配置文件
/var/lib/libvirt/dnsmasq/default.hostsfile
#dhcp分配到虚拟机的ip地址列表
/var/lib/libvirt/dnsmasq/default.leases
#default网络的配置文件
/etc/libvirt/qemu/networks/default.xml
#查看
virsh net-list
virsh net-dumpxml default
2、bridge
#安装工具
[root@kvm1 ~]# yum install -y bridge-utils
#查看linux桥
[root@kvm1 ~]# brctl show
#创建一个网桥及配置文件
[root@kvm1 ~]# nmcli connection add type bridge con-name br0 ifname br0
#查看配置文件
[root@kvm1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=dhcp
NAME=br0
DEVICE=br0
ONBOOT=yes
#将物理网卡桥接到网桥,直接更改两个配置文件
#IP地址在网桥接口上配置
[root@kvm1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
BRIDGE=br0
TYPE=Ethernet
NAME=eth0
DEVICE=eth0
ONBOOT=yes
[root@kvm1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=10.0.0.100
PREFIX=24
GATEWAY=10.0.0.2
DNS1=114.114.114.114
#重启网卡
[root@kvm1 ~]# systemctl restart network
#可以查看到IP地址绑定在了网桥接口br0上
[root@kvm1 ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c:29ff:fe3a:29e6 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:3a:29:e6 txqueuelen 1000 (Ethernet)
RX packets 650 bytes 33885 (33.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 86 bytes 10852 (10.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:3a:29:e6 txqueuelen 1000 (Ethernet)
RX packets 82880 bytes 101862490 (97.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 28832 bytes 2583300 (2.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3、配置存储池
#查看现有的存储池
virsh pool-list --all
#发现会有一个默认的存储池default,就是/var/lib/libvirt/images
4、创建磁盘
#默认创建的文件在:/var/lib/libvirt/images
[root@kvm1 ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/centos7-yzl.qcow2 10G
Formatting '/var/lib/libvirt/images/centos7-yzl.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
[root@kvm1 ~]# ll -h /var/lib/libvirt/images/centos7-yzl.qcow2
-rw-r--r-- 1 root root 193K Jul 5 09:18 /var/lib/libvirt/images/centos7-yzl.qcow2
#把iso文件上传到/usr/local/src/
[root@kvm1 ~]# ls /usr/local/src/
CentOS-7-x86_64-DVD-2003.iso
5.1、virt-manager 创建虚机
5.2、virt-install 创建虚机
选项:
# --noautoconsole,不自动连接到虚机控制台。默认行为是调用一个 VNC 客户端显示 图形控制台,或者运行 “virsh” “console”命令显示文本控制台。
# --import,跳过操作系统安装过程,围绕一个存在的磁盘映像建立客户机。引导使用的 设备是通过”–disk” or “–file”指定的第一个设备。
# --vnc,在客户机中设置一个虚拟控制台并且将其导出为一个 VNC 服务。除非”–vncpo rt” 参数也已提供,VNC 服务将运行在 5900 或其之上第一个未用的端口号。实际的 V NC 显示,可以使用”virsh”的”vncdisplay”命令(或者使用 virt-viewer 处理这个细节)
# --vncport=VNCPORT,为客户机 VNC 控制台请求一个永久、静态的指定端口号。当其 他客户机自动选择端口号时不鼓励使用此选项,因为可能产生冲突。
#安装虚机vm01
#创建一个虚机,1G内存,2个CPU,10G磁盘,网络桥接到br0,并将ISO文件加载到光驱
#默认会创建磁盘镜像,放在/var/lib/libvirt/images目录下
[root@kvm1 ~]# virt-install --virt-type kvm --name vm01 --ram 1024 --vcpus 2 --cdrom=/usr/local/src/CentOS-7-x86_64-DVD-2003.iso --disk path=/var/lib/libvirt/images/centos7-yzl.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm1 ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/cent7-yzl.qcow2 30G
Formatting '/var/lib/libvirt/images/cent7-yzl.qcow2', fmt=qcow2 size=32212254720 encryption=off cluster_size=65536 lazy_refcounts=off
#虚机vm01
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=10.0.0.120
GATEWAY=10.0.0.2
PREFIX=24
DNS1=114.114.114.114
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=386e1e45-306b-4639-adae-e3220e04d6ad
DEVICE=eth0
ONBOOT=yes
[root@localhost ~]#