在 CentOS 7.x 系统上安装 KVM 系统

2021-06-22
4分钟阅读时长

选择一台配置还不错的主机作为宿主机,最小化安装好 CentOS 7.x 。以下,是在安装好了 CentOS 7.x 系统的服务器上安装 KVM 系统,并后续创建虚拟主机的过程。

安装需要的软件包

利用 Yum ,安装好以下软件:

  • qemu-kvm - KVM 主程序包
  • libvirt - C 语言工具包,提供 libvirt 服务
  • virt-install - 基于 libvirt 服务的创建虚拟机的命令行工具
  • virt-manager - 虚拟机管理工具
  • virt-viewer - 虚拟机查看程序,查看已经配置好的虚拟机
  • bridge-utils - 创建和管理桥接设备的工具

执行以下 yum 命令:

# yum install -y qemu-kvm libvirt virt-install virt-manager virt-viewer bridge-utils

设置网卡为桥接模式

这一步,是 KVM 系统成功安装的关键,选择桥接模式而不是选择 NAT 模式,就是因为它简单,而且,能充分利用本来的内网资源。

  1. 将 /etc/sysconfig/network-scripts/ 目录下的网卡配置文件(通常为 ifcfg-xxxx 形式的文件)复制一份为 ifcfg-br0 。有多网卡的服务器,根据网线连接的网口的具体情况选择配置文件。
  2. 将 ifcfg-br0 文件的内容,做如下修改(节选,详细内容要看具体的配置):
TYPE="Bridge"           # 桥接模式
BOOTPROTO="static"      # 静态协议

NAME="br0"              # 网口名称,和 ifcfg-br0 配置文件相匹配
ONBOOT="yes"            # 系统启动时即启用

# 以下是服务器作为宿主机在内网的 IP 地址,根据实际情况配置
IPADDR="<内网IP地址>"
PREFIX="24"
GATEWAY="<内网网关>"
DNS1="<DNS服务器>"
  1. 将原有的 ifcfg-xxxx 配置文件的内容调整为(部分调整,具体调整要根据实际情况):
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"

NAME="<原网口名称>"
UUID="<原uuid>"

DEVICE="<原设备名称>"
ONBOOT="yes"

#  添加这一行很关键,告知桥接设备是谁
BRIDGE="br0"

启动宿主机的服务

以上设置完成后,再检查下配置文件内容,然后启动 libvirt 服务。

# systemctl start libvirtd

然后,将服务设置为开机自启动服务

# systemctl enable libvirtd

至此,KVM 服务就算是基本安装完成了,很简单吧。

那么,虚拟机如何创建,又如何启动,以及如何管理和修改呢?

命令行下创建并安装虚拟机

  1. 先创建一个虚拟机用到的硬盘镜像
# qemu-img create /data/kvm/images/vm1.img 20G

上面这条命令,是创建一个大小为 20G 名称为 vm1.img 的虚拟机硬盘镜像文件,并存放在 /data/kvm/images 目录下。

qemu-img 命令能创建、转换和修改离线的虚拟机硬盘镜像,它能处理所有 QEMU 支持的镜像格式。最常用的镜像格式,是 qcow2 和 raw 两种。上面这条命令,默认创建的就是 raw 格式的硬盘镜像。

  1. 命令行安装虚拟机
# virt-install  --name vm1 \                                                    # 虚拟机实例的名称
                --memory 1024 \                                                 # 配置虚拟机实例使用的内存大小,以兆为单位
                --vcpus=1 \                                                     # 配置虚拟机的 CPU 核数
                --location /data/iso/CentOS-7-x86_64-Minimal-1908.iso \         # 指定安装的源,ISO 文件路径
                --disk path=/data/kvm/images/vm1.img \                          # 指定存储设备,硬盘镜像文件路径
                --network bridge=br0 \                                          # 网络接口
                --graphics none \                                               # 使用文本控制台方式进行安装
                --extra-args console=ttyS0                                      # 传递给安装内核的额外选项,命令行安装 CentOS 需要

以上命令,会开始进入一个 CentOS 7 的命令行的安装界面,安装完成后,可使用 Ctrl + ] 的方式来退出虚拟机的控制台。

命令行的虚拟机管理操作

  1. 查看所有的虚拟机实例
# virsh list --all
  1. 启动、重启、关闭虚拟机实例
# virsh start <name>                // 启动实例
# virsh reboot <name>               // 重启实例
# virsh shutdown <name>             // 正常关闭实例
# virsh destroy <name>              // 强制关闭实例
  1. 导出实例的定义信息文件
# virsh dumpxml <name>                      // 导出的信息显示在控制台
# virsh dumpxml <name> > xxxxx.xml          // 导出的信息写入 xxxxx.xml 文件
  1. 查看实例所用到的硬盘镜像文件
# virsh domblklist <name>
  1. 删除一个虚拟机实例
# virsh undefine <name>

需要注意的是,该删除操作,只是删除了虚拟机实例的定义(所以是 undefine 操作,在 /etc/libvirt/qemu 目录下的定义文件删除了),虚拟机所使用到的硬盘镜像文件还在,如果硬盘镜像文件不需要了,需要手动删除。

  1. 根据虚拟机实例的定义信息文件,恢复一个虚拟机实例
# virsh define <xxxxx.xml>

需要注意的是,该命令,仅定义(但是不启动)一个虚拟机的实例。根据指定的定义文件,定义一个虚拟机实例(默认不做校验,相当于就是把定义文件弄到了 /etc/libvirt/qemu 目录下,定义中的硬盘镜像文件的路径要对,否则,启动时会报错)。

  1. 连接到虚拟机的控制台
# virsh console <name>

同样的,使用 Ctrl + ] 的方式,退出虚拟机控制台,回到宿主机的命令行。

如果连接虚拟机的控制台时,敲回车键后,屏幕不显示出登录提示,那很可能是虚拟机(CentOS 7 等)中,未开启 ttyS0 等控制台进程。利用 SSH 等进入虚拟机系统后,开启控制台,并将其设置为自启动,即可在宿主机上进行连接了。参考以下的命令:

# systemctl start serial-getty@ttyS0.service
# systemctl enable serial-getty@ttyS0.service
  1. 克隆虚拟机

首先,要关闭要克隆的虚拟机,然后,使用以下命令克隆一个新的虚拟机。克隆的虚拟机,KVM 会改变其主机端的一些唯一设置,但是,虚拟主机中的内容不变。

# virt-clone --original <原虚拟机名> --name <新虚拟机名> --file /path/new-machine.img
  1. 重命名虚拟机

想要给虚拟机重新命名一个名字,也需要先关闭虚拟机,然后,执行下面的命令:

# virsh domrename <原虚拟机名> <新虚拟机名>
Avatar

JeffWu Author

数十年互联网从业经验,互联网全栈开发工程师,资深技术管理人员,资深游戏开发工程师。具有丰富的搭建海量数据处理系统的经验,大容量、高并发、高可靠线上运营系统的搭建和维护的丰富经验。