[步骤] KVM 的安装

步骤一:系统环境要求

服务器系统要配置好可用的软件源

步骤二:安装 KVM

2.1 安装 KVM 服务端软件

如果是 CentOS Linux 7 & RHEL 7:

# yum -y install qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu

如果是 Rocky Linux 8 & RHEL 8:

# dnf groupinstall 'Virtualization Host'

如果是 openSUSE & SLES:

# zypper in -t pattern kvm_server

2.2 安装 KVM 客户端软件

如果是 CentOS Linux 7 & RHEL 7:

# yum -y install virt-install virt-manager virt-viewer virt-v2v

如果是 Rocky Linux 8 & RHEL 8:

# dnf -y install virt-install virt-manager virt-viewer virt-v2v

如果是 openSUSE & SLES:

# zypper in -t pattern kvm_tools

步骤三:启动 KVM

如果是 Rocky Linux 8 & RHEL 8:

# systemctl start libvirtd-manager

如果是较老版本的 openSUSE & SLES:

# systemctl start libvirtd

如果是较新版本的 openSUSE & SLES:

# systemctl start virtqemud

步骤四:使用 KVM

# virt-manager


补充:
1) qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu 是必选安装项
2) virt-install(虚拟机命令行安装器) virt-manager(虚拟机图形界面安装和管理器) virt-v2v(虚拟机导入器) 是可选安装项

[步骤] KVM 虚拟机模板的创建 (CentOS Linux 7 版)

注意:

在创建 KVM 虚拟机之前要先安装 KVM 并创建 KVM 虚拟网络

镜像准备:

在 CentOS 官网上下载安装系统所需要的镜像:

https://centos.org/download/

正文:

步骤一:理解创建 KVM 虚拟机模板的目的

主要用于批量克隆出新的 KVM 机器,节约创建新虚拟机的时间

步骤二:为这个虚拟机创建硬盘文件

2.1 创建硬盘文件

(只在真机上执行以下步骤)

# qemu-img create -f qcow2 /var/lib/libvirt/images/template_centos_7_10g.qcow2 10G

(补充:这里以创建 10G 大小的 template_centos_7_10g.qcow2 硬盘文件为例)

2.2 确认硬盘文件已创建

(只在真机上执行以下步骤)

# ls /var/lib/libvirt/images/ | grep template_centos_7_10g.qcow2

(补充:这里以确认 template_centos_7_10g.qcow2 硬盘文件为例)

步骤三:使用 KVM 和刚刚创建的硬盘文件新安装一台虚拟机

3.1 启动 KVM 的 virt-manager

(只在真机上执行以下步骤)

# virt-manager

3.2 在 virt-manager 上的左上角点击文件之后 “点击新建虚拟机”

(只在真机上执行以下步骤)

(步骤略)

3.2.1 选择以本地安装介质的方式安装系统

(只在真机上执行以下步骤)

(图:1)
3.2.2 选择安装系统的系统镜像

(只在真机上执行以下步骤)

(图:2)

(补充:这里以使用 centos-7.6-x86_64-everythin-1810.iso 系统镜像为例)

3.2.3 设置内存大小和 CPU 核心数
(只在真机上执行以下步骤)
(图:3)

(补充:这里以设置 2048 MiB 内容和 2 核 CPU 为例)

3.2.4 选择用刚刚创建的硬盘文件来安装系统

(只在真机上执行以下步骤)

(图:4)

(补充:这里以使用 template_centos_7_10g.qcow2 硬盘文件为例)

3.2.5 给虚拟机命名为并选择虚拟网络

(注意:虚拟网络必须提前创建好)

(只在真机上执行以下步骤)

(图:5)

(补充:这里以将虚拟机命名为 template_centos_7_10g 并使用 vlan001 网络为例)

3.2.6 开始安装系统

(只在真机上执行以下步骤)

(图:6)
3.2.7 选择系统语言

(只在真机上执行以下步骤)

(图:7)
3.2.8 之后进行系统配置界面

(只在真机上执行以下步骤)

