Linux中國

在 Ubuntu 18.04 LTS 上使用 KVM 配置無頭虛擬化伺服器

我們已經講解了 在 Ubuntu 18.04 無頭伺服器上配置 Oracle VirtualBox 。在本教程中,我們將討論如何使用 KVM 去配置無頭虛擬化伺服器,以及如何從一個遠程客戶端去管理訪客系統。正如你所知道的,KVMKernel-based virtual machine)是開源的,是 Linux 上的全虛擬化。使用 KVM,我們可以在幾分鐘之內,很輕鬆地將任意 Linux 伺服器轉換到一個完全的虛擬化環境中,以及部署不同種類的虛擬機,比如 GNU/Linux、*BSD、Windows 等等。

使用 KVM 配置無頭虛擬化伺服器

我在 Ubuntu 18.04 LTS 伺服器上測試了本指南,但是它在其它的 Linux 發行版上也可以使用,比如,Debian、CentOS、RHEL 以及 Scientific Linux。這個方法完全適合哪些希望在沒有任何圖形環境的 Linux 伺服器上,去配置一個簡單的虛擬化環境。

基於本指南的目的,我將使用兩個系統。

KVM 虛擬化伺服器:

  • 宿主機操作系統 – 最小化安裝的 Ubuntu 18.04 LTS(沒有 GUI)
  • 宿主機操作系統的 IP 地址:192.168.225.22/24
  • 訪客操作系統(它將運行在 Ubuntu 18.04 的宿主機上):Ubuntu 16.04 LTS server

遠程桌面客戶端:

  • 操作系統 – Arch Linux

安裝 KVM

首先,我們先檢查一下我們的系統是否支持硬體虛擬化。為此,需要在終端中運行如下的命令:

$ egrep -c '(vmx|svm)' /proc/cpuinfo

假如結果是 zero (0),說明系統不支持硬體虛擬化,或者在 BIOS 中禁用了虛擬化。進入你的系統 BIOS 並檢查虛擬化選項,然後啟用它。

假如結果是 1 或者 更大的數,說明系統將支持硬體虛擬化。然而,在你運行上面的命令之前,你需要始終保持 BIOS 中的虛擬化選項是啟用的。

或者,你也可以使用如下的命令去驗證它。但是為了使用這個命令你需要先安裝 KVM。

$ kvm-ok

示例輸出:

INFO: /dev/kvm exists
KVM acceleration can be used

如果輸出的是如下這樣的錯誤,你仍然可以在 KVM 中運行訪客虛擬機,但是它的性能將非常差。

INFO: Your CPU does not support KVM extensions
INFO: For more detailed results, you should run this as root
HINT: sudo /usr/sbin/kvm-ok

當然,還有其它的方法來檢查你的 CPU 是否支持虛擬化。更多信息參考接下來的指南。

接下來,安裝 KVM 和在 Linux 中配置虛擬化環境所需要的其它包。

在 Ubuntu 和其它基於 DEB 的系統上,運行如下命令:

$ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker

KVM 安裝完成後,啟動 libvertd 服務(如果它沒有啟動的話):

$ sudo systemctl enable libvirtd
$ sudo systemctl start libvirtd

創建虛擬機

所有的虛擬機文件和其它的相關文件都保存在 /var/lib/libvirt/ 下。ISO 鏡像的默認路徑是 /var/lib/libvirt/boot/

首先,我們先檢查一下是否有虛擬機。查看可用的虛擬機列表,運行如下的命令:

$ sudo virsh list --all

示例輸出:

Id Name State
-------------------------------------------------```

![](/data/attachment/album/201810/16/111912jdm41ud448cc8fcx.png)

正如上面的截屏,現在沒有可用的虛擬機。

現在,我們來創建一個。

例如,我們來創建一個有 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


請確保在路徑 `/var/lib/libvirt/boot/` 中有一個 Ubuntu 16.04 的 ISO 鏡像文件,或者在上面命令中給定的其它路徑中有相應的鏡像文件。

示例輸出:

WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING No console to launch for the guest, defaulting to --wait -1

Starting install...
Creating domain... | 0 B 00:00:01
Domain installation still in progress. Waiting for installation to complete.
Domain has shutdown. Continuing.
Domain creation completed.
Restarting guest.


![](/data/attachment/album/201810/16/111914sd7988j3x983zx8d.png)

我們來分別講解以上的命令和看到的每個選項的作用。

* `–name`:這個選項定義虛擬機名字。在我們的案例中,這個虛擬機的名字是 `Ubuntu-16.04`。
* `–ram=512`:給虛擬機分配 512MB 內存。
* `–vcpus=1`:指明虛擬機中 CPU 核心的數量。
* `–cpu host`:通過暴露宿主機 CPU 的配置給訪客系統來優化 CPU 屬性。
* `–hvm`:要求完整的硬體虛擬化。
* `–disk path`:虛擬機硬碟的位置和大小。在我們的示例中,我分配了 8GB 的硬碟。
* `–cdrom`:安裝 ISO 鏡像的位置。請注意你必須在這個位置真的有一個 ISO 鏡像。
* `–graphics vnc`:允許 VNC 從遠程客戶端訪問虛擬機。

### 使用 VNC 客戶端訪問虛擬機

現在,我們在遠程桌面系統上使用 SSH 登入到 Ubuntu 伺服器上(虛擬化伺服器),如下所示。

$ ssh sk@192.168.225.22


在這裡,`sk` 是我的 Ubuntu 伺服器的用戶名,而 `192.168.225.22` 是它的 IP 地址。

運行如下的命令找出 VNC 的埠號。我們從一個遠程系統上訪問虛擬機需要它。

$ sudo virsh dumpxml Ubuntu-16.04 | grep vnc


示例輸出:

```

