ubuntu18.04上搭建KVM虛擬機環境超完整過程


看標題這是篇純運維的文章。在中小型企業中,一般很少配置專業的運維人員,都是由開發人員兼着。同時,對有志於技術管理的開發人員來說,多了解一些運維及整個軟件生命周期的知識,是很有幫助的,因為帶團隊不僅僅是個管人的活,更多的是在你的部下遇到難題或者無人能上的時候,你能協助他解決或親自上陣,這比只會“吆五喝六”的管理者將能獲得更高的敬重與威信。閑話不多說了,記錄下整個KVM虛擬機的搭建過程吧。

1. KVM安裝

1.1 配置確認

首先需要確認服務器的硬件是否支持虛擬化,執行如下命令確認

devuser@server_01:~$ egrep -c '(vmx|svm)' /proc/cpuinfo
48

如果輸出結果大於0,意味着服務器硬件是支持虛擬化的。否則,重啟進入BIOS設置中啟用VT技術。
執行如下命令安裝kvm-ok程序,來確定服務器是否能夠運行硬件加速的KVM虛擬機


devuser@server_01:~$ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

 

1.2 安裝KVM

安裝KVM及依賴項

devuser@server_01:~$ sudo apt update
devuser@server_01:~$ sudo apt install qemu qemu-kvm libvirt-bin  bridge-utils  virt-manager

啟動libvirtd服務,並設置開機自動啟動 

devuser@server_01:~$ sudo systemctl start libvirtd.service
devuser@server_01:~$ sudo systemctl enable libvirtd.service

執行service libvirtd status查看libvirtd服務狀態,如圖 

libvirtd-status

1.3 橋接網絡配置

一般虛擬機網絡配置有Bridge、NAT等幾種模式。NAT模式下,虛擬機不需要配置自己的IP,通過宿主機來訪問外部網絡;Bridge模式下, 虛擬機需要配置自己的IP,然后虛擬出一個網卡, 與宿主機的網卡一起掛到一個虛擬網橋上(類似於交換機)來訪問外部網絡,這種模式下,虛擬機擁有獨立的IP,局域網其它主機能直接通過IP與其通信。簡單理解,就是NAT模式下,虛機隱藏在宿主機后面了,虛機能通過宿主機訪問外網,但局域網其它主機訪問不到它,Bridge模式下,虛機跟宿主機一樣平等地存在,局域網其它主機可直接通過IP與其通信。一般我們創建虛機是用來部署服務供使用的, 所以都是用Bridge模式。

ubuntu 18中,網絡配置通過netplan來實現了,如下,更改配置文件 /etc/netplan/50-cloud-init.yaml

devuser@cserver_01:~$ sudo vim /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp6s0:
            dhcp4: true
        enp7s0:
            dhcp4: no
            dhcp6: no
    version: 2

    bridges:
         br0:
             interfaces: [enp7s0]
             dhcp4: no
             addresses: [192.168.40.241/24]
             gateway4: 192.168.40.1
             nameservers:
                 addresses: [114.114.114.114,8.8.8.8]

 

 將宿主機原有網卡enp7s0掛到網橋br0上,並指定IP地址為192.168.40.241,nameservers指定DNS服務器。修改完后,通過sudo netplan apply重啟網絡服務生效,然后通過ifconfig查看,
kvm2
原來掛在enp7s0網卡下的IP現在掛到了br0上,宿主機及所有其它虛擬機都通過該網橋來與外部通訊。我們也可以通過brctl show來直觀地查看,

devuser@server_01:~$ brctl show
bridge name        bridge id        STP enabled        interfaces
br0            8000.2a5be3ec2698    no                enp7s0
docker0        8000.02424524dcce    no                veth580af8e
                                                      veth74119f3
                                                    vethe7a2b0f
                                                      vethfe89039

 

目前因為還沒虛機,所以只有宿主機的網卡enp7s0掛在網橋br0上。同時也可以看到docker容器也是通過網橋docker0來通訊的。

2. 虛擬機安裝

2.1 安裝虛擬機

安裝命令

sudo virt-install --name=dev-server1 --memory=16384,maxmemory=16384 \
--vcpus=4,maxvcpus=4 --os-type=linux --os-variant=rhel7 \
--location=/home/devuser/tools/CentOS-7-x86_64-DVD-1810.iso \
--disk path=/var/lib/libvirt/images/devserver1.img,size=300 \
--bridge=br0 --graphics=none --console=pty,target_type=serial \
--extra-args="console=tty0 console=ttyS0"

其中–name指定虛機名稱,后面可通過virsh管理;–memory=16384,maxmemory=16384配置了16G內存;–vcpus=4,maxvcpus=4配置了4個CPU內核;centos7需要制定–os-variant=rhel7;–disk path=xx,size=300制定了磁盤路徑與大小,這里是300G。 