需要手动配置的地方有两个:
1) “INSTALLATION DESTINATION”
2) “KDUMP”
分别点击以后就可以配置了

3.2.8.1 通过 “INSTALLATION DESTINATION” 对硬盘进行分区

(只在真机上执行以下步骤)

(补充:完成后点击左上角的 “DONE”)

(注意:只分一个分区,只设置一个挂载点挂载到根 “/”,使用标准硬盘类型,硬盘格式设置为 XFS)

(图:8)
(图:9)
3.2.8.2 取消 “KDUMP”

(只在真机上执行以下步骤)

(补充:完成后点击左上角的 “DONE”)

(图:10)
3.2.9 设置完成之后点击右下角的 “Begin installation”

(只在真机上执行以下步骤)

(图:11)
3.2.10 在安装的过程中设置 root 密码,安装完成后重启

(只在真机上执行以下步骤)

(图:12)
3.2.11 在安装系统的过程中需要注意的内容总结

1) 一定要使用刚刚创建的 /var/lib/libvirt/images/template_centos_7_10g.qcow2 作为安装虚拟机的硬件文件
2) 虚拟机网络 “vlan001” 要提前创建好
3) 只分一个分区,只设置一个挂载点挂载到根 “/”,使用标准硬盘,硬盘格式是 XFS
4) 取消 “KDUMP”

步骤四:进入新创建虚拟机修改配置

4.1 修改网卡个性化设置

4.1.1 修改网卡配置文件

(只在虚拟机上执行以下步骤)

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

将全部内容进行如下修改:

BOOTPROTO=dhcp
NAME=eth0
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
4.1.2 使修改的网卡配置生效

(只在虚拟机上执行以下步骤)

# service network restart

4.2 禁用 selinux

(只在虚拟机上执行以下步骤)

# vi /etc/selinux/config

将全部内容进行如下修改:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

4.3 禁用空路由

(只在虚拟机上执行以下步骤)

# vi /etc/sysconfig/network

将全部内容修改如下:

# Created by anaconda
NOZEROCONF="yes"

4.4 添加 Console 配置

4.4.1 修改 grub 内核配置文件

(只在虚拟机上执行以下步骤)

# vi /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 --unit=1 --speed=115200"
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
GRUB_DISABLE_RECOVERY="true"
4.4.2 使修改的 grub 内核配置生效

(只在虚拟机上执行以下步骤)

# grub2-mkconfig -o grub

4.5 将系统自动挂载的硬盘从使用 UUID 换成硬件路径

4.5.1 显示根 “/” 分区的 UUID

(只在虚拟机上执行以下步骤)

# blkid
/dev/vda1: UUID="84ccf593-a924-4949-b7ef-584be43deef5" TYPE="xfs"

(补充:这里的 UUID 是: 84ccf593-a924-4949-b7ef-584be43deef5)

4.5.2 在自动挂载文件里将根 “/” 分区的 UUID 换成硬件路径
# vi /etc/fstab

将以下内容:

......
UUID=84ccf593-a924-4949-b7ef-584be43deef5 /                   xfs     defaults        0 0

(补充:这里的 UUID 是: 84ccf593-a924-4949-b7ef-584be43deef5)

修改为:

......
/dev/vda1 /                   xfs     defaults        0 0

4.6 删除不用的程序

(只在虚拟机上执行以下步骤)

# yum -y remove NetworkManager-* firewalld-* python-firewall

4.7 配置虚拟系统的 yum 源

4.7.1 备份旧 yum 源
4.7.1.1 创建备份目录

(只在虚拟机上执行以下步骤)

# mkdir /etc/yum.repos.d/backup
4.7.1.2 备份旧 yum 源

(只在虚拟机上执行以下步骤)

# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
4.7.2 创建新的 yum 源文件

(只在虚拟机上执行以下步骤)

# vi /etc/yum.repos.d/lan.repo

创建以下内容:

[CentOS7]
name=CentOS7
baseurl=http://192.168.100.254/CentOS7/
enabled=1
gpgcheck=0

