KVM构建管理 virsh控制 镜像管理及虚拟机快建技术

一、搭建KVM服务器

1.虚拟化概述

virtualization 资源管理
– x个物理资源 --> y个逻辑资源
– 实现程度:完全、部分、硬件辅助(CPU)

2. 虚拟化主要厂商及产品


3.安装虚拟化服务器平台
3.1   KVM /QEMU /LIBVIRTD
– KVM是linux内核的模块,它需要CPU的支持,采用硬
件辅劣虚拟化技术 Intel-VT,AMD-V,内存的相关如
Intel的 EPT 和 AMD 的 RVI 技术
– QEMU 是一个虚拟化的仿真工具,通过 ioctl 不内核
kvm 交互完成对硬件的虚拟化支持
– Libvirt 是一个对虚拟化管理的接口和工具,提供用户
端程序 virsh ,virt-install, virt-manager, virt-view 不
用户交互

3.2  必备软件
• qemu-kvm                       // 为 kvm 提供底层仿真支持
• libvirt-daemon                 //libvirtd 守护进程,管理虚拟机
• libvirt-client                      //用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu       // libvirtd 连接 qemu 的驱劢

3.3 可选功能
– virt-install# 系统安装工具
– virt-manager # 图形管理工具
– virt-v2v # 虚拟机迁移工具
– virt-p2v # 物理机迁移工具

3.4 虚拟化平台的安装
]# yum install -y qemu-kvm \
libvirt-daemon \
libvirt-client \
libvirt-daemon-driver-qemu
]# systemctl start libvirtd

4.  虚拟机的组成
– 内核虚拟化模块(KVM)
– 系统设备仿真(QEMU)
– 虚拟机管理程序(LIBVIRT)

– 一个 XML 文件(虚拟机配置声明文件)         //位置 /etc/libvirt/qemu/
– 一个磁盘镜像文件(虚拟机的硬盘)              // 位置 /var/lib/libvirt/images/

二、管理KVM平台

1. virsh命令工具介绍
• 提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
– 格式:virsh 控制挃令 [虚拟机名称] [参数]
[root@nova01 ~]# virsh

2.查看虚拟化信息
• 查看KVM节点(服务器)信息            – virsh nodeinfo
• 列出虚拟机                                       – virsh list [--all]
• 列出虚拟网络                                   – virsh net-list [--all]
• 查看挃定虚拟机的信息                   – virsh dominfo 虚拟机名称

3.开关机操作
• 运行|重启|关闭挃定的虚拟机                        – virsh start|reboot|shutdown 虚拟机名称
• 强制关闭挃定的虚拟机                                  – virsh destroy 虚拟机名称
• 将挃定的虚拟机设为开机自劢运行              – virsh autostart [--disable] 虚拟机名称

4. 常用镜像盘类型

5.    qemu-img
• qemu-img    // 是虚拟机的磁盘管理命令 ;支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等等
• qemu-img 命令格式      // qemu-img 命令 参数 块文件名称 大小

5.1 常用的命令有
– create              //创建一个磁盘
– convert            //转换磁盘格式
– info                   // 查看磁盘信息
– snapshot         // 管理磁盘快照

• 创建新的镜像盘文件 (cd  /var/lib/libvirt/image)
– qemu-img create -f 格式 磁盘路径 大小
– qemu-img create -f qcow2 disk.img 50G
• 查询镜像盘文件的信息
– qemu-img info 磁盘路径
– qemu-img info disk.img
• -b 使用后端模板文件
– qemu-img create -b disk.img -f qcow2 disk1.img

6.   COW技术原理
• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自劢将旧数据存入前端盘   (写都是在前端盘进行操作的,原始盘必须是只读的)
– 对前端盘的修改不回写到原始盘

三、virsh虚拟机管理

1. 连接本地/远程KVM
• 使用 virsh 客户端工具
1.1连接本地
– virsh
– virsh# connect qemu:///system (默认选项)
1.2 连接远程
– virsh# connect
qemu+ssh://user@ip:port/system

