学习Kvm(四)
安装KVM虚拟化
1、系统基础环境:
[root@linux-node1 ~]# ip addr | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'|sed -n "3p" 10.10.10.188 [root@linux-node1 ~]# uname -r 3.10.0-693.el7.x86_64 [root@linux-node1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@linux-node1 ~]# tail -2 /etc/hosts 10.10.10.188 linux-node1.example.com #Firewalld and selinux systemctl stop firewalld systemctl disable firewalld sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0 #Date yum -y install ntp \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo "#time sync by zsq at $(date +%F)" >> /var/spool/cron/root echo "*/10 * * * * /usr/sbin/ntpdate time.nist.gov &>/dev/null" >>/var/spool/cron/root #hostname sed -i 's/localhost.localdomain/linux-node1.example.com/' /etc/hostname hostnamectl set-hostname linux-node1.example.com
KVM需要硬件支持, 所以需要开启虚拟化支持
1.硬件设备直接在BIOS设置开启CPU虚拟化
2.个人电脑同样进入BIOS开启虚拟化支持
3.VM需要找到对应虚拟机开启对应的VT-EPT虚拟化技术
命令检查是否启用虚拟化、没有任何提示则表示没有启用
egrep '(vmx|svm)' /proc/cpuinfo
2、安装KVM
虚拟化工具
yum install qemu-kvm qemu-kvm-tools \ libvirt virt-manager virt-install \ openssh-askpass –y
//KVM是linux内核的一个模块,模块不需要安装只需要加载,通过用户态程序来管理即可
[root@linux-node1 ~]# lsmod|grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
qeum 虚拟化软件,可以虚拟不同的CPU,以及模拟网卡、声卡、PCI设备等
libvirt 用于管理KVM的工具
virt-install 命令行安装虚拟机工具
virt-manager 图形化管理虚拟机工具
openssh-askpass 远程连接KVM主机
3、启动
libvirt
管理KVM
工具
[root@linux-node1 ~]# systemctl enable libvirtd [root@linux-node1 ~]# systemctl start libvirtd
#注意: 启动后会新增一块virbr0网络、ifconfig查看
4、KVM
会给虚拟机分配NAT
模式网络,但是在生产情况,强烈推荐使用网桥模式
配置KVM虚拟机使用的桥接网络, 添加br0网卡 [root@linux-node1 ~]# brctl addbr br0 将eth0加入网桥,使用桥接模式,给br设置ip,添加路由网关,关闭防火墙 brctl addif br0 eth0 && \ ip addr del dev eth0 10.10.10.188/24 && \ ifconfig br0 10.10.10.188/24 up && \ route add default gw 10.10.10.254 [root@linux-node1 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c292ce007 no eth0 virbr0 8000.525400192ae5 yes virbr0-nic
创建KVM虚拟机
1.在创建虚拟机之前, 我们需要添加一块磁盘来存放我们的虚拟机, VM->关机->设置->添加磁盘
直接使用整块磁盘
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@linux-node1 ~]# mkdir -p /data [root@linux-node1 ~]# mkfs.xfs /dev/sdb meta-data=/dev/sdb isize=512 agcount=4, agsize=655360 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=2621440, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log = internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@linux-node1 ~]# mount /dev/sdb /data |
#强烈建议加入开机自启动
2.使用virsh-install
创建命令模式创建虚拟机
[root@linux-node1 data]# pwd /data [root@linux-node1 data]# ls CentOS-7-x86_64-DVD-1708.iso 挂载系统光盘, 建立ISO镜像文件 [root@linux-node1 ~]# dd if=/dev/cdrom of=/data/CentOS-7-x86_64-DVD-1708.iso 创建虚拟机磁盘 [root@linux-node1 ~]# qemu-img create -f qcow2 /data/centos-7-x86_64 10G #-f指定磁盘格式、磁盘名称加.qcow2查看的时候会更方便 创建虚拟机实例 virt-install --name CentOS-7-x64-node1 \ --virt-type kvm \ --ram 1024 \ --cdrom=/data/CentOS-7-x86_64-DVD-1708.iso \ --disk path=/data/centos-7-x86_64 \ --network bridge=br0 \ --graphics vnc,listen=0.0.0.0 \ --noautoconsole //参数概述 --virt-type:指定虚拟机类型(kvm、qemu、xen) --name:指定虚拟机名称 --raw:指定虚拟机使用内存大小 --cpu:指定cpu的核数(默认为1) --cdrom:指定虚拟机安装的ISO镜像 --disk:指定虚拟机数据存储磁盘qcow2 --network:指定虚拟机网络类型, 默认nat,常用bridge --graphics:指定虚拟机可连接方式, 比如VNC --noautoconsole:不连接虚拟机图形界面控制台
3.使用vnc
客户端连接KVM
虚拟机,进行操作系统安装、默认是5900
4.安装CentOS7
在启动前修改内核让网卡为eth0
按tab键、在后面增加net.ifnames=0 biosdevname 然后空格回车、剩下就是跟安装操作系统步骤一样
5.安装系统步骤忽略, 但一定要记得配置好对应的地址
安装完成后、需修改网卡ONBOOT=yes、默认是没有启动的
[root@linux-node1 data]# virsh list --all #--all是查看所有 Id Name State ---------------------------------------------------- - CentOS-7-x64-node1 shut off [root@linux-node1 data]# virsh start CentOS-7-x64-node1 #启动节点 Domain CentOS-7-x64-node1 started
刚才创建的虚拟机在我们linux系统宿主机上体现的是一个进程、它是通过/usr/libexec/qemu-kvm -name启动起来的
如果我们kill这个进程、虚拟机就会停止
virsh命令是装libvirt的时候装上的、libvirt开源的管理虚拟机的工具
停止libvirtd不影响虚拟机的运行、但是不能通过virsh去管理
[root@linux-node1 ~]# systemctl stop libvirtd [root@linux-node1 ~]# virsh list --all error: failed to connect to the hypervisor error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
管理KVM虚拟机
生成kvm虚拟机:virt-install 查看在运行的虚拟机:virsh list 查看所有虚拟机:virsh list –all 查看kvm虚拟机配置文件:virsh dumpxml name 启动kvm虚拟机:virsh start name 正常关机:virsh shutdown name 非正常关机(相当于物理机直接拔掉电源):virsh destroy name 删除:virsh undefine name(彻底删除,找不回来了,如果想找回来,需要备份/etc/libvirt/qemu的xml文件) 根据配置文件定义虚拟机:virsh define file-name.xml 挂起,终止:virsh suspend name 恢复挂起状态:virsh resumed name 虚拟机随着系统启动:virsh autostart Name 关闭虚拟机随系统启动:virsh autostart —disable Name 编辑KVM虚拟机的xml配置文件:virsh edit name
KVM虚拟机扩容
1.1编辑kvm的xml文件,更改虚拟机CPU配置
- 配置虚拟机的cpu,两种方式(启动的时候指定核数,更改xml)
- 第一种方法:为了实现cpu的热添加,就需要更改cpu的最大值,当然热添加的个数不能超过最大值
[root@linux-node1 qemu]# virsh edit CentOS-7-x64-node1 <vcpu placement='auto' current="1">4</vcpu> #当前为1,自动扩容,最大为4
- 重启虚拟机
[root@linux-node1 qemu]# virsh shutdown CentOS-7-x64-node1 Domain CentOS-7-x64-node1 is being shutdown 正常关闭后再启动 [root@linux-node1 qemu]# virsh start CentOS-7-x64-node1 Domain CentOS-7-x64-node1 started
- 登录虚拟机上,查看cpu信息,确认cpu的个数,下面开始进行cpu热添加
- cpu的热添加(cpu只支持热添加,不支持热减少)
[root@linux-node1 qemu]# virsh setvcpus CentOS-7-x64-node1 2 --live
- 再到虚拟机中查看cpu信息
- kvm版本较高,并不需要echo “1”到/sys/devices/system/cpu/cpu1/online 进行激活,自动可以激活。
[root@linux-node1 qemu]# cat /sys/devices/system/cpu/cpu1/online 1
- 第二种方法:安装的时候指定
virt-install –vcpus 5 –vcpus 5,maxcpus=10,cpuset=1-4,6,8 –vcpus sockets=2,cores=4,thread=2
1.2编辑kvm的xml文件,更改虚拟机内存配置
内存也支持热添加、但前提是你的宿主机和虚拟机是同一个操作系统版本
内存的设置拥有一个“气球(balloon)机制”,可以增大减少,但是也要设置一个最大值,默认并没有设置最大值,也可以在安装时候指定
[root@linux-node1 qemu]# virsh edit CentOS-7-x64-node1
<memory unit='KiB'>2048576</memory> #最大内存为2G
<currentMemory unit='KiB'>1048576</currentMemory> #当前内存为1G
编辑完配置文件需要重新启动生效
查看当前虚拟机内存大小
[root@linux-node1 qemu]# virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd info balloon balloon: actual=1024
[root@linux-node1 qemu]# virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd balloon 512 #把内存限制为512 [root@linux-node1 qemu]# virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd info balloon #再次查看 balloon: actual=512
[root@linux-node1 qemu]# virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd balloon 1224 #增加内存为1224 [root@linux-node1 qemu]# virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd info balloon #再次查看 balloon: actual=1224
1.3磁盘扩容
KVM
虚拟机中有两种磁盘格式:
raw格式: 直接占用物理磁盘, 写入快, 性能优, 但占用空间
Qcow2格式: 使用多少占多少磁盘, 支持压缩、快照、镜像
注意:raw不支持快照, Qcow2支持快照, 但两者文件类型是可以相互间转换
无论磁盘是raw qcow2
格式, 扩展思路如下
- 新添加一块磁盘加入至需要扩容的虚拟主机
- 使用lvm逻辑卷管理方式进行扩展
1.查看当前KVM
虚拟机所使用的虚拟磁盘
[root@linux-node1 data]# virsh domblklist CentOS-7-x64-node1 Target Source ------------------------------------------------ vda /data/centos-7-x86_64 hda -
2.创建一块qcow2
虚拟磁盘
[root@linux-node1 ~]# qemu-img create -f qcow2 /data/centos-7-x86_64-disk2.qcow2 10G
3.在线添加虚拟磁盘
[root@linux-node1 ~]# virsh attach-disk CentOS-7-x64-node1 /data/centos-7-x86_64-disk2.qcow2 vdb --cache=none --subdriver=qcow2 Disk attached successfully [root@linux-node1 ~]# virsh domblklist CentOS-7-x64-node1 #查看新增磁盘状态 Target Source ------------------------------------------------ vda /data/centos-7-x86_64 vdb /data/centos-7-x86_64-disk2.qcow2 hda -
- 第二种扩容方式
[root@linux-node1 ~]# virsh edit CentOS-7-x64-node1 <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/data/centos-7-x86_64-disk2.qcow2'/> <target dev='vdb' bus='virtio'/> </disk>
4.通过vnc
连接KVM
虚拟机进行磁盘扩容
- 查看当前磁盘大小
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 8.0G 896M 7.2G 11% / devtmpfs 886M 0 886M 0% /dev tmpfs 897M 0 897M 0% /dev/shm tmpfs 897M 8.5M 888M 1% /run tmpfs 897M 0 897M 0% /sys/fs/cgroup /dev/vda1 1014M 143M 872M 15% /boot tmpfs 82M 0 82M 0% /run/user/0
- 扩容步骤如下
[root@localhost ~]# pvcreate /dev/vdb [root@localhost ~]# vgextend centos /dev/vdb [root@localhost ~]# lvextend -l +100%FREE /dev/centos/root [root@localhost ~]# xfs_growfs /dev/centos/root
- 再次查看
[root@localhost ~]# df -h #centos-root多了10G Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 18G 897M 18G 5% / devtmpfs 886M 0 886M 0% /dev tmpfs 897M 0 897M 0% /dev/shm tmpfs 897M 8.5M 888M 1% /run tmpfs 897M 0 897M 0% /sys/fs/cgroup /dev/vda1 1014M 143M 872M 15% /boot tmpfs 82M 0 82M 0% /run/user/0
KVM虚拟机快照
1.查看磁盘格式、如果是raw
格式需要转换成qcow2
[root@linux-node1 ~]# qemu-img info /data/centos-7-x86_64 image: /data/centos-7-x86_64 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.2G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
2.对虚拟机当前进行快照拍摄
[root@linux-node1 ~]# virsh snapshot-create CentOS-7-x64-node1 Domain snapshot 1531036016 created
3.查看虚拟机快照
[root@linux-node1 ~]# virsh snapshot-list CentOS-7-x64-node1 Name Creation Time State ------------------------------------------------------------ 1531036016 2018-07-08 15:46:56 +0800 running
#检查当前虚拟机最新快照版本 [root@linux-node1 ~]# virsh snapshot-current CentOS-7-x64-node1|less #快照xml文件存放路径 [root@linux-node1 ~]# ls /var/lib/libvirt/qemu/snapshot/CentOS-7-x64-node1 1531036016.xml
4.恢复快照
[root@linux-node1 ~]# virsh snapshot-revert CentOS-7-x64-node1 1531036016 #确认恢复版本正确 [root@linux-node1 ~]# virsh snapshot-current CentOS-7-x64-node1|grep "1531036016" <name>1531036016</name> <creationTime>1531036016</creationTime>
5.删除快照
[root@linux-node1 ~]# qemu-img info /data/centos-7-x86_64 #查看 image: /data/centos-7-x86_64 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.6G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 1531036016 382M 2018-07-08 15:46:57 05:12:14.974 Format specific information: compat: 1.1 lazy refcounts: false [root@linux-node1 ~]# virsh snapshot-delete CentOS-7-x64-node1 1531036016 #删除最近的版本 Domain snapshot 1531036016 deleted