PRF:20180704 Setup Headless Virtualization Server Using KVM In Ubuntu 18.04 LTS.md

@qhwdw
This commit is contained in:
Xingyu.Wang 2018-10-16 11:19:58 +08:00
parent 25d6fcf84b
commit 5ed3897ed9

View File

@ -3,7 +3,7 @@
![](https://www.ostechnix.com/wp-content/uploads/2016/11/kvm-720x340.jpg) ![](https://www.ostechnix.com/wp-content/uploads/2016/11/kvm-720x340.jpg)
我们已经讲解了 [在 Ubuntu 18.04 上配置 Oracle VirtualBox][1] 无头服务器。在本教程中,我们将讨论如何使用 **KVM** 去配置无头虚拟化服务器以及如何从一个远程客户端去管理访客系统。正如你所知道的KVM**K** ernel-based **v** irtual **m** achine是开源的 Linux 的全虚拟化。使用 KVM我们可以在几分钟之内很轻松地将任意 Linux 服务器转换到一个完全的虚拟化环境中,以及部署不同种类的虚拟机,比如 GNU/Linux、*BSD、Windows 等等。 我们已经讲解了 [在 Ubuntu 18.04 无头服务器上配置 Oracle VirtualBox][1] 。在本教程中,我们将讨论如何使用 **KVM** 去配置无头虚拟化服务器以及如何从一个远程客户端去管理访客系统。正如你所知道的KVM**K**ernel-based **v**irtual **m**achine是开源的是 Linux 的全虚拟化。使用 KVM我们可以在几分钟之内很轻松地将任意 Linux 服务器转换到一个完全的虚拟化环境中,以及部署不同种类的虚拟机,比如 GNU/Linux、*BSD、Windows 等等。
### 使用 KVM 配置无头虚拟化服务器 ### 使用 KVM 配置无头虚拟化服务器
@ -13,86 +13,81 @@
**KVM 虚拟化服务器:** **KVM 虚拟化服务器:**
* **宿主机操作系统** 最小化安装的 Ubuntu 18.04 LTS没有 GUI * **宿主机操作系统** 最小化安装的 Ubuntu 18.04 LTS没有 GUI
* **宿主机操作系统的 IP 地址**192.168.225.22/24 * **宿主机操作系统的 IP 地址**192.168.225.22/24
* **访客操作系统**(它将运行在 Ubuntu 18.04 的宿主机上Ubuntu 16.04 LTS server * **访客操作系统**(它将运行在 Ubuntu 18.04 的宿主机上Ubuntu 16.04 LTS server
**远程桌面客户端:** **远程桌面客户端:**
* **操作系统** Arch Linux * **操作系统** Arch Linux
### 安装 KVM ### 安装 KVM
首先,我们先检查一下我们的系统是否支持硬件虚拟化。为此,需要在终端中运行如下的命令: 首先,我们先检查一下我们的系统是否支持硬件虚拟化。为此,需要在终端中运行如下的命令:
``` ```
$ egrep -c '(vmx|svm)' /proc/cpuinfo $ egrep -c '(vmx|svm)' /proc/cpuinfo
``` ```
假如结果是 **zero (0)**,说明系统不支持硬件虚拟化,或者在 BIOS 中禁用了虚拟化。进入你的系统 BIOS 并检查虚拟化选项,然后启用它。 假如结果是 `zero (0)`,说明系统不支持硬件虚拟化,或者在 BIOS 中禁用了虚拟化。进入你的系统 BIOS 并检查虚拟化选项,然后启用它。
假如结果是 **1** 或者 **更大的数**,说明系统将支持硬件虚拟化。然而,在你运行上面的命令之前,你需要始终保持 BIOS 中的虚拟化选项是启用的。 假如结果是 `1` 或者 **更大的数**,说明系统将支持硬件虚拟化。然而,在你运行上面的命令之前,你需要始终保持 BIOS 中的虚拟化选项是启用的。
或者,你也可以使用如下的命令去验证它。但是为了使用这个命令你需要先安装 KVM。 或者,你也可以使用如下的命令去验证它。但是为了使用这个命令你需要先安装 KVM。
``` ```
$ kvm-ok $ kvm-ok
``` ```
**示例输出:** 示例输出:
``` ```
INFO: /dev/kvm exists INFO: /dev/kvm exists
KVM acceleration can be used KVM acceleration can be used
``` ```
如果输出的是如下这样的错误,你仍然可以在 KVM 中运行访客虚拟机,但是它的性能将非常差。 如果输出的是如下这样的错误,你仍然可以在 KVM 中运行访客虚拟机,但是它的性能将非常差。
``` ```
INFO: Your CPU does not support KVM extensions INFO: Your CPU does not support KVM extensions
INFO: For more detailed results, you should run this as root INFO: For more detailed results, you should run this as root
HINT: sudo /usr/sbin/kvm-ok HINT: sudo /usr/sbin/kvm-ok
``` ```
当然,还有其它的方法来检查你的 CPU 是否支持虚拟化。更多信息参考接下来的指南。 当然,还有其它的方法来检查你的 CPU 是否支持虚拟化。更多信息参考接下来的指南。
- [如何知道 CPU 是否支持虚拟技术VT](https://www.ostechnix.com/how-to-find-if-a-cpu-supports-virtualization-technology-vt/)
接下来,安装 KVM 和在 Linux 中配置虚拟化环境所需要的其它包。 接下来,安装 KVM 和在 Linux 中配置虚拟化环境所需要的其它包。
在 Ubuntu 和其它基于 DEB 的系统上,运行如下命令: 在 Ubuntu 和其它基于 DEB 的系统上,运行如下命令:
``` ```
$ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker $ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker
``` ```
KVM 安装完成后,启动 libvertd 服务(如果它没有启动的话): KVM 安装完成后,启动 libvertd 服务(如果它没有启动的话):
``` ```
$ sudo systemctl enable libvirtd $ sudo systemctl enable libvirtd
$ sudo systemctl start libvirtd $ sudo systemctl start libvirtd
``` ```
### 创建虚拟机 ### 创建虚拟机
所有的虚拟机文件和其它的相关文件都保存在 **/var/lib/libvirt/** 下。ISO 镜像的默认路径是 **/var/lib/libvirt/boot/** 所有的虚拟机文件和其它的相关文件都保存在 `/var/lib/libvirt/` 下。ISO 镜像的默认路径是 `/var/lib/libvirt/boot/`
首先,我们先检查一下是否有虚拟机。查看可用的虚拟机列表,运行如下的命令: 首先,我们先检查一下是否有虚拟机。查看可用的虚拟机列表,运行如下的命令:
``` ```
$ sudo virsh list --all $ sudo virsh list --all
``` ```
**示例输出:** 示例输出:
``` ```
Id Name State Id Name State
---------------------------------------------------- ----------------------------------------------------
``` ```
![][3] ![][3]
@ -102,14 +97,14 @@ Id Name State
现在,我们来创建一个。 现在,我们来创建一个。
例如,我们来创建一个有 512 MB 内存、1 个 CPU 核心、8 GB 硬盘的 Ubuntu 16.04 虚拟机。 例如,我们来创建一个有 512 MB 内存、1 个 CPU 核心、8 GB 硬盘的 Ubuntu 16.04 虚拟机。
``` ```
$ sudo virt-install --name Ubuntu-16.04 --ram=512 --vcpus=1 --cpu host --hvm --disk path=/var/lib/libvirt/images/ubuntu-16.04-vm1,size=8 --cdrom /var/lib/libvirt/boot/ubuntu-16.04-server-amd64.iso --graphics vnc $ sudo virt-install --name Ubuntu-16.04 --ram=512 --vcpus=1 --cpu host --hvm --disk path=/var/lib/libvirt/images/ubuntu-16.04-vm1,size=8 --cdrom /var/lib/libvirt/boot/ubuntu-16.04-server-amd64.iso --graphics vnc
``` ```
请确保在路径 **/var/lib/libvirt/boot/** 中有一个 Ubuntu 16.04 的 ISO 镜像文件,或者在上面命令中给定的其它路径中有相应的镜像文件。 请确保在路径 `/var/lib/libvirt/boot/` 中有一个 Ubuntu 16.04 的 ISO 镜像文件,或者在上面命令中给定的其它路径中有相应的镜像文件。
**示例输出:** 示例输出:
``` ```
WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer. WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer.
@ -121,37 +116,38 @@ Domain installation still in progress. Waiting for installation to complete.
Domain has shutdown. Continuing. Domain has shutdown. Continuing.
Domain creation completed. Domain creation completed.
Restarting guest. Restarting guest.
``` ```
![][4] ![][4]
我们来分别讲解以上的命令和看到的每个选项的作用。 我们来分别讲解以上的命令和看到的每个选项的作用。
* **name** : 这个选项定义虚拟机名字。在我们的案例中,这个虚拟机的名字是 **Ubuntu-16.04** * `name`:这个选项定义虚拟机名字。在我们的案例中,这个虚拟机的名字是 `Ubuntu-16.04`
* **ram=512** : 给虚拟机分配 512MB 内存。 * `ram=512`:给虚拟机分配 512MB 内存。
* **vcpus=1** : 指明虚拟机中 CPU 核心的数量。 * `vcpus=1`:指明虚拟机中 CPU 核心的数量。
* **cpu host** : 通过暴露宿主机 CPU 的配置给访客系统来优化 CPU 属性。 * `cpu host`:通过暴露宿主机 CPU 的配置给访客系统来优化 CPU 属性。
* **hvm** : 要求完整的硬件虚拟化。 * `hvm`:要求完整的硬件虚拟化。
* **disk path** : 虚拟机硬盘的位置和大小。在我们的示例中,我分配了 8GB 的硬盘。 * `disk path`:虚拟机硬盘的位置和大小。在我们的示例中,我分配了 8GB 的硬盘。
* **cdrom** : 安装 ISO 镜像的位置。请注意你必须在这个位置真的有一个 ISO 镜像。 * `cdrom`:安装 ISO 镜像的位置。请注意你必须在这个位置真的有一个 ISO 镜像。
* **graphics vnc** : 允许 VNC 从远程客户端访问虚拟机。 * `graphics vnc`:允许 VNC 从远程客户端访问虚拟机。
### 使用 VNC 客户端访问虚拟机 ### 使用 VNC 客户端访问虚拟机
现在,我们在远程桌面系统上使用 SSH 登入到 Ubuntu 服务器上(虚拟化服务器),如下所示。 现在,我们在远程桌面系统上使用 SSH 登入到 Ubuntu 服务器上(虚拟化服务器),如下所示。
在这里,**sk** 是我的 Ubuntu 服务器的用户名,而 **192.168.225.22** 是它的 IP 地址。 ```
$ ssh sk@192.168.225.22
```
在这里,`sk` 是我的 Ubuntu 服务器的用户名,而 `192.168.225.22` 是它的 IP 地址。
运行如下的命令找出 VNC 的端口号。我们从一个远程系统上访问虚拟机需要它。 运行如下的命令找出 VNC 的端口号。我们从一个远程系统上访问虚拟机需要它。
``` ```
$ sudo virsh dumpxml Ubuntu-16.04 | grep vnc $ sudo virsh dumpxml Ubuntu-16.04 | grep vnc
``` ```
**示例输出:** 示例输出:
``` ```
<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'> <graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
@ -160,10 +156,10 @@ $ sudo virsh dumpxml Ubuntu-16.04 | grep vnc
![][5] ![][5]
记下那个端口号 **5900**。安装任意的 VNC 客户端应用程序。在本指南中,我们将使用 TigerVnc。TigerVNC 是 Arch Linux 默认仓库中可用的客户端。在 Arch 上安装它,运行如下命令: 记下那个端口号 `5900`。安装任意的 VNC 客户端应用程序。在本指南中,我们将使用 TigerVnc。TigerVNC 是 Arch Linux 默认仓库中可用的客户端。在 Arch 上安装它,运行如下命令:
``` ```
$ sudo pacman -S tigervnc $ sudo pacman -S tigervnc
``` ```
在安装有 VNC 客户端的远程客户端系统上输入如下的 SSH 端口转发命令。 在安装有 VNC 客户端的远程客户端系统上输入如下的 SSH 端口转发命令。
@ -172,11 +168,11 @@ $ sudo pacman -S tigervnc
$ ssh sk@192.168.225.22 -L 5900:127.0.0.1:5900 $ ssh sk@192.168.225.22 -L 5900:127.0.0.1:5900
``` ```
再强调一次,**192.168.225.22** 是我的 Ubuntu 服务器(虚拟化服务器)的 IP 地址。 再强调一次,`192.168.225.22` 是我的 Ubuntu 服务器(虚拟化服务器)的 IP 地址。
然后,从你的 Arch Linux客户端打开 VNC 客户端。 然后,从你的 Arch Linux客户端打开 VNC 客户端。
在 VNC 服务器框中输入 **localhost:5900**,然后点击 **Connect** 按钮。 在 VNC 服务器框中输入 `localhost:5900`,然后点击 “Connect” 按钮。
![][6] ![][6]
@ -188,43 +184,42 @@ $ ssh sk@192.168.225.22 -L 5900:127.0.0.1:5900
同样的,你可以根据你的服务器的硬件情况配置多个虚拟机。 同样的,你可以根据你的服务器的硬件情况配置多个虚拟机。
或者,你可以使用 **virt-viewer** 实用程序在访客机器中安装操作系统。virt-viewer 在大多数 Linux 发行版的默认仓库中都可以找到。安装完 virt-viewer 之后,运行下列的命令去建立到虚拟机的访问连接。 或者,你可以使用 `virt-viewer` 实用程序在访客机器中安装操作系统。`virt-viewer` 在大多数 Linux 发行版的默认仓库中都可以找到。安装完 `virt-viewer` 之后,运行下列的命令去建立到虚拟机的访问连接。
``` ```
$ sudo virt-viewer --connect=qemu+ssh://192.168.225.22/system --name Ubuntu-16.04 $ sudo virt-viewer --connect=qemu+ssh://192.168.225.22/system --name Ubuntu-16.04
``` ```
### 管理虚拟机 ### 管理虚拟机
使用管理用户接口 virsh 从命令行去管理虚拟机是非常有趣的。命令非常容易记。我们来看一些例子。 使用管理用户接口 `virsh` 从命令行去管理虚拟机是非常有趣的。命令非常容易记。我们来看一些例子。
查看运行的虚拟机,运行如下命令: 查看运行的虚拟机,运行如下命令:
``` ```
$ sudo virsh list $ sudo virsh list
``` ```
或者, 或者,
``` ```
$ sudo virsh list --all $ sudo virsh list --all
``` ```
**示例输出:** 示例输出:
``` ```
Id Name State Id Name State
---------------------------------------------------- ----------------------------------------------------
2 Ubuntu-16.04 running 2 Ubuntu-16.04 running
``` ```
![][9] ![][9]
启动一个虚拟机,运行如下命令: 启动一个虚拟机,运行如下命令:
``` ```
$ sudo virsh start Ubuntu-16.04 $ sudo virsh start Ubuntu-16.04
``` ```
或者,也可以使用虚拟机 id 去启动它。 或者,也可以使用虚拟机 id 去启动它。
@ -232,94 +227,85 @@ $ sudo virsh start Ubuntu-16.04
![][10] ![][10]
正如在上面的截图所看到的Ubuntu 16.04 虚拟机的 Id 是 2。因此启动它时你也可以像下面一样只指定它的 ID。 正如在上面的截图所看到的Ubuntu 16.04 虚拟机的 Id 是 2。因此启动它时你也可以像下面一样只指定它的 ID。
``` ```
$ sudo virsh start 2 $ sudo virsh start 2
``` ```
重启动一个虚拟机,运行如下命令: 重启动一个虚拟机,运行如下命令:
``` ```
$ sudo virsh reboot Ubuntu-16.04 $ sudo virsh reboot Ubuntu-16.04
``` ```
**示例输出:** 示例输出:
``` ```
Domain Ubuntu-16.04 is being rebooted Domain Ubuntu-16.04 is being rebooted
``` ```
![][11] ![][11]
暂停一个运行中的虚拟机,运行如下命令: 暂停一个运行中的虚拟机,运行如下命令:
``` ```
$ sudo virsh suspend Ubuntu-16.04 $ sudo virsh suspend Ubuntu-16.04
``` ```
**示例输出:** 示例输出:
``` ```
Domain Ubuntu-16.04 suspended Domain Ubuntu-16.04 suspended
``` ```
让一个暂停的虚拟机重新运行,运行如下命令: 让一个暂停的虚拟机重新运行,运行如下命令:
``` ```
$ sudo virsh resume Ubuntu-16.04 $ sudo virsh resume Ubuntu-16.04
``` ```
**示例输出:** 示例输出:
``` ```
Domain Ubuntu-16.04 resumed Domain Ubuntu-16.04 resumed
``` ```
关闭一个虚拟机,运行如下命令: 关闭一个虚拟机,运行如下命令:
``` ```
$ sudo virsh shutdown Ubuntu-16.04 $ sudo virsh shutdown Ubuntu-16.04
``` ```
**示例输出:** 示例输出:
``` ```
Domain Ubuntu-16.04 is being shutdown Domain Ubuntu-16.04 is being shutdown
``` ```
完全移除一个虚拟机,运行如下的命令: 完全移除一个虚拟机,运行如下的命令:
``` ```
$ sudo virsh undefine Ubuntu-16.04 $ sudo virsh undefine Ubuntu-16.04
$ sudo virsh destroy Ubuntu-16.04 $ sudo virsh destroy Ubuntu-16.04
``` ```
**示例输出:** 示例输出:
``` ```
Domain Ubuntu-16.04 destroyed Domain Ubuntu-16.04 destroyed
``` ```
![][12] ![][12]
关于它的更多选项,建议你去查看 man 手册页: 关于它的更多选项,建议你去查看 man 手册页:
``` ```
$ man virsh $ man virsh
``` ```
今天就到这里吧。开始在你的新的虚拟化环境中玩吧。对于研究和开发者、以及测试目的KVM 虚拟化将是很好的选择,但它能做的远不止这些。如果你有充足的硬件资源,你可以将它用于大型的生产环境中。如果你还有其它好玩的发现,不要忘记在下面的评论区留下你的高见。 今天就到这里吧。开始在你的新的虚拟化环境中玩吧。对于研究和开发者、以及测试目的KVM 虚拟化将是很好的选择,但它能做的远不止这些。如果你有充足的硬件资源,你可以将它用于大型的生产环境中。如果你还有其它好玩的发现,不要忘记在下面的评论区留下你的高见。
谢谢! 谢谢!
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
via: https://www.ostechnix.com/setup-headless-virtualization-server-using-kvm-ubuntu/ via: https://www.ostechnix.com/setup-headless-virtualization-server-using-kvm-ubuntu/
@ -327,7 +313,7 @@ via: https://www.ostechnix.com/setup-headless-virtualization-server-using-kvm-ub
作者:[SK][a] 作者:[SK][a]
选题:[lujun9972](https://github.com/lujun9972) 选题:[lujun9972](https://github.com/lujun9972)
译者:[qhwdw](https://github.com/qhwdw) 译者:[qhwdw](https://github.com/qhwdw)
校对:[校对者ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出