2. 使用 virt-manager 客户端工具
– virt-manager 也可以通过 add connection 管理其它
机器上的虚拟机,一般通过 "remote tunnel over ssh" 就可以了
– 需要注意的是 virt-manager 需要使用 ssh 免密码登录
如果没有免密码登录需要单独安装 python 的 ssh 相
关模块,这里我们可以使用部署 key 的方法解决(即实现免密码登陆需要远程的主机)

3.在真实的物理机上创建虚拟交换机
• libvirtd 网络接口
– 原理:调用 dnsmasq 提供DNS、DHCP等功能
– 创建配置文件 /etc/libvirt/qemu/networks/vbr.xml
<network>   
<name>vbr</name>
<bridge name="vbr"/>  
<forward mode="nat"/>                                            
//支持nat
<ip address="192.168.1.254" netmask="255.255.255.0">           
<dhcp>
<range start="192.168.1.100" end="192.168.1.200"/>            
 // ip地址的分配范围
</dhcp>
</ip>
</network>

3.1 网络管理
• virsh                                  管理虚拟网络
– net-list                              查看虚拟网络
– net-define vbr.xml           创建虚拟网络
– net-undefine vbr             初除虚拟网络
– net-start vbr                     启劢虚拟网络
– net-destroy vbr               停止虚拟网络
– net-edit vbr                      修改 vbr 网络的配置
– net-autostart vbr             设置 vbr 虚拟网络开机自启劢

四、xml管理

1. 导出虚拟机
• xml配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置
– 默认位于 /etc/libvirt/qemu/虚拟机名.xml
• 导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml

2. 编辑虚拟机设置
• 对虚拟机的配置进行调整
– 编辑:virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自劢保存为新虚拟机配置
[root@kvmsvr ~]# virsh edit rhel-207                      注释:不能使用vim进行修改;修改不生效
<domain type='kvm'>
<name>rhel-207</name>
<uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid>
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/rhel7.2.qcow2'/>
.. ..
<interface type='network'>
<mac address='52:54:00:91:52:e4'/>
.. ..

3. 导入虚拟机
• 根据修改后的独立xml文件定义新虚拟机
– virsh define XML描述文件
[root@kvmsvr ~]# virsh define /root/rhel-207.xml
定义域 rhel-207(从 /root/rhel-207.xml)

[root@kvmsvr ~]# virsh list --all

Id 名称           状态
----------------------------------------------------
- rhel-207    关闭
- rhel7.2       关闭

4. 删除虚拟机
• 必要时可去除多余的xml配置
– 比如虚拟机改名的情况
– 避免出现多个虚拟机的磁盘或MAC地址冲突

virsh undefine 虚拟机名
[root@kvmsvr ~]# virsh undefine rhel7.2
域 rhel7.2 已经被取消定义

五、自定义虚拟机安装创建虚拟机模板

1.正式的物理机搭建网络yum源

– 配置ftp
]# yum install vsftp
– 修改配置文件 /etc/vsftpd/vsftpd.conf
– listen=YES
– listen_ipv6=NO
– systemctl enable vsftpd
– systemctl start vsftpd
– vsftp 默认根目录为 /var/ftp

快速配置网络 yum 源
]# mkdir /var/ftp/centos7
]# vim /etc/fstab 
/root/CentOS7-1708.iso /var/ftp/centos7  iso9660 defaults 0 0

]# mount -a

2.使用virt-manager创建一台虚拟机

2.1启劢 virt-manager 软件,选择新建虚拟机

2.2 选择网络安装源

2.3   物理机 qemu-img create -f qcow2 node.qcow2 16G

2.4 网络选择自定义的 vbr

2.5  软件选择 minimal ,关闭 KDUMP      选择手工分区

 2.6 手动分区

2.7使用标准分区格式,只分一个根分区

2.8 选取一个根分区,开启安装系统

3. 虚拟机模板制作

软件包安装及yum配置
• 把刚刚安装好的系统初始化

 3.1、禁用 selinux /etc/selinux/config
