搭建kvm应用的服务器
虚拟化主要厂商及产品
系 列 PC/服务器版代表
- VMware VMware Workstation、vSphere
- Microsoft VirtualPC、Hyper-V
- RedHat KVM、RHEV
- Citrix Xen
- Oracle Oracle VM VirtualBox
红色标记的为企业现在最常用的
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 不用户交互
安装需要的软件:
yum install -y qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu
启动服务:systemctl start libvirtd
必备软件
• qemu-kvm – 为 kvm 提供底层仿真支持
• libvirt-daemon – libvirtd 守护进程,管理虚拟机
• libvirt-client – 用户端软件,提供客户端管理命令
• libvirt-daemon-driver-qemu – libvirtd 连接 qemu 的驱劢
在创建虚拟管理平台之前,先了解虚拟机的组成
虚拟机的组成
– 内核虚拟化模块(KVM)
– 系统设备仿真(QEMU)
– 虚拟机管理程序(LIBVIRT)
– 一个 XML 文件(虚拟机配置声明文件)– 位置 /etc/libvirt/qemu/ //配置文件
– 一个磁盘镜像文件(虚拟机的硬盘)– 位置 /var/lib/libvirt/images/ //后端存储
介绍下virsh的命令工具
格式: virsh 控制挃令 [虚拟机名称] [参数]
查看KVM节点(服务器)信息 – virsh nodeinfo
• 列出虚拟机 – virsh list [--all]
列出所有的虚拟机,虚拟机的状态有(8)种
runing 是运行状态 idel 是空闲状态
pause 暂停状态 shutdown 关闭状态
crash 虚拟机崩坏状态 daying 垂死状态
shut off 不运行完全关闭 pmsuspended客户机被关掉电源中中断
• 列出虚拟网络 – virsh net-list [--all]
• 查看挃定虚拟机的信息 – virsh dominfo 虚拟机名称
运行|重启|关闭挃定的虚拟机 – virsh start|reboot|shutdown 虚拟机名称
• 强制关闭挃定的虚拟机 – virsh destroy 虚拟机名称
• 将挃定的虚拟机设为开机自劢运行 – virsh autostart [--disable] 虚拟机名称
管理虚拟网卡的操作命令
*net-autostart (network) 自动启动网卡(default)
*net-create (file) 把配置加载到文件
*net-destory ( network ) 关闭网卡
*net-dumpxml(default) 把网卡配置加载到文件
*net-edit(default) 编辑网卡信息
*net-info(default) 网卡信息
*net-list 显示网卡
*net-uuid (default) 得到网卡的id
*net-name(id) 得到网卡的名字
*net-start (default) 开启网卡
连接本地/远程KVM
使用 virsh 客户端工具
– 连接本地
– virsh
– virsh# connect qemu:///system (默认选项)
– 连接远程
– virsh# connect qemu+ssh://user@ip.xx.xx.xx:port/system (连接时要先部署好ssh的免密登陆)
COW技术原理
• Copy On Write,写时复制– 直接映射原始盘的数据内容– 当原始盘的旧数据有修改时,在修改之前自劢将旧数据存入前端盘,对前端盘的修改不回写到原始盘
1,创建虚拟机的模板,首先要创建一个虚拟机(使用磁盘镜像文件格式)
虚拟机的磁盘镜像文件格式
特点\类型 RAW QCOW2
KVM默认 否 是
I/O效率 高 较高
占用空间 大 小
压缩 不支持 支持
后端盘复用 不支持 支持
快照 不支持 支持
所以我们使用的是QCOW2来传教虚拟机模板格式
使用的命令是qemu-img
• qemu-img 是虚拟机的磁盘管理命令
• qemu-img 支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等等
– qemu-img 命令 参数 块文件名称 大小
– 常用的命令有
– create 创建一个磁盘
– convert 转换磁盘格式
– info 查看磁盘信息
– snapshot 管理磁盘快照
1.1 创建新的镜像盘文件
– qemu-img create -f 格式 磁盘路径 大小
– qemu-img create -f qcow2 node.img 50G
cd /var/lib/libvirt/images
qemu-img create -f qcow2 node.qcow2 16G //创建后端存储,指定格式为qcow2
qemu-img info node.qcow2 //查询node镜像文件的信息
1.2 创建虚拟交换机
vim /etc/libvirt/qemu/networks/vbr.xml
<network>
<name>vbr</name>
<bridge name="vbr"/>
<forward mode="nat"/> //配置net可以使虚拟机上外网
<ip address="192.168.1.254" netmask="255.255.255.0">
<dhcp> //配置自动分配ip地址
<range start="192.168.1.100" end="192.168.1.200"/>
</dhcp>
</ip>
</network>
配置的虚拟网卡名为vbr自动分配网址端为100到200
原理:调用 dnsmasq 提供DNS、DHCP等功能
1.3配置模板,加载centos的系统,搭载在1.1建立的后端存储
在配置模板之前,物理机搭建好网络yum源
1.3.1搭建好ftp服务
yum install -y vsftp
vim /etc/vsftpd/vsftpd.conf
listen=YES
listen_ipv6=NO
systemctl enable vsftpd
systemctl start vsftpd
vsftp默认根目录为 /var/ftp
1.3.2搭建网络yum源
vim /etc/fstab
/iso/CentOS-7-x86_64-DVD-1708.iso /var/ftp/centos iso9660 defaults 0 0
或暂时挂在
mount –t iso9660 –o loop,ro /xx/xx.iso /var/ftp/centos7
1.4创建模板centos虚拟机
软件选择 minimal ,关闭 KDUMP ,选择手工分区,使用标准分区格式,只分一个根分区
对模板进行优化配置
第一步
1、禁用 selinux /etc/selinux/config
SELINUX=disabled
– 2、卸载防火墙与NetworkManager(主要是为openstack做准备的)
yum remove -y NetworkManager-* firewalld-* python-firewall
– 3、配置 yum 源
[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/centos7"
enabled=1
gpgcheck=0
软件包安装及yum配置
– 安装软件
yum install -y lftp – 1、yum 源导入公钥验证配置
gpgcheck=1 – 2、导入 gpg key rpm --import ftp://192.168.1.254/centos7/RPM-GPG-KEY-CentOS-7 (也是为openstack准备)
– 3、常用系统命令安装 yum install -y net-tools vim-enhanced bridge-utils psmisc
第二步
删除网络配置里的个性化信息
– /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes“
IPV6INIT="no"
TYPE="Ethernet"
BOOTPROTO=“dhcp“
– 禁用空路由
– /etc/sysconfig/network
NOZEROCONF="yes"
第三步
Console及磁盘分区配置
• 添加 Console 配置及初除磁盘分区里的个性化信息
vim /etc/default/grub
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=ttyS0,115200n8" (可以在物理机使用virsh console node1)
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true“
– 重新生成 grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
– /etc/fstab 文件中到 UUID 手工修改成系统设备
– blkid 查看 uuid 对应的磁盘设备,修改 fstab 文件
第四步
去除个性化信息
• 安装分区扩展软件
yum install -y cloud-utils-growpart
– 设置第一次开机自劢扩容根目录
chmod 755 /etc/rc.local
– 在 rc.local 里加入如下配置
### (作为下面清理的标记)
/usr/bin/growpart /dev/vda 1
/usr/sbin/xfs_growfs /
/usr/bin/sed '/^###/,$d' -i /etc/rc.d/rc.local
– 关闭虚拟机后执行信息清理工作
virt-sysprep -d node (virt-sysprep软件需要提前安装,可以通过yum provides virt-sysprep查询到软件名)
第五步
virsh undefine centos7
到此模板创建好了。
2,创建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'>
</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='vbx'/>
<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>
<memballoon model='virtio'></memballoon>
</devices>
</domain>
3,快速创建虚拟机
1,以我们刚刚装系统的模板为后端文件创建虚拟机
qemu-img create –b node.qcow2 –f qcow2 node1.img //创建node1虚拟机磁盘镜像
2,
virsh define node1.xml
virst start node1
virsh console node1
写在最后
使用 guestmount 工具
– 支持离线挂载 raw、qcow2 格式虚拟机磁盘
– 可以在虚拟机关机的情冴下,直接修改磁盘中的文档
– 方便对虚拟机定制、修复、脚本维护
!!! 需要注意 SELinux 机制的影响
如何挂载虚拟盘
• 基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点
[root@kvmsvr ~]# mkdir /mnt/kdisk
[root@kvmsvr ~]# guestmount -a node1.qcow2 -i /mnt/kdisk
[root@kvmsvr ~]# ls /mnt/kdisk
bin home media opt sbin tmp boot lib misc proc selinux usr
但是要修改模板需要chroot /mnt/kdisk 但是要注意所在的位置是模板机还是物理机
可以使用virt-manager 中加载重新配置再执行第四步,第五步。