文章目录
一、搭建KVM虚拟化平台
1、安装所需软件
解释
[root@localhost ~]# yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt virt-manager //yum安装所需软件 [root@localhost ~]# reboot //重新启动 [root@localhost ~]# cat /proc/cpuinfo | grep vmx //查看CPU是否支持虚拟化(Intel的服务器)AMD服务器可用cat /proc/cpumfo | grep smv命令查看 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc 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 invpcid_single ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc 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 invpcid_single ssbd ibrs ibpb stibp tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec arat md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities [root@localhost ~]# lsmod | grep kvm //检查KVM模块是否安装 kvm_intel 188688 0 kvm 636965 1 kvm_intel irqbypass 13503 1 kvm [root@localhost ~]# systemctl start libvirtd //开启服务 [root@localhost ~]# systemctl enable libvirtd //开机自启动
2、图形化安装KVM虚拟机
解释
[root@localhost ~]# mkdir -p /data_kvm/store /data_kvm/iso //创建存储目录 [root@localhost ~]# cd /data_kvm [root@localhost data_kvm]# ls iso store [root@localhost ~]# cp /media/CentOS-7-x86_64-DVD-1611.iso /data_kvm/iso/ //把镜像上传到服务器目录/data_kvm/iso [root@localhost ~]# virt-manager //启动virt-manager工具
默认存放的路径/var/lib/libvirt/images/
创建存储池
创建镜像存储池
创建存储卷
新建虚拟机
3、使用命令安装 KVM 虚拟机
1、使用 virt-install 安装
第一种方法
[root@localhost ~]# virt-install --os-type=linux --os-variant centos7.0 --name test01 --ram 1024 --vcpus 1 --disk=/kvm_vm/test01.raw,format=raw,size=10 --location /iso/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
第二种方法
解释
[root@localhost ~]# yum -y install tigervnc virt-viewer virt-v2v [root@localhost ~]# systemctl start libvirtd [root@localhost ~]# virt-install --name centos-72 --ram 1024 --vcpus=1 --disk path=/var/lib/libvirt/images/centos-72.img,size=5 --accelerate --cdrom /data_kvm/iso/CentOS-7-x86_64-DVD-1611.iso --network bridge=br0 --graphics vnc [root@localhost ~]# vncviewer 127.0.0.1 //测试远程连接
参数 | 说明 |
---|---|
–name | 指定 Guest 名字 |
–ram | 指定内存大小 |
–vcpus | 指定虚拟机的 CPU 数量 |
–disk | 指定虚拟机磁盘存储文件的路径 |
size=5 | 指定虚拟磁盘的大小,单位是 G |
–accelerate | KVM或KQEMU内核加速器 |
–cdrom | 指定用于全虚拟化 Guest 的虚拟光驱,后指定ISO或 CDROM 镜像 |
–network | 指定虚拟机的网卡模式 |
-x | 提供额外的内核命令行参数 |
2、使用 ks 文件,无交互字符界面安装
解释
[root@localhost ~]# yum -y install httpd [root@localhost ~]# systemctl start httpd [root@localhost ~]# mkdir /var/www/html/centos7/ [root@localhost ~]# mount /data_kvm/iso/CentOS-7-x86_64-DVD-1611.iso /var/www/html/centos7/
解释
[root@localhost ~]# cd /var/www/html/ [root@localhost html]# vim ks.cfg #platform=x86, AMD64, 或 Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password rootpw --iscrypted $1$R3WeI8np$p87QNYBUo5P6Ab5lEBd4q1 # Use network installation url --url="http://192.168.1.10/centos7" # System language lang zh_CN # Firewall configuration firewall --disabled # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical firstboot --disable # SELinux configuration selinux --disabled # Network information network --bootproto=dhcp --device=ethO --onboot=on # Reboot after installation reboot # System timezone timezone Asia/Shanghai # System bootloader configuration bootloader --location=none # Partition clearing information clearpart --all # Disk partitioning information part /boot --fstype="xfs" --size=500 part /home --fstype="xfs" --size=4096 part swap --fstype="swap" --size=2048 part / --fstype="xfs" --grow --size=1 %post --interpreter=/bin/bash rm -rf /etc/yum.repo.d/* cat >> /etc/yum.repo.d/yum.repo << EOF [centos7] name=centos7 baseurl=http://192.168.1.10/centos7 gpgcheck=0 EOF %end %packages @development @gnome-desktop %end [root@localhost ~]# virt-install --name centos7.32 --ram 1024 --vcpus=1 --disk path=/data_kvm/store/centos-7.32.qcow2,size=13 --accelerate --location=http://192.168.1.10/centos7/ --network bridge=br0 -x "ks=http://192.168.1.10/ks.cfg"
二、KVM基本管理
1、查看虚拟机
解释
[root@localhost ~]# ls /etc/libvirt/qemu //查KVM的配置文件存放目录 autostart centos7.0.xml networks [root@localhost ~]# virsh list --all //查看虚拟机列表 Id 名称 状态 ---------------------------------------------------- 2 centos7.0 running [root@kvm01 ~]# virsh dominfo centos7.0 //查看虚拟机详细信息域 Id: - 名称: centos7.0 UUID: 47bf2df1-2085-4d7d-acc2-15e9c2f09e92 OS 类型: hvm 状态: 关闭 CPU: 1 最大内存: 1048576 KiB 使用的内存: 1048576 KiB 持久: 是 自动启动: 禁用 管理的保存: 否 安全性模式: none 安全性 DOI: 0
2、虚拟机域的开关机
解释
[root@localhost ~]# virsh start centos7.0 //启动虚拟机 域 centos7.0 已开始 [root@localhost ~]# virsh shutdown centos7.0 //关闭虚拟机 域 centos7.0 被关闭 [root@localhost ~]# virsh destroy centos7.0 //强制实例系统关闭电源 域 centos7.0 被删除
3、导出配置(备份)
解释
[root@localhost ~]# virsh dumpxml centos7.0 > /etc/libvirt/qemu/centos7.2.xml //导出虚拟机配置 [root@localhost qemu]# virsh define centos7.0.xml 定义域 centos7.0(从 centos7.0.xml) [root@localhost ~]# virsh create /etc/libvirt/qemu/centos7.0.xml //通过配置文件启动虚拟机系统实例 域 centos7.0 被创建(从 /etc/libvirt/qemu/centos7.0.xml)
4、删除虚拟机
[root@localhost ~]# virsh undefine centos7.0 //删除虚拟机
域 centos7.0 已经被取消定义
5、修改配置文件
[root@localhost ~]# vim /etc/libvirt/qemu/centos7.0.xml //通过vim命令修改
[root@localhost ~]# virsh edit centos7.0 //通过virsh命令修改
[root@localhost ~]# virsh domrename centos7.0 centos7.2 //虚拟机的重命名(7.2以上)
6、查看虚拟机对应的VNC端口(已安装VNC服务)
[root@localhost ~]# virsh vncdisplay centos7.0
:0 //默认不加端口,指定的也是:0,也就是5900
7、挂起虚拟机
解释
[root@localhost ~]# virsh suspend centos7.0 //挂起虚拟机 域 centos7.0 被挂起 [root@localhost ~]# virsh resume centos7.0 //恢复虚拟机 域 centos7.0 被重新恢复
8、开机自启
[root@localhost ~]# virsh autostart centos7.0 //配置虚拟机实例伴随宿主机自动启动
域 centos7.0标记为自动开始
[root@localhost ~]# virsh autostart --disable centos7.0 //取消开机自启
注意:如果kvm虚拟机在另一块磁盘上,记得设置开机自动挂载 sdb1,不然后开机启动不了虚
拟机
[root@localhost ~]# vim /etc/fstab
/dev/sdb1 /data_kvm xfs defaults 0 0
三、KVM磁盘管理
磁盘格式 | 说明 |
---|---|
RAW | 裸格式。占用空间较大,性能较好,但不支持虚拟机快照功能 |
QCOW2 | (copy on write) 写时复制。占用空间较小,支持快照,性能比RAW稍差一些 |
1、磁盘格式
解释
[root@localhost ~]# qemu-img info /data_kvm/store/admin.kvm //查看磁盘信息 image: /data_kvm/store/admin.kvm file format: qcow2 virtual size: 8.0G (8589934592 bytes) disk size: 1.6G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true [root@localhost ~]# qemu-img create /kvm_vm/123.raw 5G //创建磁盘(默认是裸格式) [root@localhost ~]# qemu-img create -f qcow2 /kvm_vm/456.qcow2 5G //创建指定格式磁盘 [root@localhost ~]# qemu-img convert -f raw -O qcow2 /kvm_vm/123.raw /kvm_vm/123.qcow2 //转换磁盘格式
2、快照管理
解释
[root@localhost ~]# virsh snapshot-create centos7.0 //创建快照 已生成域快照 1596527654 [root@localhost ~]# virsh snapshot-current centos7.0 //查看虚拟机快照版本信息 <domainsnapshot> <name>1596527654</name> <state>shutoff</state> <creationTime>1596527654</creationTime> <memory snapshot='no'/> [root@localhost ~]# virsh snapshot-list centos7.0 //查看快照信息 名称 生成时间 状态 ------------------------------------------------------------ 1596527654 2020-08-04 15:54:14 +0800 shutoff [root@localhost ~]# virsh snapshot-revert centos7.0 1596527654 //恢复虚拟机状态 [root@localhost ~]# virsh snapshot-delete centos7.0 1596527654 //删除快照 已删除域快照 1596527654
四、虚拟机域的克隆
1、自动克隆(完整克隆)
[root@localhost ~]# virt-clone --auto-clone -o centos7.0 -n centos7.3
正在分配 'centos7.3.qcow2' | 8.0 GB 00:06
成功克隆 'centos7.3'。
2、手动克隆(完整克隆)
解释
[root@localhost ~]# cd /etc/libvirt/qemu/ [root@localhost qemu]# cp test01.xml test02.xml //复制xml配置文件 [root@localhost kvm_vm]# cp centos.raw test02.raw //复制磁盘文件 [root@localhost qemu]# vim test02.xml <domain type='kvm'> <name>test02</name> //更改name字段,删除UUID <memory unit='KiB'>1048576</memory> ...... <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/kvm_vm/test02.raw'/> //修改磁盘路径以及名称 ...... </controller> <interface type='network'> //删除mac addres <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> [root@localhost qemu]# virsh define test02.xml //重新生成一个虚拟机
3、链接克隆
做一个链接的磁盘,然后第二个新的虚拟机更改xml配置文件,磁盘信息指定新的链接磁盘。
[root@localhost ~]# qemu-img create -f qcow2 -b centos.raw test02.qcow2
五、设置KVM网络
模式 | 说明 |
---|---|
用户模式 | 即NAT方式,这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络 |
桥接模式 | 这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访冋到虚拟机内部,但需要网卡支持,一般有线网卡都支持 |
1、NAT模式
1、外部主机设置
[root@localhost ~]# echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
2、KVM主机设置
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
......
ONBOOT=yes
2、桥接模式
1、外部主机设置
解释
[root@localhost ~]# systemctl stop NetworkManager [root@localhost ~]# virsh iface-bridge ens33 br0 使用附加设备 br0 生成桥接 ens33 失败 已启动桥接接口 br0 [root@localhost ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29b7e3d0 yes ens33 virbr0 8000.525400de1f59 yes virbr0-nic vnet0 [root@localhost ~]# virsh edit test02 </controller> <interface type='bridge'> <mac address='52:54:00:71:a8:7a'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> [root@localhost ~]# virsh start test02 域 test02 已开始 [root@localhost ~]# curl 192.168.1.128:80 www.baidu.com
2、KVM主机设置
解释
[root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:71:a8:7a brd ff:ff:ff:ff:ff:ff inet 192.168.1.128/24 brd 192.168.1.255 scope global noprefixroute dynamic eth0 valid_lft 1715sec preferred_lft 1715sec inet6 fe80::1fb8:58e9:31e7:30e8/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost ~]# yum -y install nginx [root@localhost ~]# systemctl start nginx [root@localhost ~]# echo "www.baidu.com" > /usr/share/nginx/html/index.html
六、KVM虚拟机的迁移
主机 | IP地址 | 主机名 |
---|---|---|
原主机 | 192.168.1.10 | kvm01 |
待迁移主机 | 192.168.1.20 | kvm02 |
nfs服务器 | 192.168.1.30 | nfs |
1、冷迁移(静态迁移)
前提是待迁移虚拟机需要关机
[root@kvm01 ~]# scp /etc/libvirt/qemu/test01.xml
192.168.1.20:/etc/libvirt/qemu/
[root@kvm01 ~]# scp /kvm-vm/centos.raw 192.168.1.20:/kvm-vm/
2、热迁移(动态迁移)
1、创建共享磁盘并挂载
解释
[root@nfs ~]# mkdir /kvmshare [root@nfs ~]# vim /etc/exports /kvmshare *(rw,sync,no_root_squash) [root@nfs ~]# systemctl start nfs [root@nfs ~]# systemctl enable nfs Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. [root@nfs ~]# systemctl start rpcbind [root@nfs ~]# systemctl enable rpcbind [root@kvm01 ~]# mkdir /kvm-share [root@kvm01 ~]# chmod -R 777 /kvm-share/ [root@kvm01 ~]# mount -t nfs 192.168.1.30:/kvmshare /kvm-share/ [root@kvm02 ~]# mkdir /kvm-share [root@kvm02 ~]# chmod -R 777 /kvm-share/ [root@kvm02 ~]# mount -t nfs 192.168.1.30:/kvmshare /kvm-share/
2、在共享磁盘上安装系统
3、设置桥接网络
解释
[root@kvm01 ~]# systemctl stop NetworkManager [root@kvm01 ~]# virsh iface-bridge ens33 br0 使用附加设备 br0 生成桥接 ens33 失败 已启动桥接接口 br0 [root@kvm01 ~]# virsh edit test02 </controller> <interface type='bridge'> <mac address='52:54:00:71:a8:7a'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 编辑了域 test02 XML 配置。 [root@kvm01 ~]# virsh start test02 域 test02 已开始 [root@kvm01 ~]# yum -y install openssh-askpass [root@kvm02 ~]# systemctl stop NetworkManager [root@kvm02 ~]# virsh iface-bridge ens33 br0 Created bridge br0 with attached device ens33 Bridge interface br0 started
4、迁移虚拟机