如果執行上述命令出現qemu-kvm: could not open 'xx/CentOS-7-x86_64-DVD-1810.iso': Permission denied異常退出時,可通過修改/etc/libvirt/qemu.conf文件將user = "root"group = "root"前面的注釋去掉解決(https://github.com/jedi4ever/veewee/issues/996)

如無問題,安裝程序將出現如下配置界面
kvm3

可通過輸入選項對應的數字來選擇不同的配置,依次操作如下步驟完成時區設置:
輸入2,回車,選擇時區設置;輸入1,回車,選擇“Set timezone”;輸入2,回車,選擇“Asia”;回車,輸入64,回車,選擇“Shanghai”

然后進行安裝設置,
kvm4
依次操作如下:
輸入5,回車,進入安裝設置;輸入c,回車,選擇默認的磁盤進行安裝;輸入c,回車,使用默認的“2) Use All
Space”;輸入1,回車,選擇“1) Standard Partition”進行標准分區;輸入c,回車,完成分區設置

最后進入root密碼設置,
kvm5
操作如下:
輸入8,回車,進入root密碼設置;輸入密碼,回車;輸入確認密碼,回車

完成上述設置后,輸入b開始進行安裝
kvm6

等待一段時間后,安裝程序停在如下界面
kvm7

按回車繼續,最后輸入用戶名root,及前面設置的密碼登錄系統
kvm8

2.2 虛擬機網絡配置

虛擬機安裝完后,是沒有分配IP的,我們通過ip a命令查看,
kvm9

這時候的eth0下面空空如也,什么都沒有。在/etc/sysconfig/network-scripts/ifcfg-eth0文件中添加如下內容

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #靜態指定IP
DEFROUTE=yes
#IPV4_FAILURE_FATAL=no
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_FAILURE_FATAL=no
#IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=449ed621-97a8-45b9-902f-0d347e27de98
DEVICE=eth0
ONBOOT=yes #開機自動啟動
IPADDR=192.168.40.96
NETMASK=255.255.255.0
GATEWAY=192.168.40.1
DNS1=192.168.40.1

並通過systemctl restart network重啟網絡生效,這時候再運行ip a查看,eth0下面已經有配置的IP了。不出意外的話,局域網其它主機就可以通過該IP來遠程SSH連接了。

kvm10

這時候我們再通過brctl show來查看網橋掛載情況,br0下面已經多了一個vnet0虛擬網卡了。

devuser@server_01:~$ brctl show
bridge name        bridge id        STP enabled        interfaces
br0            8000.2a5be3ec2698    no                enp7s0
                                                      vnet0
docker0        8000.02424524dcce    no                veth580af8e
                                                    veth74119f3
                                                     vethd270ee8
                                                     vethe7a2b0f
                                                     vethfe89039

 

虛擬機裝完后,默認的hostname是localhost,針對centos7,我們可以通過如下命令來修改hostname 

[root@localhost ~]# hostnamectl set-hostname dev-server1

然后在/etc/hosts文件中添加127.0.0.1的host映射 dev-server1 

[root@localhost ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 dev-server1
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 

3. 虛擬機管理 

  1. 列出當前運行的虛擬機virsh list
    devuser@server_01:~$ virsh list
     Id    Name                           State
    ----------------------------------------------------
     5     dev-server1                    running

    如果列出所有的,則virsh list --all

  1. 從宿主機進入虛擬機virsh console,后面接虛擬機ID或名稱
    devuser@server_01:~$ virsh console 5
    Connected to domain dev-server1
    Escape character is ^]
    
    CentOS Linux 7 (Core)
    Kernel 3.10.0-957.el7.x86_64 on an x86_64
    
    dev-server1 login:

    輸入用戶名,密碼即可登錄虛擬機,按Ctrl+]可退出。

  1. 啟動與關閉虛擬機virsh start|shutdown

    devuser@cserver_01:~$ virsh start dev-server1
    Domain dev-server1 started
    
    devuser@server_01:~$ virsh shutdown 5
    Domain 5 is being shutdown
  2. libvirtd啟動時,自動啟動虛擬機

    devuser@server_01:~$ virsh autostart dev-server1
    Domain dev-server1 marked as autostarted
  3. 掛起/恢復虛擬機

    devuser@server_01:~$ virsh suspend dev-server1    # 掛起虛擬機
    devuser@server_01:~$ virsh resume dev-server1    # 恢復掛起的虛擬機
  4. 銷毀虛擬機

    devuser@server_01:~$ virsh undefine dev-server1   # 徹底銷毀虛擬機,會刪除虛擬機配置文件,但不會刪除虛擬磁盤

     



我的個人博客地址:http://blog.jboost.cn
我的微信公眾號:jboost-ksxy (一個不只有技術干貨的公眾號,歡迎關注,及時獲取更新內容)
—————————————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM