搭建KVM服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搭建KVM服务器相关的知识,希望对你有一定的参考价值。

一、虚拟化所需软件概述
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 与用户交互
2、必备软件
? qemu-kvm
– 为 kvm 提供底层仿真支持
? libvirt-daemon
– libvirtd 守护进程,管理虚拟机
? libvirt-client
– 用户端软件,提供客户端管理命令
? libvirt-daemon-driver-qemu
– libvirtd 连接 qemu 的驱动
3、可选功能
– virt-install # 系统安装工具
– virt-manager # 图形管理工具
– virt-v2v # 虚拟机迁移工具
– virt-p2v # 物理机迁移工具
? 虚拟化平台的安装
yum install -y qemu-kvm
libvirt-daemon
libvirt-client
libvirt-daemon-driver-qemu
systemctl start libvirtd #启动服务
4、虚拟机的组成
--- 一个xml 文件(虚拟机配置声明文件)
---位置 /etc/libvirt/qemu/
---一个磁盘镜像文件(虚拟机的硬盘)
---位置 /var/lib/libvirt/images/
二、管理KVM平台
1、virsh命令工具的介绍
---提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..
---格式:virsh 控制指令 【虚拟机名称】【参数】
技术分享图片
? 查看KVM节点(服务器)信息
– virsh nodeinfo
? 列出虚拟机
– virsh list [--all] #--all列出所有包括关闭的虚拟机
? 列出虚拟网络
– virsh net-list [--all] #--all列出所有包括不活跃的网络
? 查看指定虚拟机的信息
– virsh dominfo 虚拟机名称
? 运行|重启|关闭指定的虚拟机
– virsh start|reboot|shutdown 虚拟机名称
? 强制关闭指定的虚拟机
– virsh destroy 虚拟机名称
? 将指定的虚拟机设为开机自劢运行
– virsh autostart [--disable] 虚拟机名称
2、常用镜像盘类型
? 虚拟机的磁盘镜像文件格式
技术分享图片
3、qemu-img
? qemu-img 是虚拟机的磁盘管理命令
? qemu-img 支持非常多的磁盘格式,例如 raw、qcow2、vdi、vmdk 等等
? qemu-img 命令格式
– qemu-img 命令 参数 块文件名称 大小
– 常用的命令有
– create 创建一个磁盘
– convert 转换磁盘格式
– info 查看磁盘信息
– snapshot 管理磁盘快照
? 创建新的镜像盘文件
– 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
4、COW技术原理
? Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
– 对前端盘的修改不回写到原始盘
技术分享图片
三、virsh虚拟机管理
1、连接本地/远程kvm
? 使用 virsh 客户端工具
– 连接本地
– virsh# connect qemu:///system (默认选项)
– 连接远程
– virsh# connect qemu+ssh://[email protected]:port/system
虚拟机远程管理
? 使用 virt-manager 客户端工具
– virt-manager 也可以通过 add connection 管理其它机器上的虚拟机,一般通过"remote tunnel over ssh"就可以了
– 需要注意的是 virt-manager 需要使用 ssh 免密码登录如果没有免密码登录需要单独安装 python 的 ssh 相关模块,这里我们可以使用部署 key 的方法解决
四、创建虚拟交换机
1、 libvirtd 网络接口
– 原理:调用 dnsmasq 提供DNS、DHCP等功能
– 创建配置文件 /etc/libvirt/qemu/networks/public.xml
<network>
<name>public</name>
<bridge name="public"/>
<forward mode="nat"/> # 使用nat转发模式
<ip address="192.168.1.254" netmask="255.255.255.0"> #交换机ip地址
<dhcp>
<range start="192.168.1.100" end="192.168.1.200"/>
</dhcp>
</ip>
</network>
2、网络管理
? virsh 管理虚拟网络
– net-list 查看虚拟网络
– net-define public.xml 创建虚拟网络 #注意配置文件路径
– net-undefine public 初除虚拟网络
– net-start public 启动虚拟网络
– net-destroy public 停止虚拟网络
– net-edit public 修改 public 网络的配置 #与vim打开用法一样
– net-autostart public 设置 public 虚拟网络开机自启动
五、XML管理
1、 xml配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置
– 默认位于 /etc/libvirt/qemu/虚拟机名.xml
2、导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml
3、 对虚拟机的配置进行调整
– 编辑: virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自动保存为新虚拟机配置
4、导入虚拟机
? 根据修改后的独立xml文件定义新虚拟机
– virsh define XML描述文件
[[email protected] ~]# virsh define /root/rhel-207.xml
定义域 rhel-207(从 /root/rhel-207.xml)
5、删除虚拟机
? 必要时可去除多余的xml配置
– 比如虚拟机改名的情冴
– 避免出现多个虚拟机的磁盘戒MAC地址冲突
– virsh undefine 虚拟机名
[[email protected] ~]# virsh undefine rhel7.2
域 rhel7.2 已经被取消定义
六、自定义虚拟机安装
1 、yum 源的安装和配置(网络yum源) #在物理机上操作
光盘作为 yum 源 CentOS7-1708.iso #将光盘挂载到ftp目录下centos7.0
---NOTE:有 repodata 目录的才可以作为 yum 源
2、自定义 yum 源 #需要有rpm包的目录
进入有rpm包的目录执行 createrepo . #创建一个repodata清单目录 ,如果有新rpm包增加可执行更新操作 createrepo --update .
3、virt-manager安装虚拟机
? 启动 virt-manager 软件,选择新建虚拟机
技术分享图片
? 选择网络安装源
技术分享图片
?创建硬盘文件
– qemu-img create -f qcow2 node.qcow2 16G
?选择创建的磁盘镜像文件
技术分享图片
? 网络选择自定义的 public
技术分享图片
– 软件选择 minimal ,关闭 KDUMP #安装语言要选择English
– 选择手工分区
技术分享图片
? 手动分区
技术分享图片
? 使用标准分区格式,只分一个根分区
技术分享图片
? 选取一个根分区,开启安装系统
技术分享图片
七、虚拟机模板制作
1、软件包安装及yum准备
? 把刚刚安装好的系统刜始化SELINUX=disabled
– 1、禁用 selinux /etc/selinux/config
SELINUX=disabled
– 2、卸载防火墙不NetworkManager
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 install -y lftp
– 1、yum 源导入公钥验证配置
gpgcheck=1
– 2、导入 gpg key
rpm--import ftp://192.168.1.254/centos7/RPM-GPG-KEY-CentOS-7
– 3、常用系统命令安装
yum install -y net-tools #ifconfig 命令 vim-enhanced #vim命令 bridge-utils psmisc #网桥配置工具
yum provides 命令 #可查询命令是由那个软件包提供的
网卡及配置文件设置
? 删除网络配置里的个性化信息
– /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
ONBOOT="yes“
IPV6INIT="no"
TYPE="Ethernet"
BOOTPROTO ="dhcp"
– 禁用空路由
– /etc/sysconfig/network
NOZEROCONF="yes"
Console及磁盘分区配置
? 添加 Console 配置及初除磁盘分区里的个性化信息
– /etc/default/grub
添加内容如下:
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0,console=ttyS0,115200n8"
GRUB_DISABLE_LINUX_UUID="true" #以阻止GRUB将传递参数 "root=UUID=xxx" 传递给 Linux
GRUB_ENABLE_LINUX_LABEL="true"
– 重新生成 grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
– /etc/fstab 文件中到 UUID 手工修改成系统设备
blkid 查看 uuid 对应的磁盘设备
修改 UUID=xxxxxx 为 /dev/vda1
去除个性化信息
? 安装分区扩展软件
yum install -y cloud-utils-growpart #设置第一次开机自动扩容根目录
chmod 755 /etc/rc.local
– 在 rc.local 里加入如下配置
###
/usr/bin/growpart /dev/vda 1 NOTE:1前边有空格
/usr/sbin/xfs_growfs / NOTE:/前边有空格
/usr/bin/sed ‘/^###/,$d‘ -i /etc/rc.d/rc.local
– 关闭虚拟机后执行信息清理工作
virt-sysprep -d node #物理机上执行
---XML详解
virsh dumpxml node &gt;demo.xml 备份虚拟机node的配置文件
virsh undefine node 清楚node配置
– xml 标签必须成对出现 如:&lt;keyword&gt; ... ... &lt;/keyword&gt;
– memory unit 虚拟机最大使用内存,可以手动调整
– currentmemory 创建虚拟机使用内存