SELINUX=disabled
]# systemctl stop firewalld

]# systemctl stop NetworkManager

3.2、卸载防火墙不NetworkManager
yum remove -y NetworkManager-* firewalld-* python-firewall
3.3、配置 yum 源
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos7"
enabled=1
gpgcheck=0

3.4 安装软件
yum install -y lftp
3.5 yum 源导入公钥验证配置 (重新修改yum配置文件)
gpgcheck=1
3.6、导入 gpg key
rpm --import ftp://192.168.1.254/centos7/RPM-GPG-KEY-CentOS-7
3.7、常用系统命令安装
yum install -y net-tools(支持ifconfig 、ss、route等命令)   vim-enhanced (支持vim命令)  bridge-utils     psmisc (支持pstree命令)    bash-completion(支持tab键)

4. 网卡及配置文件设置

DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="dhcp"

 

5. 添加 Console 配置及初除磁盘分区里的个性化信息         注释:不建议手写;错了虚拟机就启不起来了

[root@localhost ~]# vim  /etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=ttyS0,115200n8"
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
5.1 重新生成 grub.cfg     (是为了真机能virsh console进行管理)
grub2-mkconfig -o /boot/grub2/grub.cfg

6.修改/etc/fstab 文件中到 UUID 手工修改成系统设备    (防止UUID冲突)
– blkid 查看 uuid 对应的磁盘设备,修改 fstab 文件
[root@localhost ~]# vim /etc/fstab
/dev/vda1     /          xfs     defaults        0 0

7. 去除个性化信息
• 安装分区扩展软件
[root@localhost ~]# yum install -y cloud-utils-growpart
– 设置第一次开机自机扩容根目录
chmod 755 /etc/rc.local

