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

一、搭建KVM服务器

1.虚拟化概述

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

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第1张图片

 

 

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

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第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. 常用镜像盘类型

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第3张图片

 

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控制 镜像管理及虚拟机快建技术_第4张图片

 

 

三、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
  
vbr
 
                                           
//支持nat
          

           
 // ip地址的分配范围


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进行修改;修改不生效

rhel-207
76d5dc2c-5eef-4e30-8b6c-e58851814f84


.. ..


.. ..

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

]# setenforce 0

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

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

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第5张图片

2.2 选择网络安装源

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第6张图片

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

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第7张图片

2.4 网络选择自定义的 vbr

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第8张图片

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

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第9张图片

 2.6 手动分区

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第10张图片

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

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第11张图片

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

KVM构建管理 virsh控制 镜像管理及虚拟机快建技术_第12张图片

 

 

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

node //虚拟机名字

2097152 //虚拟机可使用的最大内存

2097152 //虚拟机启动时使用的内存

2 //cpu核数

 

hvm

//从硬盘引导启动

 

//电源配置

 

// 1*2=2----》与第5行一致。可删除,系统会自动计算

destroy

restart

restart

/usr/libexec/qemu-kvm

 

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

 

//交换机名字

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

 

//console串口连接配置

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 标签必须成对出现

... ...

 

centos7.0

8413f30a-c978-4796-a28f-8ba9fe74b759

2097152

2097152

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

– uuid 去掉

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

– currentmemory 创建虚拟机使用内存

 

– cpu 设置,可以调整

2

– 资源设置,可以初除

... ...

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

– 电源相关配置无需修改

... ...

 

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

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

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

destroy

restart

destroy

 

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

... ...

– 仿真设备相关配置

... ...

– 其他配置

– 驱劢安全标签,可初除

... ...

 

仿真设备配置

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

– 硬盘配置,需要修改

/usr/libexec/qemu-kvm

– 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退出

 

 

 

 

 

你可能感兴趣的:(KVM构建管理 virsh控制 镜像管理及虚拟机快建技术)