(注意:这里的 http://192.168.1.250/centos7/ 需要根据真实环境的情况进行更改)

4.7.3 删除旧的 yum 源数据

(只在虚拟机上执行以下步骤)

# yum clean all
4.7.4 刷新新的 yum 源

(只在虚拟机上执行以下步骤)

# yum repolist

4.8 对虚拟系统进行升级

(只在虚拟机上执行以下步骤)

# yum -y update

4.9 进行分区扩展

4.9.1 安装分区扩展软件

(只在虚拟机上执行以下步骤)

# yum install -y cloud-utils-growpart
4.9.2 给开机自启配置文件相应的权限

(只在虚拟机上执行以下步骤)

# chmod 755 /etc/rc.local
4.9.3 设置开机自动扩容根 “/” 目录

(只在虚拟机上执行以下步骤)

# vi /etc/rc.local

添加以下内容:

/usr/bin/growpart /dev/vda1 
/usr/sbin/xfs_growfs /
4.10 修改虚拟机系统的名称

(只在虚拟机上执行以下步骤)

# vi /etc/hostname

将全部内容修改如下:

template_centos_7_10g
4.11 启用 serial 服务实现通过 virsh console 命令控制虚拟机

(只在虚拟机上执行以下步骤)

# systemctl start serial-getty@ttyS0
# systemctl enable serial-getty@ttyS0
4.12 清除虚拟系统的历史命令

(只在虚拟机上执行以下步骤)

# history -c
4.13 关闭虚拟机

(只在虚拟机上执行以下步骤)

# poweroff

步骤五:在真机上对虚拟机进行清理优化

(只在真机上执行以下步骤)

# sudo virt-sysprep -d template_centos_7_10g

(补充:这里以清理 template_centos_7_10g 虚拟机为例)


注意:如果此命令不存在
1) CentOS 系统的话需要安装 libguestfs-tools
2) openSUSE 系统的话需要安装 guestfs-tools

步骤六:此时就可以将此虚拟机的硬件文件作为模块进行批量克隆虚拟机了

(只在真机上执行以下步骤)

(步骤略)

[步骤] KVM 虚拟网络的创建

注意:

在创建 KVM 虚拟机网络之前要先安装 KVM

正文:

步骤一:制作 1 个 KVM 虚拟网络的配置文件

# vim /etc/libvirt/qemu/networks/vlan001.xml

创建以下内容:

<network>
  <name>vlan001</name>
  <bridge name="vlan001"/>
  <forward mode="nat"/>
  <ip address="192.168.1.254" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.1.100" end="192.168.1.200"/>
    </dhcp>
  </ip>
</network>


补充:这里以创建
1) 名为 vlan001
2) dhcp 是 192.168.1.100 到 192.168.1.100
3) 子网掩码是 255.255.255.0
4) 本机 IP 地址是 192.168.1.254
5) 配置文件是 /etc/libvirt/qemu/networks/vlan001.xml 为例

步骤二:将刚刚制作的虚拟网络配置文件定义到 KVM 里

# virsh net-define /etc/libvirt/qemu/networks/vlan001.xml

(补充:这里的虚拟网络配置文件是 /etc/libvirt/qemu/networks/vlan001.xml)

步骤三:启动刚刚定制的虚拟网络

# virsh net-start vlan001

(补充:这里的虚拟网络名是 vlan001)

步骤四:确认刚刚定制的虚拟网络

# ifconfig

步骤五:将刚刚定制的虚拟网络设置为开机自动启动

# virsh net-autostart vlan001

(补充:这里的虚拟网络名是 vlan001)

[模板] KVM 虚拟机的 XML 模板

注意:

此模板只用于参考

# vi /etc/libvirt/qemu/template_centos_7_10g.xml

创建以下内容:

<domain type='kvm'>
  <name>node</name>
  <memory unit='KB'>1524000</memory>
  <currentMemory unit='KB'>1524000</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='template_centos_7_10g'>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/bin/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/template_centos_7_10g.img'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='bridge'>
      <source bridge='vlan001'/>
      <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>

(补充:这里以给 template_centos_7_10g 创建一个虚拟机模板为例)