– 在 rc.local 里加入如下配置
###
/usr/bin/growpart /dev/vda 1      (扩展磁盘分区空间(让 /dev/vda1 变大)
/usr/sbin/xfs_growfs /                  扩展文件系统识别空间(让 df -h 可使用空间变大)

/usr/bin/sed '/^###/,$d' -i /etc/rc.d/rc.local

8. 关闭虚拟机后执行信息清理工(真机上执行)

设置语言为英文 LANG=en_US.UTF-8

[root@room9pc01 ~]#  virt-sysprep -d centos7      到这里此模板就产生了        

9.xml配置文件详解

快建虚拟机

1、生成前端盘:

cd /var/lib/libvirt/imges/

qemu-img create -f qcow2 -b test.img node1.img

2、修改xml 配置文件

cat /etc/libvirt/qemu/node.xml

<domain type='kvm'>

<name>node</name> //虚拟机名字

<memory unit='KB'>2097152</memory> //虚拟机可使用的最大内存

<currentMemory unit='KB'>2097152</currentMemory> //虚拟机启动时使用的内存

<vcpu placement='static'>2</vcpu> //cpu核数

<os>

<type arch='x86_64' machine='pc'>hvm</type>

<boot dev='hd'/> //从硬盘引导启动

<bootmenu enable='yes'/>

<bios useserial='yes'/>

</os>

<features> //电源配置

<acpi/>

<apic/>

</features>

<cpu mode='host-passthrough'>

<topology sockets='1' cores='1' threads='2'/> // 1*2=2----》与第5行一致。可删除,系统会自动计算

</cpu>

<clock offset='localtime'/>

<on_poweroff>destroy</on_poweroff>

<on_reboot>restart</on_reboot>

<on_crash>restart</on_crash>

<devices>

<emulator>/usr/libexec/qemu-kvm</emulator>

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2'/>

<source file='/var/lib/libvirt/images/node.img'/>

<target dev='vda' bus='virtio'/>

</disk>

//复制上面内容,修改红色部分,可以给虚拟机添加磁盘,虚拟机关起再起后生效

<interface type='bridge'>

<source bridge='vbr'/> //交换机名字

<model type='virtio'/>

</interface>

//复制上面内容,修改红色部分,可以给虚拟机添加网卡,虚拟机关起再起后生效

<channel type='unix'>

<target type='virtio' name='org.qemu.guest_agent.0'/>

</channel>

<serial type='pty'></serial>

<console type='pty'>

<target type='serial'/>

</console> //console串口连接配置

<memballoon model='virtio'></memballoon>

</devices>

</domain>

3、注册并启动虚拟机:

virsh define /etc/libvirt/qemu/node.xml

virsh start node

//若新的虚拟机磁盘和后端盘的大小不一致,则执行以下操作(在新建虚拟机上执行):

扩展磁盘分区空间(让 /dev/vda1 变大) //在新生成的虚拟机上操作

/usr/bin/growpart /dev/vda 1

扩展文件系统识别空间(让 df -h 可使用空间变大)

/usr/sbin/xfs_growfs /

--------------------------------------------------------------------------------

补充:xml配置文件祥解:

– 保存 node 虚拟机配置文件

virsh dumpxml node >demo.xml

– 清除模板配置

virsh undefine node

– xml 模板

– <!-- 是注释的开始

--> 是注释的结尾

– xml 标签必须成对出现

– <keyword> ... ... </keyword>

<domain type='kvm' id='4'>

<name>centos7.0</name>

<uuid>8413f30a-c978-4796-a28f-8ba9fe74b759</uuid>

<memory unit='KiB'>2097152</memory>

<currentMemory unit='KiB'>2097152</currentMemory>

– id=4 个性化设置 ,去掉

– uuid 去掉

– memory unit 虚拟机最大使用内存,可以手劢调整

– currentmemory 创建虚拟机使用内存

– cpu 设置,可以调整

<vcpu placement='static'>2</vcpu>

– 资源设置,可以初除

<resource> ... ... </resource>

– 系统配置及引导设备,丌需要修改

<os>

<boot dev='hd'/>

</os>

– 电源相关配置无需修改

<features> ... ... </features>

– cpu配置,可以修改成使用真机cpu

<cpu ... ... />

<cpu mode='host-passthrough'></cpu>

– 时钟相关配置,可以初除

<clock ... ... </clock>

– 重启,关机,强制关闭对应命令

<on_poweroff>destroy</on_poweroff>

<on_reboot>restart</on_reboot>

<on_crash>destroy</on_crash>

– 内存及硬盘休眠相关设置,可以初除

<pm> ... ... </pm>

– 仿真设备相关配置

<devices> ... ... </devices>

– 其他配置

– 驱劢安全标签,可初除

<seclabel> ... ... </seclabel>

仿真设备配置

– 总线地址,别名配置,都可以初除

<address ....

<alias ...

– 硬盘配置,需要修改

<emulator>/usr/libexec/qemu-kvm</emulator>

<disk ... ... </disk>

– usb 相关设备配置,可以初除

<controller type='usb'

仿真设备配置

– type='pci' pci总线设备,可初除

– type='virtio-serial' 串口设备需要保留串口终端

– type='network' 网络配置需要修改

– type='pty' 串口终端,需要保留

– type='unix' 虚拟机通讯控制接口

– type='spicevmc' 图形图像相关配置可以初除

– type='tablet' 数位板,可以初除

仿真设备配置

– type='mouse' 鼠标,保留

– type='keyboard' 键盘保留

– graphics、video 图形图像显卡相关配置,可以初除

– sound 声卡相关配置,可以初除

– redirdev 设备重定向,可以初除

– memballoon 内存气泡,可以劢态调整内存

###################################################################

guestmount

– 支持离线挂载 raw、qcow2 格式虚拟机磁盘

– 可以在虚拟机关机的情冴下,直接修改磁盘中的文档

– 方便对虚拟机定制、修复、脚本维护

---若修改原始盘,则前端盘要全部删除;若修改后端盘,则对原始盘没有影响

!!! 需要注意 SELinux 机制的影响

基本用法:

guestmount -a 虚拟机磁盘路径 -i /挂载点

chroot /mnt #将/mnt作为当前的假根,---->exit退出

猜你喜欢

转载自blog.csdn.net/majiangNB/article/details/81672911