<memory unit=‘KiB‘>2097152</memory>
<currentMemory unit=‘KiB‘>2097152</currentMemory>

– cpu 设置,可以调整
&lt;vcpu placement=‘static‘&gt;2&lt;/vcpu&gt;
– 资源设置,可以初除
&lt;resource&gt; ... ... &lt;/resource&gt;
– 系统配置及引导设备,丌需要修改

<os>
<boot dev=‘hd‘/>
</os>

– 电源相关配置无需修改
&lt;features&gt; ... ... &lt;/features&gt;

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

<cpu ... ... />
<cpu mode=‘host-passthrough‘></cpu>

– 时钟相关配置,可以删除
&lt;clock ... ... &lt;/clock&gt;
– 重启,关机,强制关闭对应命令

<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>

– 内存及硬盘休眠相关设置,可以删除
&lt;pm&gt; ... ... &lt;/pm&gt;
– 仿真设备相关配置
&lt;devices&gt; ... ... &lt;/devices&gt;
– 其他配置
– 驱动安全标签,可删除
&lt;seclabel&gt; ... ... &lt;/seclabel&gt;
? 仿真设备配置
– 总线地址,别名配置,都可以删除

<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‘ 数位板,可以初除XML详解
? 仿真设备配置
– type=‘mouse‘ 鼠标,保留
– type=‘keyboard‘ 键盘保留
– graphics、video 图形图像显卡相关配置,可以删除
– sound 声卡相关配置,可以删除
– redirdev 设备重定向,可以删除
– memballoon 内存气泡,可以动态调整内存
八、快速创建虚拟机
1、例如创建虚拟机 node1
---创建磁盘文件