![](/data/attachment/album/201810/16/111915gqokgnzxnf0y9xjk.png)

記下那個埠號 `5900`。安裝任意的 VNC 客戶端應用程序。在本指南中,我們將使用 TigerVnc。TigerVNC 是 Arch Linux 默認倉庫中可用的客戶端。在 Arch 上安裝它,運行如下命令:

```
$ sudo pacman -S tigervnc
```

在安裝有 VNC 客戶端的遠程客戶端系統上輸入如下的 SSH 埠轉發命令。

```
$ ssh sk@192.168.225.22 -L 5900:127.0.0.1:5900
```

再強調一次,`192.168.225.22` 是我的 Ubuntu 伺服器(虛擬化伺服器)的 IP 地址。

然後,從你的 Arch Linux(客戶端)打開 VNC 客戶端。

在 VNC 伺服器框中輸入 `localhost:5900`,然後點擊 「Connect」 按鈕。

![](/data/attachment/album/201810/16/111916u5faeetyofti68e2.png)

然後就像你在物理機上安裝系統一樣的方法開始安裝 Ubuntu 虛擬機。

![](/data/attachment/album/201810/16/111917hs7pp8pms8m85l7p.png)

![](/data/attachment/album/201810/16/111918j6ysw85jsukju5y6.png)

同樣的,你可以根據你的伺服器的硬體情況配置多個虛擬機。

或者,你可以使用 `virt-viewer` 實用程序在訪客機器中安裝操作系統。`virt-viewer` 在大多數 Linux 發行版的默認倉庫中都可以找到。安裝完 `virt-viewer` 之後,運行下列的命令去建立到虛擬機的訪問連接。

```
$ sudo virt-viewer --connect=qemu+ssh://192.168.225.22/system --name Ubuntu-16.04
```

### 管理虛擬機

使用管理用戶介面 `virsh` 從命令行去管理虛擬機是非常有趣的。命令非常容易記。我們來看一些例子。

查看運行的虛擬機,運行如下命令:

```
$ sudo virsh list
```

或者,

```
$ sudo virsh list --all
```

示例輸出:

```
Id Name State
------------------------------------------------- 2 Ubuntu-16.04 running
```

![](/data/attachment/album/201810/16/111919o2k2ru4ykmbuybb8.png)

啟動一個虛擬機,運行如下命令:

```
$ sudo virsh start Ubuntu-16.04
```

或者,也可以使用虛擬機 id 去啟動它。

![](/data/attachment/album/201810/16/111920hu0d2u06tzw4t02u.png)

正如在上面的截圖所看到的,Ubuntu 16.04 虛擬機的 Id 是 2。因此,啟動它時,你也可以像下面一樣只指定它的 ID。

```
$ sudo virsh start 2
```

重啟動一個虛擬機,運行如下命令:
`$ sudo virsh reboot Ubuntu-16.04`

示例輸出:

```
Domain Ubuntu-16.04 is being rebooted
```

![](/data/attachment/album/201810/16/111922bdoo8909q06ch6cu.png)

暫停一個運行中的虛擬機,運行如下命令:

```
$ sudo virsh suspend Ubuntu-16.04
```

示例輸出:

```
Domain Ubuntu-16.04 suspended
```

讓一個暫停的虛擬機重新運行,運行如下命令:

```
$ sudo virsh resume Ubuntu-16.04
```

示例輸出:

```
Domain Ubuntu-16.04 resumed
```

關閉一個虛擬機,運行如下命令:

```
$ sudo virsh shutdown Ubuntu-16.04
```

示例輸出:

```
Domain Ubuntu-16.04 is being shutdown
```

完全移除一個虛擬機,運行如下的命令:

```
$ sudo virsh undefine Ubuntu-16.04
$ sudo virsh destroy Ubuntu-16.04
```

示例輸出:

```
Domain Ubuntu-16.04 destroyed
```

![](/data/attachment/album/201810/16/111923qm4zrx9rxjj4kkmz.png)

關於它的更多選項,建議你去查看 man 手冊頁:

```
$ man virsh
```

今天就到這裡吧。開始在你的新的虛擬化環境中玩吧。對於研究和開發者、以及測試目的,KVM 虛擬化將是很好的選擇,但它能做的遠不止這些。如果你有充足的硬體資源,你可以將它用於大型的生產環境中。如果你還有其它好玩的發現,不要忘記在下面的評論區留下你的高見。

謝謝!

via:

作者:[SK](https://www.ostechnix.com/author/sk/) 選題:[lujun9972](https://github.com/lujun9972) 譯者:[qhwdw](https://github.com/qhwdw) 校對:[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原創編譯,[Linux中國](https://linux.cn/) 榮譽推出

---
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國