一、搭建KVM服务器

1.虚拟化概述

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

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

 

 

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

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


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 控制挃令 [虚拟机名称] [参数]
[[email protected] ~]# 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. 常用镜像盘类型

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

 

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,写时复制
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自劢将旧数据存入前端盘   (写都是在前端盘进行操作的,原始盘必须是只读的)
– 对前端盘的修改不回写到原始盘

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

 

 

三、virsh虚拟机管理

1. 连接本地/远程KVM
• 使用 virsh 客户端工具
1.1连接本地
– virsh
– virsh# connect qemu:///system (默认选项)
1.2 连接远程
– virsh# connect
qemu+ssh://[email protected]: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,可自劢保存为新虚拟机配置
[[email protected] ~]# 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描述文件
[[email protected] ~]# virsh define /root/rhel-207.xml
定义域 rhel-207(从 /root/rhel-207.xml)

[[email protected] ~]# virsh list --all

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

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

virsh undefine 虚拟机名
[[email protected] ~]# 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 软件,选择新建虚拟机

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

2.2 选择网络安装源

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

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

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

2.4 网络选择自定义的 vbr

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

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

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

 2.6 手动分区

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

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

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

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

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

 

 

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 配置及初除磁盘分区里的个性化信息         注释:不建议手写;错了虚拟机就启不起来了

[[email protected] ~]# 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 文件
[[email protected] ~]# vim /etc/fstab
/dev/vda1     /          xfs     defaults        0 0

7. 去除个性化信息
• 安装分区扩展软件
[[email protected] ~]# 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

[[email protected] ~]#  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退出

 

 

 

 

相关文章:

  • 2022-12-23
  • 2021-08-21
  • 2021-05-20
  • 2021-08-05
  • 2021-04-02
  • 2021-08-07
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-28
  • 2021-12-15
  • 2021-06-29
  • 2021-11-20
  • 2021-08-24
  • 2021-11-23
  • 2021-06-07
相关资源
相似解决方案