Kvm 虚拟化
Kvm 介绍
1、什么是虚拟化
简单理解: 是指通过虚拟化的一种技术将一台实体计算机虚拟为多台逻辑计算机,在一台计算机上面同时运行多个逻辑计算机。每个逻辑计算机可以运行不同的操作系统。 提高计算机的工作效率。把所有的资源进行整合,提高资源的利用率,按需分配。
2、为什么要使用虚拟化?
提高计算机资源的利用率和程序运行环境的安全隔离 还可以有效的防止资源的浪费。
优势:
1. 降低运营成本
2. 提高应用兼容性
3. 加速应用部署
4. 提高服务可用性
5. 提升资源的利用率
6. 动态资源分配
7. 降低能源消耗
3、虚拟化的应用场景
1. 多版本操作系统共存
2. 机房迁移, 虚拟化只需要迁移虚拟主机就可以
3. 相同业务部署 克隆
4. 软件发布测试,体验
4、虚拟化的软件介绍
Xen
软件是纯模拟,全部都是虚拟化! 特别慢!
QEMU
性能特别的好,需要用的特殊的内核 经过专门修改之后的内核
VMware ESCI
商业软件 部署特别快 贵 好用
VirtualBox
开源的虚拟机软件
Kvm 虚拟化管理平台 使用范围很广
基于内核的虚拟机 开源软件
管理平台 qemu-kvm
Kvm 安装部署虚拟机
前期准备
准备一台服务器,如果是虚拟机,要求如下图
安装部署虚拟机
#安装 Kvm
[root@kvm01 ~]# yum -y install libvirt virt-install qemu-kvm
#启动
[root@kvm01 ~]# systemctl start libvirtd.service
[root@kvm01 ~]# systemctl enable libvirtd.service
#查看新增的 100G 硬盘
[root@kvm01 ~]# lsblk
sdb 8:16 0 100G 0 disk
#硬盘分区
[root@kvm01 ~]# fdisk /dev/sdb
#查看分区
[root@kvm01 ~]# fdisk -l /dev/sdb
#格式化分区
[root@kvm01 ~]# mkfs.xfs /dev/sdb1
#挂载分区
[root@kvm01 ~]# mount /dev/sdb1 /opt
#在新分区目录中上传系统文件
[root@kvm01 opt]# ll -h
total 4.3G
-rw-r--r-- 1 root root 4.3G Apr 3 15:04 CentOS-7-x86_64-DVD-1810.iso
# virt 命令解释
--virt-type #要使用的管理程序名称 (kvm, qemu, xen, ...)
--os-type #系统类型 linux unix windows
--os-variant #客户机上安装的操作系统,如:'fedora18'、'rhel7'、'winxp' 等。
-n/--name #客户机实例名称
--memory #配置客户机虚拟内存大小
--vcpus #配置客户机虚拟 CPU数量。
--disk #指定存储的各种选项。 raw #不支持做快照,性能好。qcow2 #支持快照。
-cdrom #镜像位置
-w/--network #配置客户机网络接口。
--graphics #配置客户机显示设置。
--noautoconsole #不要自动尝试连接到客户端控制台
--autostart #主机启动时自动启动域。
--noreboot #安装完成后不重新启动客户机。
# 安装 Centos6 虚拟机
# 注意:安装 Centos6 的时候必须分配 swap 分区,否则会有不能启动的可能
# 注意:如果不能联网就查看网卡配置文件,设置开启启动网卡 ONBOOT=yes
virt-install --virt-type kvm --os-type=linux --os-variant rhel6 --name=centos6_web02 --memory 1024 --vcpus 1 --disk /opt/centos6_web02.raw,format=raw,size=10 --cdrom=/opt/CentOS-6.10-x86_64-bin-DVD1.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
# 安装 Centos7 虚拟系统【先在桌面下载好 VNC Viewer 软件】
[root@kvm01 /opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name=centos7_web01 --memory 1024 --vcpus 1 --disk /opt/centos7_web01.raw,format=raw,size=10 --cdrom=/opt/CentOS-7-x86_64-DVD-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
#执行上面的命令后,需要在1分钟内执行 【VNC Viewer 软件】
#查看程序端口
[root@kvm01 /opt]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 11071/qemu-kvm
等待进入安装系统界面,开始安装系统的时候注意,网卡不要设置IP,只要开机启动网卡即可,这里只给了10G硬盘,所以各个目录分配空间如下图
虚拟机【配置文件介绍】
:exit #退出编辑虚拟机配置文件
systemctl restart libvirtd #修改虚拟机配置文件后需要重启服务生效
virsh edit centos7_web01 #关机后修改虚拟机配置
Press ENTER or type command to continue #按回车键或键入命令继续
<domain type='kvm'> #域类型,也可以是xen
<name>centos7_web01</name> #虚拟机实例名称
<uuid>8f9de31a-995e-47c0-a7b8-6f635d300d7d</uuid> #UUID
<memory unit='KiB'>1048576</memory> #内存总大小
<currentMemory unit='KiB'>1048576</currentMemory> #内存实际使用大小
<vcpu placement='static'>1</vcpu> #CPU核心数量
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> #表示全虚拟化
<boot dev='hd'/> #hd表示从硬盘启动,cdrom表示从光盘启动
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>Broadwell</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/opt/centos7_web01.raw'/> #虚拟机磁盘文件路径
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</controller>
<interface type='network'> #网络接口类型,network net模式-共享主机IP【bridge 网桥-直连外部网,? 仅主机-只和主机连接】
<mac address='52:54:00:b5:a6:d2'/> #网卡Mac地址
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/> #监听类型=地址,允许访问地址=任意
</graphics>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</memballoon>
<rng model='virtio'>
<backend model='random'>/dev/urandom</backend>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</rng>
</devices>
</domain>
Kvm 管理操作
Kvm 基础管理操作
虚拟机磁盘文件【磁盘文件中就是虚拟机的镜像文件】
[root@kvm01 /opt]# virsh edit centos7_web01 #使用命令设置配置文件会有 语法效验,方便操作
......
<source file='/opt/centos7_web01.raw'/> #在虚拟机的配置文件中设置了磁盘文件的位置
......
#客户机的主配置文件
[root@kvm01 /opt]# ll /etc/libvirt/qemu/
-rw------- 1 root root 3918 2020-04-07 09:49 centos6_web02.xml
#虚拟机开机时导出的配置文件
[root@kvm01 /opt]# virsh dumpxml centos7_web01 > centos7_web01_bak.xml
#虚拟机关机时导出的配置文件
[root@kvm01 /opt]# virsh dumpxml centos7_web01 > centos7_web01_bak_shutdown.xml
[root@kvm01 /opt]# ll
total 5876744
-rw-r--r-- 1 root root 3963 2020-04-07 10:09 centos7_web01_bak_shutdown.xml
-rw-r--r-- 1 root root 5261 2020-04-07 10:07 centos7_web01_bak.xml
#删除虚拟机配置文件
[root@kvm01 /opt]# rm -f /etc/libvirt/qemu/centos7_web01.xml
systemctl restart libvirtd #重启删除才生效
#恢复虚拟机配置文件【前提是有导出配置文件】
[root@kvm01 /opt]# virsh define centos7_web01_bak.xml
#重命名虚拟机实例名称
[root@kvm01 /opt]# virsh shutdown centos7_web01 #先 关闭虚拟机
[root@kvm01 /opt]# virsh domrename centos7_web01 web01 #再 修改虚拟机实例名
[root@kvm01 /opt]# virsh list --all #查看实例列表实例名称已经改变
Id Name State
----------------------------------------------------
- wb01 shut off
[root@kvm01 /opt]# ll /etc/libvirt/qemu/ #虚拟机的配置文件名称没变
total 8
-rw------- 1 root root 4529 2020-04-07 10:26 Centos7_db01.xml
[root@kvm01 /opt]# virsh edit web01 #先 修改配置文件中的实例文件名
<source file='/opt/web.raw'/>
[root@kvm01 /opt]# mv centos7_web01.raw wb01.raw #再 修改配置文件名称
[root@kvm01 /opt]# virsh start wb01 #重启虚拟机
#开机自启动虚拟机实质就是创建软链接
[root@kvm01 /opt]# ll /etc/libvirt/qemu/autostart/web01.xml
lrwxrwxrwx 1 root root 27 2020-04-07 14:36 /etc/libvirt/qemu/autostart/web01.xml -> /etc/libvirt/qemu/web01.xml
virsh 使用范例
#显示所有的主机【开机、挂起、关闭】
[root@kvm01 ~]# virsh list --all
Id Name 【实例名称】 State 【状态】
----------------------------------------------------
- centos7_web01 shut off
#启动一台主机
[root@kvm01 /opt]# virsh start centos7_web01
Domain centos7_web01 started
#只显示已经运行的主机
[root@kvm01 /opt]# virsh list
Id Name State
----------------------------------------------------
2 centos7_web01 running
#每启动一台主机,就启动对应的一个端口
[root@kvm01 /opt]# netstat -lntp | grep 59
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 11619/qemu-kvm
#根据内网IP地址,用 ssh 连接 虚拟机
[root@kvm01 /opt]# ssh root@192.168.122.91
The authenticity of host '192.168.122.91 (192.168.122.91)' can't be established.
ECDSA key fingerprint is SHA256:rmgopVnnY7KphZG8llZSoViZu9vN2A8NtM9Qce7DLuw.
ECDSA key fingerprint is MD5:d5:1d:1b:87:7e:4c:f6:cc:3f:fb:be:2c:13:89:78:f3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.122.91' (ECDSA) to the list of known hosts.
root@192.168.122.91's password:
Last login: Fri Apr 3 16:16:02 2020
#关机
[root@kvm01 /opt]# virsh shutdown centos7_web01
Domain centos7_web01 is being shutdown
#查看虚拟机状态
[root@kvm01 /opt]# virsh list --all
Id Name State
----------------------------------------------------
- centos7_web01 shut off
#强制关机 === 拔掉电源
[root@kvm01 /opt]# virsh destroy centos7_web01
Domain centos7_web01 destroyed
#显示主机的信息
[root@kvm01 /opt]# virsh dominfo centos7_web01
Id: 4
Name: centos7_web01
UUID: 158ca26b-eebd-41f3-8dc0-5752bd98d151
OS Type: hvm
State: running
CPU(s): 1
CPU time: 22.2s
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
#修改内存的大小,只能调小
[root@kvm01 /opt]# virsh setmem centos7_web01 524288
#查看调整结果
[root@kvm01 /opt]# virsh dominfo centos7_web01
Id: 4
Name: centos7_web01
UUID: 158ca26b-eebd-41f3-8dc0-5752bd98d151
OS Type: hvm
State: running
CPU(s): 1
CPU time: 25.6s
Max memory: 1048576 KiB
Used memory: 524288 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
#通过编辑虚拟机配置文件调大内存【虚拟机必须是关机状态】
#关闭虚拟机
[root@kvm01 /opt]# virsh shutdown centos7_web01
Domain centos7_web01 is being shutdown
#查看虚拟机状态,确保虚拟机是关闭的
[root@kvm01 /opt]# virsh list --all
Id Name State
----------------------------------------------------
- centos7_web01 shut off
#修改主机的配置文件
[root@kvm01 /opt]# virsh edit centos7_web01
<memory unit='KiB'>2097152</memory> #内存的总大小
<currentMemory unit='KiB'>1048576</currentMemory> #当前可以使用的内存的大小
<vcpu placement='static'>2</vcpu> #cpu的核心
#重启虚拟机服务生效
[root@kvm01 /opt]# systemctl restart libvirtd.service
#启动虚拟机
[root@kvm01 /opt]# virsh start centos7_web01
Domain centos7_web01 started
#查看修改后的虚拟机信息
[root@kvm01 /opt]# virsh dominfo centos7_web01
Id: 5
Name: centos7_web01
UUID: 158ca26b-eebd-41f3-8dc0-5752bd98d151
OS Type: hvm
State: running
CPU(s): 2
CPU time: 28.9s
Max memory: 2097152 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
#命令行修改最大内存
#关闭虚拟机
[root@kvm01 /opt]# virsh shutdown centos7_web01
#调整虚拟机内存为 1G
[root@kvm01 /opt]# virsh setmaxmem centos7_web01 1048576
#查看虚拟机内存调整结果
[root@kvm01 /opt]# virsh dominfo centos7_web01
Id: -
Name: centos7_web01
UUID: 158ca26b-eebd-41f3-8dc0-5752bd98d151
OS Type: hvm
State: shut off
CPU(s): 2
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
#查看CPU的信息
[root@kvm01 /opt]# virsh vcpuinfo centos7_web01
VCPU: 0
CPU: 2
State: running
CPU time: 17.2s
CPU Affinity: yyyyyyyy
VCPU: 1
CPU: 2
State: running
CPU time: 8.4s
CPU Affinity: yyyyyyyy
#虚拟机开机自启动
#前提条件必须是 libvirtd 服务是开机自启动的
[root@kvm01 ~]# systemctl enable libvirtd
#设置虚拟机开机自启
[root@kvm01 ~]# virsh autostart centos7_web01
#查看虚拟机信息
[root@kvm01 ~]# virsh dominfo centos7_web01
......
Autostart: enable
......
#实质就是创建一个软链接
[root@kvm01 ~]# ll /etc/libvirt/qemu/autostart/
total 0
lrwxrwxrwx 1 root root 34 2020-04-07 14:35 Centos7_web01.xml -> /etc/libvirt/qemu/Centos7_web01.xml
#关闭开机自启
[root@kvm01 ~]# virsh autostart --disable Centos7_web01
#每启动一台主机,就启动对应的一个端口,根据端口号的59 后面的数字进行连接虚拟机
[root@kvm01 /opt]# netstat -lntp | grep 59
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 11619/qemu-kvm
#查看主机对应的端口 :0 === 5900
[root@kvm01 /opt]# virsh vncdisplay centos7_web01
:0
virsh 命令简介
virsh list --all #显示所有的虚拟主机
virsh list #显示开机的虚拟机
virsh start centos7_web01 #启动虚拟机
virsh suspend centos7_web01 #挂起虚拟机
virsh resume centos7_web01 #恢复被挂起的虚拟机
virsh autostart win10 #开机启动虚拟机,即在虚拟机服务(libvirtd)启动的时候,就启动虚拟机
virsh autostart --disable win10 #关闭开机启动虚拟机
virsh shutdown win10 #关闭虚拟机
virsh destroy win10 #强制关机【等于现实中拔掉机箱电源线】
virsh domname 2 #显示id号为2的虚拟机名
virsh domid win10 #显示虚拟机的id号
virsh domuuid win10 #显示虚拟机的UUID
virsh domstate win10 #显示虚拟机的当前状态
virsh dominfo win10 #查看虚拟机信息
virsh vcpuinfo win10 #查看虚拟机的 CPU 信息
virsh vncdisplay win10 #查看虚拟机对应端口【用于 VNC 登陆虚拟机】
virsh domiflist win10 #查看虚拟机的网卡MAC
virsh attach-interface win10 --type bridge --source br0 --model virtio #临时增加桥接类型网卡
virsh detach-interface win10 --type bridge --mac 52:54:00:84:23:3d --current #根据MAC地址临时删除网卡
virsh setmem win10 524288 #临时修改内存大小【开机状态才能修改,且只能降低,单位KB】关机后自动恢复
virsh setmaxmem win10 1048576 #关机后设置最大内存为 1048576KB=1G
virsh dumpxml win10 #显示虚拟机当前的配置文件内容
virsh dumpxml web01 > web01.xml #导出虚拟机配置文件
virsh define web01.xml #导入虚拟机配置文件
virsh edit win10 #编辑虚拟机配置文件
彻底删除虚拟机步骤
1)强制关闭虚拟机:virsh destroy win10
2)删除定义:virsh undefine win10
3)删除虚拟机虚拟磁盘文件
虚拟机的 console 登陆
1、Centos7 的 console 登陆配置
[root@kvm01 /opt]# ssh root@192.168.122.91 #先用ssh连接 Centos7 虚拟机
#115200n8:能显示虚拟机的启动过程。重启完成后,使用virsh console 连接虚拟机
[root@web01 ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@web01 ~]# reboot
#连接虚拟机
[root@kvm01 /opt]# virsh console wb01
#退出连接按 Ctrl+]
2、Centos6 的 console 登陆配置
[root@kvm01 /opt]# ssh root@192.168.122.109 #先用ssh连接 Centos6 虚拟机
#添加 ttyS0 的许可,允许root登录
[root@web02 ~]# echo "ttyS0" >> /etc/securetty
#编辑 /etc/grub.conf 中加入 console=ttyS0
[root@web02 ~]# sed -i '/\tkernel/s#.*#& console=ttyS0#g' /boot/grub/grub.conf
#重启虚拟主机
[root@web02 ~]# reboot
#重启完成后,使用virsh console 连接 Centos6 虚拟机。
[root@qiudao /opt]# virsh console web02
Kvm 磁盘管理
#创建一块 qcow2 的虚拟硬盘
[root@kvm01 ~]# qemu-img create -f qcow2 test.qcow2 2G
Formatting 'test.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off
#查看磁盘信息
[root@kvm01 ~]# qemu-img info test.qcow2
image: test.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
#将raw格式转换为qcow2格式
[root@kvm01 /opt]# qemu-img convert -f raw -O qcow2 centos7_web01.raw centos7_web01.qcow2
#修改配置文件
[root@kvm01 /opt]# virsh edit centos7_web01
......
<driver name='qemu' type='qcow2'/>
<source file='/opt/Centos7_db01.qcow2'/>
......
#虚拟机关机重开后才生效
[root@kvm01 /opt]# virsh shutdown centos7_web01
[root@kvm01 /opt]# virsh start centos7_web01
Kvm 快照管理
#创建快照
#开机状态下创建快照,速度慢一些
[root@kvm01 /opt]# virsh snapshot-create centos7_web01
#关机状态下创建快照,速度快一些
[root@kvm01 /opt]# virsh shutdown centos7_web01
[root@kvm01 /opt]# virsh snapshot-create centos7_web01
#查看虚拟机的快照
[root@kvm01 /opt]# virsh snapshot-list centos7_web01
Name Creation Time State
------------------------------------------------------------
1586243623 2020-04-07 15:13:43 +0800 running
1586243807 2020-04-07 15:16:47 +0800 shutoff
#查看快照的具体信息
[root@kvm01 /opt]# virsh snapshot-info centos7_web01 --snapshotname 1586243807
Name: 1586243807
Domain: Centos7_db01
Current: yes
State: shutoff
Location: internal
Parent: 1586243623
Children: 0
Descendants: 0
Metadata: yes
#恢复快照
#查看虚拟机快照列表
[root@kvm01 /opt]# virsh snapshot-list centos7_web01
Name Creation Time State
------------------------------------------------------------
1586243623 2020-04-07 15:13:43 +0800 running
1586243807 2020-04-07 15:16:47 +0800 shutoff
#恢复快照
[root@kvm01 /opt]# virsh snapshot-revert centos7_web01 1586243623
#快照的位置
[root@kvm01 /opt]# ll /var/lib/libvirt/qemu/snapshot/Centos7_db01/
-rw------- 1 root root 5063 2020-04-07 15:20 1586243623.xml
-rw------- 1 root root 5085 2020-04-07 15:20 1586243807.xml
#删除快照
[root@kvm01 /opt]# virsh snapshot-delete Centos7_db01 1586243623
Domain snapshot 1586243623 deleted
Kvm 添加新虚拟硬盘 扩容虚拟硬盘
#新建虚拟硬盘
[root@kvm01 /opt]# qemu-img create -f qcow2 /opt/centos7_web01_add01.qcow2 10G
Formatting '/opt/centos7_web01_add01.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
#查看新虚拟硬盘信息
[root@kvm01 /opt]# qemu-img info centos7_web01_add01.qcow2
image: centos7_web01_add01.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
#给虚拟主机添加硬盘
[root@kvm01 /opt]# virsh attach-disk centos7_web01 /opt/centos7_web01_add01.qcow2 vdb --live --cache=none --subdriver=qcow2
Disk attached successfully
选项:
vdb #第二块虚拟磁盘【v开头表示虚拟磁盘,b表示第二块磁盘】
--live #在线热添加
--cache=none #开启 Kvm 虚拟服务器对 centos7_web01 虚拟机镜像文件的读取缓存 off 关闭
--subdriver #驱动类型
#在客户机进行查看
[root@web01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 253:0 0 10G 0 disk
├─vda1 253:1 0 512M 0 part /boot
├─vda2 253:2 0 1G 0 part [SWAP]
└─vda3 253:3 0 8.5G 0 part /
vdb 253:16 0 10G 0 disk #第二块虚拟磁盘
#移除虚拟硬盘
[root@kvm01 /opt]# virsh detach-disk centos7_web01 vdb
Disk detached successfully
#扩容虚拟硬盘
#根分区扩容 注意:给已存在硬盘扩容必须先删除该硬盘的所有快照
[root@kvm01 /opt]# qemu-img resize /opt/centos7_web01.qcow2 +10G
#查看扩容后的虚拟硬盘信息
[root@kvm01 /opt]# qemu-img info centos7_web01.qcow2
image: centos7_web01.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes) #已经变为20G了
disk size: 1.6G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
#必须关闭再启动虚拟机后才能生效
[root@kvm01 /opt]# virsh shutdown centos7_web01
[root@kvm01 /opt]# virsh start centos7_web01
#虚拟机操作
#重新分区
[root@web01 ~]# fdisk /dev/vda
......
Command (m for help): d #删除原有分区
Partition number (1-3, default 3): 3 #第三分区
......
Command (m for help): n #创建新分区
......
Select (default p): p #选择新分区
Partition number (3,4, default 3): 3 #第三分区
First sector (3147776-41943039, default 3147776): #直接回车
Using default value 3147776
Last sector, +sectors or +size{K,M,G} (3147776-41943039, default 41943039): #直接回车
......
Command (m for help): w #保存退出
......
#查看已经扩容成功了
[root@web01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 253:0 0 20G 0 disk
├─vda1 253:1 0 512M 0 part /boot
├─vda2 253:2 0 1G 0 part [SWAP]
└─vda3 253:3 0 8.5G 0 part /
#重启虚拟机
[root@web01 ~]# reboot
#执行调整分区大小后才能生效
[root@web01 ~]# xfs_growfs /dev/vda3
meta-data=/dev/vda3 isize=512 agcount=4, agsize=556992 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2227968, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2227968 to 4849408
#查看扩容虚拟硬盘生效
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda3 19G 1.2G 18G 7% /
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 6.7M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 509M 120M 389M 24% /boot
tmpfs 100M 0 100M 0% /run/user/0
Kvm 克隆
完整克隆
注意:不能在虚拟机开机状态下克隆
#使用一条命令完成克隆
[root@kvm01 /opt]# virt-clone --auto-clone -o web01 -n web02
--auto-clone #从源虚拟机配置中自动生成克隆名称和存储路径
-o #源虚拟机实例名称;必须为关闭或者暂停状态
-n #克隆后的虚拟机实例名称
#克隆后的虚拟机磁盘文件
[root@kvm01 /opt]# ll web02.qcow2
-rw------- 1 root root 1568538624 2020-04-08 09:51 web02.qcow2
#克隆后的虚拟机配置文件
[root@kvm01 /opt]# ll /etc/libvirt/qemu/web02.xml
-rw------- 1 root root 4511 2020-04-08 09:51 /etc/libvirt/qemu/web02.xml
#使用拷贝方式完成克隆
1.拷贝磁盘镜像文件
[root@kvm01 /opt]# cp -a web01.qcow2 web03.qcow2
[root@kvm01 /opt]# ll -h web03.qcow2
-rw-r--r-- 1 root root 2.7G 2020-04-08 09:04 web03.qcow2
2.导出源客户机的配置信息
[root@kvm01 /opt]# virsh dumpxml web01 > web03.xml
[root@kvm01 /opt]# ll web03.xml
-rw-r--r-- 1 root root 4289 2020-04-08 10:08 web03.xml
3.修改配置信息
[root@kvm01 /opt]# vim web03.xml
<name>web03</name>
删除UUID一行
<source file='/opt/web03.qcow2'/>
删除mac地址
4.导入配置信息
[root@kvm01 /opt]# virsh define web03.xml
Domain web03 defined from web03.xml
5.检查登录测试
[root@kvm01 /opt]# ll /etc/libvirt/qemu/web03.xml
-rw------- 1 root root 4511 2020-04-08 10:12 /etc/libvirt/qemu/web03.xml
[root@kvm01 /opt]# virsh start web03
Domain web03 started
[root@kvm01 /opt]# virsh console web03
链接克隆
#手动进行链接克隆
1. 创建一个基于链接克隆的虚拟磁盘文件
[root@kvm01 /opt]# qemu-img create -f qcow2 -b web01.qcow2 db01.qcow2
[root@kvm01 /opt]# ll -h db01.qcow2
-rw-r--r-- 1 root root 193K 2020-04-08 10:38 db01.qcow2
2.导出源客户机的配置信息
[root@kvm01 /opt]# virsh dumpxml web01 > db01.xml
3.修改配置信息
[root@kvm01 /opt]# vim db01.xml
<name>db01</name>
删除UUID一行
<source file='/opt/db01.qcow2'/>
删除mac地址
4.导入配置
[root@kvm01 /opt]# virsh define db01.xml
Domain db01 defined from db01.xml
[root@kvm01 /opt]# ll /etc/libvirt/qemu/db01.xml
-rw------- 1 root root 4508 2020-04-08 10:40 /etc/libvirt/qemu/db01.xml
5.登录测试
[root@kvm01 /opt]# virsh start db01
Domain db01 started
[root@kvm01 /opt]# virsh console db01
#使用脚本完成克隆
[root@kvm01 ~]# cat /opt/clone-lj.sh
#!/bin/bash
oldname=$1
newname=$2
newxml="/tmp/${newname}.xml"
#判断源虚拟机是否存在
virsh list --all|grep $oldname
if [ $? -ne 0 ];then
echo "你输入的源虚拟机不存在!!!"
exit
fi
#源虚拟机关机
virsh list | grep $oldname
if [ $? -eq 0 ];then
virsh shutdown $oldname
virsh list | grep $oldname
if [ $? -eq 0 ];then
virsh destroy $oldname
fi
fi
#导出链接克隆的配置文件
virsh dumpxml $oldname > $newxml
#创建一个基于源主机磁盘的磁盘文件
qemu-img create -f qcow2 -b /opt/${oldname}.qcow2 /opt/${newname}.qcow2 &>/dev/null
#修改配置文件
sed -i "s#$oldname#$newname#g" $newxml
sed -ri '/uuid|mac address/d' $newxml
#导入配置信息
virsh define $newxml &>/dev/null
#启动测试
virsh start $newname &>/dev/null
#登陆测试
virsh console $newname
#执行脚本
[root@kvm01 /opt]# sh link_clone.sh web01 lb01
Kvm 网络桥接
NAT 模式
[root@kvm01 /opt]# sysctl -a | grep net.ipv4.ip_forward
net.ipv4.ip_forward = 1
桥接 模式
#注意:停止 NetworkManager 服务
systemctl stop NetworkManager
systemctl disable NetworkManager
1、创建一个桥接网络
[root@kvm01 /opt]# virsh iface-bridge eth0 br0
Created bridge br0 with attached device eth0
Bridge interface br0 started
2、查看 eth0 网卡配置文件
[root@kvm01 /opt]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"
3、查看 br0 网卡配置文件
[root@kvm01 /opt]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.0.0.11"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
4、查看网桥信息
[root@kvm01 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c2935054a yes eth0
vnet0
virbr0 8000.525400607cf8 yes virbr0-nic
5、关闭虚拟机
[root@kvm01 /opt]# virsh shutdown web03
6、修改虚拟机配置文件
[root@kvm01 /opt]# virsh edit web03
<interface type='bridge'>
<source bridge='br0'/>
7、启动虚拟机
[root@kvm01 /opt]# virsh start web03
8、登陆虚拟机
[root@kvm01 /opt]# virsh console web03
9、修改虚拟机 eth0 网卡配置文件
[root@web01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="none"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="10.0.0.101"
PREFIX="24"
GATEWAY="10.0.0.254"
DNS1="223.5.5.5"
10、停止虚拟机 NetworkManager 服务
[root@web01 ~]# systemctl stop NetworkManager
[root@web01 ~]# systemctl disable NetworkManager
11、重启虚拟机网络服务
[root@web01 ~]# systemctl restart network
12、本地进行连接测试
ssh root@10.0.0.101
虚拟机 迁移
冷迁移
1、准备环境
2台 kvm 服务器
#安装并启动 Kvm
[root@kvm01 ~]# yum -y install libvirt virt-install qemu-kvm
[root@kvm01 ~]# systemctl start libvirtd.service
[root@kvm01 ~]# systemctl enable libvirtd.service
[root@kvm02 ~]# yum -y install libvirt virt-install qemu-kvm
[root@kvm02 ~]# systemctl start libvirtd.service
[root@kvm02 ~]# systemctl enable libvirtd.service
#注意:停止 NetworkManager 服务
systemctl stop NetworkManager
systemctl disable NetworkManager
#创建桥接网络
virsh iface-bridge eth0 br0
#查看 eth0 网卡配置文件
[root@kvm01 /opt]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"
[root@kvm01 /opt]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.0.0.12"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
DNS1=223.5.5.5
2、关闭的虚拟机
[root@kvm01 /opt]# virsh shutdown web03
#如果磁盘格式不是 qcow2 就需要先进行磁盘格式转换
qemu-img convert -f raw -O qcow2 web03.raw web03.qcow2
3、导出虚拟机配置
[root@kvm01 /opt]# virsh dumpxml web03 > web03.xml
4、将虚拟机磁盘文件和配置文件都传给等待迁移的 Kvm02 服务器
[root@kvm01 /opt]# scp -rp /opt/web03.* root@172.16.1.12:/opt
5、修改 Kvm02 服务器配置信息
[root@kvm02 ~]# vim /opt/web03.xml
<driver name='qemu' type='qcow2'/>
6、导入配置
[root@kvm02 ~]# virsh define /opt/web03.xml
systemctl restart libvirtd.service
7、启动并连接测试
[root@kvm02 ~]# virsh start web03
Domain web03 started
[root@kvm02 ~]# virsh list --all
Id Name State
----------------------------------------------------
1 web03 running
热迁移
1、环境准备
2台 Kvm 服务器,1台 NFS 服务器
[root@kvm01 ~]# yum -y install nfs-utils rpcbind
[root@kvm02 ~]# yum -y install nfs-utils rpcbind
[root@nfs ~]# yum -y install nfs-utils
2、nfs服务端进行配置
[root@nfs ~]# vim /etc/exports
/opt 10.0.0.0/24(rw,sync,no_root_squash,no_all_squash)
3、启动nfs服务
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# systemctl restart nfs
4、检查两台客户端是否可以进行挂载
[root@kvm01 /opt]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/opt 10.0.0.0/24
5、创建挂载目录并进行挂载
[root@kvm01 ~]# mkdir /kvm_disk
[root@kvm01 ~]# mount -t nfs 10.0.0.31:/opt /kvm_disk
6、新建一个 web04 虚拟机用做热迁移
#将 web03 虚拟机磁盘文件拷贝到挂载目录做为 web04 虚拟机的磁盘文件
[root@kvm01 ~]# cd /kvm_disk/
[root@kvm01 /kvm_disk]# cp -a /opt/web03.qcow2 /kvm_disk/web04.qcow2
#关闭 web03 虚拟机
[root@kvm01 /kvm_disk]# virsh shutdown web03
#导出 web03 虚拟机配置文件为 web04 虚拟机配置文件,并进行修改
[root@kvm01 /kvm_disk]# virsh dumpxml web03 > /opt/web04.xml
[root@kvm01 /kvm_disk]# virsh edit /opt/web04.xml
......
<name>web04</name>
......
<driver name='qemu' type='qcow2'/>
<source file='/kvm_disk/web04.qcow2'/>
......
<driver name='qemu' type='qcow2'/>
......
<interface type='bridge'>
......
<source bridge='br0'/>
注意:删除uuid和mac行
#导入 web04 虚拟机配置文件
[root@kvm01 /kvm_disk]# virsh define /opt/web04.xml
#启动 web04 虚拟机【此时的虚拟机的磁盘就是 /kvm_disk/web04.qcow2 】
[root@kvm01 /kvm_disk]# virsh start web04
7、进行hosts文件解析
#如果不设置解析就会报错
【error: Unable to resolve address 'kvm03' service '49152': Name or service not known】
[root@kvm01 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.12 kvm02
8、在 windows 主机上 测试虚拟机连接状态,观察会不会丢失数据包
ping -t 192.168.122.101
9、开始热迁移虚拟机
[root@kvm01 ~]# virsh migrate --live --verbose web04 qemu+ssh://10.0.0.12/system --unsafe
--live #热迁移
--verbose #显示迁移过程
web04 qemu+ssh://10.0.0.12/system
--unsafe #迁移时跳过安全检测
10、刚刚迁移的虚拟机在目录中是没有配置文件的【如果有也导出一个配置文件用做保存】,需要进行导出导入步骤
#查看运行中的虚拟机配置文件
[root@kvm02 kvm_disk]# ll /run/libvirt/qemu/web04.xml
-rw------- 1 root root 9610 Apr 9 11:13 /run/libvirt/qemu/web04.xml
#查看 /etc/libvirt/qemu/ 目录中虚拟机配置文件【发现没有配置文件】
[root@kvm02 kvm_disk]# ll /etc/libvirt/qemu/web04.xml
ls: cannot access /etc/libvirt/qemu/web04.xml: No such file or directory
#先 将运行中的虚拟机配置文件 导出至 /etc/libvirt/qemu/
[root@kvm02 kvm_disk]# virsh dumpxml web04 > /etc/libvirt/qemu/web04.xml
#再 导入虚拟机配置文件
[root@kvm02 kvm_disk]# virsh define /etc/libvirt/qemu/web04.xml
Domain web04 defined from /etc/libvirt/qemu/web04.xml
#验证虚拟机热迁移成功
[root@kvm02 kvm_disk]# virsh list
Id Name State
----------------------------------------------------
8 web04 running
virt-manager 管理虚拟机
命令行配置
1、安装图形界面
[root@kvm01 ~]# yum -y groupinstall "GNOME Desktop"
2、安装vnc的服务端
[root@kvm01 ~]# yum -y install tigervnc-server
3、给vnc设置个密码
[root@kvm01 ~]# vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
4、开启 vnc 【每次重启主机都需要开启才能使用】
[root@kvm01 ~]# vncserver :1
xauth: file /root/.Xauthority does not exist
New 'kvm01:1 (root)' desktop is kvm01:1
Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/kvm01:1.log
5、验证
[root@kvm01 ~]# netstat -lntp | grep vnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 125626/Xvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 125626/Xvnc
tcp6 0 0 :::5901 :::* LISTEN 125626/Xvnc
tcp6 0 0 :::6001 :::* LISTEN 125626/Xvnc
6、安装管理工具
[root@kvm01 ~]# yum install -y virt-manager
7、安装ssh插件
[root@kvm01 ~]# yum install -y openssh-askpass
图形界面使用
访问 10.0.0.12 主机的用户密码
热迁移
New host 【新主机】
Allow unsafe 【有些虚拟机配置导致不能迁移,如:磁盘缓存模式不是"none",此选项使 libvirt 跳过检查】
Temporary move 【临时迁移,关机后恢复】
热迁移成功
WebVirtMgr 管理 Kvm 虚拟机服务器
安装部署 WebVirtMgr
官网:https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr
首先要安装Kvm虚拟化环境,这里我将WebVirtMgr服务器和Kvm服务器放在同一台机器上部署的,即单机部署。
1、安装依赖
#安装epel源
[root@kvm02 ~]# yum install epel-release
#安装依赖及环境
[root@kvm02 ~]# yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx
#安装编译软件
[root@kvm02 ~]# yum -y install gcc python-devel
#安装numpy(Python进行科学计算的基础软件包)
[root@kvm02 ~]# pip install numpy
You are using pip version 8.1.2, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
#上面提示更新 pip
[root@kvm02 ~]# pip install --upgrade pip
#再执行安装numpy 【利用清华源加速 -i https://pypi.tuna.tsinghua.edu.cn/simple 】
[root@kvm02 ~]# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
2、安装Python需求环境
[root@kvm02 ~]# cd /usr/local/src
#从 GitHub 克隆数据
[root@kvm02 src]# git clone git://github.com/retspen/webvirtmgr.git
#安装 webvirtmgr
[root@kvm02 ~]# cd /usr/local/src/webvirtmgr
[root@kvm02 webvirtmgr]# pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
#初始化账号
[root@kvm02 webvirtmgr]# ./manage.py syncdb
WARNING:root:No local_settings file found.
Creating tables ...
......
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'): admin
Email address: admin@qq.com
Password: 123456
Password (again): 123456
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)
#生成配置文件
[root@kvm02 webvirtmgr]# ./manage.py collectstatic
WARNING:root:No local_settings file found.
......
Type 'yes' to continue, or 'no' to cancel: yes
......
#创建超级用户
[root@kvm02 webvirtmgr]# ./manage.py createsuperuser
WARNING:root:No local_settings file found.
Username (leave blank to use 'root'): qls
Email address: qls@qq.com
Password:123456
Password (again):123456
Superuser created successfully.
#生成秘钥对
[root@kvm02 ~]# ssh-keygen -t rsa
#发送公钥
[root@kvm02 ~]# ssh-copy-id 10.0.0.12
#设置加密连接
[root@kvm02 webvirtmgr]# ssh 10.0.0.12 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080
3、配置 Nginx
[root@kvm02 ~]# mkdir /var/www
[root@kvm02 ~]# cd /usr/local/src
[root@kvm02 /usr/local/src]# mv webvirtmgr/ /var/www
#配置nginx
[root@kvm02 ~]# vim /etc/nginx/conf.d/webvirtmgr.conf
server {
listen 80 default_server;
server_name $hostname;
#access_log /var/log/nginx/webvirtmgr_access_log;
location /static/ {
root /var/www/webvirtmgr/webvirtmgr; # or /srv instead of /var
expires max;
}
location ~ .*\.(js|css)$ {
proxy_pass http://127.0.0.1:8000;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
client_max_body_size 1024M; # Set higher depending on your needs
}
}
#注释掉配置文件中的 server 段
[root@kvm02 ~]# vim /etc/nginx/nginx.conf
#启动 nginx
systemctl start nginx
systemctl enable nginx
#设置权限
[root@kvm02 ~]# chown -R nginx:nginx /var/www/webvirtmgr
#编辑文件
[root@kvm02 ~]# vim /etc/supervisord.d/webvirtmgr.ini
[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx
[program:webvirtmgr-console]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=nginx
#启动 supervisord
systemctl start supervisord
systemctl enable supervisord
#更新
[root@kvm02 ~]# cd /var/www/webvirtmgr/
[root@kvm02 webvirtmgr]# git pull
Already up-to-date.
[root@kvm02 webvirtmgr]# ./manage.py collectstatic
......
Type 'yes' to continue, or 'no' to cancel: yes
......
[root@kvm02 webvirtmgr]# systemctl restart supervisord
webvirtmgr 页面配置远程连接 Kvm 虚拟服务器
1、被连接的 Kvm 虚拟服务器前提条件
1、安装并启动 libvirtd
#安装 Kvm
[root@kvm01 ~]# yum -y install libvirt virt-install qemu-kvm
#启动
[root@kvm01 ~]# systemctl start libvirtd
2、TCP 方式连接 Kvm 虚拟服务器
2.1、命令行配置
1、在 Kvm 虚拟服务器上的配置操作
#1.修改文件 /etc/sysconfig/libvirtd 用来启用tcp的端口
[root@kvm01 ~]# vim /etc/sysconfig/libvirtd
LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf #原来是注释行
LIBVIRTD_ARGS="--listen" #原来是注释行
#2.修改文件/etc/libvirt/libvirtd.conf 用来确定允许连接本机的IP和端口
[root@kvm01 ~]# vim /etc/libvirt/libvirtd.conf
[root@kvm01 ~]# grep -Ev '^$|^#' /etc/libvirt/libvirtd.conf #修改文件后用此命令来查看修改的内容
listen_tls = 0 #22行
listen_tcp = 1 #33行
tcp_port = "16509" #45行
listen_addr = "0.0.0.0" #55行
auth_tcp = "none" #158行
#3.重启 libvirtd 服务
[root@kvm01 ~]# systemctl restart libvirtd
#4.查看端口16509是否启动
[root@kvm01 ~]# netstat -lntp|grep 16509
tcp 0 0 0.0.0.0:16509 0.0.0.0:* LISTEN 14403/libvirtd
2、在 webvirtmgr 服务器进行连接测试 Kvm 服务器
#1.在 [webvirtmgr 主机] 连接 [Kvm 主机] 远程 libvirtd 查看信息
[root@kvm02 ~]# virsh -c qemu+tcp://10.0.0.11/system
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # 【表示成功了】
#2.更新【当不能登陆 webvirtmgr 页面的时候更新】
[root@kvm02 ~]# cd /var/www/webvirtmgr/
[root@kvm02 webvirtmgr]# git pull
Already up-to-date.
[root@kvm02 webvirtmgr]# ./manage.py collectstatic
......
Type 'yes' to continue, or 'no' to cancel: yes
......
#3.重启 supervisord 服务 【更新后重启服务】
[root@kvm02 webvirtmgr]# systemctl restart supervisord
2.2、webvirtmgr 页面设置
访问页面
http://10.0.0.12/login
登陆 webvirtmgr
创建新 Kvm 虚拟服务器的连接
TCP连接设置
Label #为创建连接的 Kvm 主机指定一个 名称 【可随意填写】
FQDN / IP #创建连接的 Kvm 主机的 IP
用户名 #安装 webvirtmgr 时初始化的管理员用户名: admin
密码 #安装 webvirtmgr 时初始化的管理员密码: 123456
添加 Kvm01 虚拟服务器成功
3、SSH 方式连接 kvm 主机
3.1、命令行配置
1、在 WebVirtMgr 服务器上操作
#1.切换到 nginx 用户 【此用户必须是 /etc/nginx/nginx.conf 配置文件中指定的用户 user nginx;】
[root@kvm02 ~]# su - nginx -s /bin/bash
#创建 nginx 用户的SSH秘钥对
[nginx@kvm02 ~]$ ssh-keygen
#2.创建SSH配置选项文件 config 并授权
[nginx@kvm02 ~]$ touch .ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
[nginx@kvm02 ~]$ chmod 0600 ~/.ssh/config
2、在 Kvm 服务器上操作
#1.创建用户 webvirtmgr 并设置用户密码,且添加附加组 libvirt
[root@kvm03 ~]# adduser webvirtmgr
[root@kvm03 ~]# passwd webvirtmgr
[root@kvm03 ~]# usermod -G libvirt -a webvirtmgr
3、在 WebVirtMgr 服务器上发送公钥给 Kvm 服务器的 webvirtmgr 用户,并测试 ssh 免密连接
[nginx@kvm02 ~]$ ssh-copy-id webvirtmgr@172.16.1.13
[nginx@kvm02 ~]$ ssh webvirtmgr@172.16.1.13
4、在 Kvm 服务器上创建 webvirtmgr 用户权限文件
[root@kvm03 ~]# vim /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
[Remote libvirt SSH access]
Identity=unix-user:webvirtmgr
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes
3.2、webvirtmgr 页面设置
webvirtmgr 页面添加新连接 【kvm03 服务器】
添加 Kvm03 虚拟服务器成功
webvirtmgr 页面创建存储
命令行配置
1、创建一个目录,将 NFS 服务器的共享目录挂载到该目录,并设置开机挂载
[root@kvm03 ~]# mkdir /kvm_disk
[root@kvm03 ~]# mount -t nfs 10.0.0.31:/opt /kvm_disk
[root@kvm03 ~]# vim /etc/fstab
10.0.0.31:/opt /kvm_disk nfs rw 0 0
webvirtmgr 页面设置
这里的“容量”就是所创建虚拟机的硬盘空间
设置 Kvm 虚拟机网卡的桥接模式
停止 NetworkManager 服务
systemctl stop NetworkManager
systemctl disable NetworkManager
创建一个桥接网络
[root@kvm03 ~]# virsh iface-bridge eth0 br0
Created bridge br0 with attached device eth0
Bridge interface br0 started
设置 Kvm 虚拟机网络池
创建成功
创建虚拟机
安装文件 CentOS-7-x86_64-DVD-1810.iso 提前拷贝至新建的存储池目录中【就是 NFS 挂载目录】
进入虚拟机系统安装界面,开始安装系统
安装虚拟机系统时 IP 地址的设置网段和 kvm 服务器 br0 网卡的网段一样
在命令行使用命令 ifconfig br0 查看网段信息
虚拟机控制台
系统快照
创建快照【关机才能创建】
查看快照【还原快照】
查看虚拟机的 CPU、网络、磁盘 使用率
设置虚拟机 CPU、内存、克隆
virt-manager、webvirtmgr 与 命令行 对比
虚拟机界面 | virt-manager | webvirtmgr | 命令行 |
---|---|---|---|
界面 | 一般 | 较好 | 不好看 |
查看信息 | 一般 | 较好 | 全面 |
克隆 | 选项多 | 只能完全克隆 | 全面 |
迁移 | 热迁移 | 点击迁移无效 | 全面 |
总结 | 功能全面 | 界面好看 | 功能全面,界面不好看,需要熟练使用命令 |