cd /var/lib/libvirt/images
   qemu-img create -b node.img -f qcow2 node1.img 32G

---创建虚拟机配置文件
```sed ‘s/node/node1/‘ node.xml >/etc/libvirt/qemu/node1.xml
virsh define /etc/libvirt/qemu/node1.xml

   --启动虚拟机
   `virsh start node1`
   --连接查看虚拟机  
     `virsh console node1`
      --添加网卡

<interface type=‘bridge‘>
<source bridge=‘private1‘/>
<model type=‘virtio‘/>
</interface>

--添加硬盘

cd /var/lib/libvirt/images/
qemu-img create -f qcow2 disk.img 20G

<disk type=‘file‘ device=‘disk‘>
<driver name=‘qemu‘ type=‘qcow2‘/>
<source file=‘/var/lib/libvirt/images/disk.img‘/>
<target dev=‘vdb‘ bus=‘virtio‘/>
</disk>



九、配置虚拟机系统有奇招
? 使用 guestmount 工具
   – 支持离线挂载 raw、qcow2 格式虚拟机磁盘
   – 可以在虚拟机关机的情冴下,直接修改磁盘中的文档
    – 方便对虚拟机定制、修复、脚本维护
   !!! NOTE: SELinux 机制的影响,后端盘一旦修改,所有前端盘都不可用。
     ? 基本用法
      guestmount -a 虚拟机磁盘路径 -i /挂载点

以上是关于搭建KVM服务器的主要内容,如果未能解决你的问题,请参考以下文章

搭建KVM服务器

搭建kvm虚拟化平台和管理kvm虚拟化平台

搭建kvm虚拟化平台和管理kvm虚拟化平台

搭建kvm虚拟化平台和管理kvm虚拟化平台

KVM搭建与应用

Kvm虚拟机上实现amp分机搭建