1. 程式人生 > >ubuntu18.04上搭建KVM虛擬機器環境超完整過程

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服務狀態,如圖 

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檢視,

原來掛在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)

如無問題,安裝程式將出現如下配置介面

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

然後進行安裝設定,

依次操作如下:
輸入5,回車,進入安裝設定;輸入c,回車,選擇預設的磁碟進行安裝;輸入c,回車,使用預設的“2) Use All
Space”;輸入1,回車,選擇“1) Standard Partition”進行標準分割槽;輸入c,回車,完成分割槽設定

最後進入root密碼設定,

操作如下:
輸入8,回車,進入root密碼設定;輸入密碼,回車;輸入確認密碼,回車

完成上述設定後,輸入b開始進行安裝

等待一段時間後,安裝程式停在如下介面

按回車繼續,最後輸入使用者名稱root,及前面設定的密碼登入系統

2.2 虛擬機器網路配置

虛擬機器安裝完後,是沒有分配IP的,我們通過ip a命令檢視,

這時候的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連線了。

這時候我們再通過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 (一個不只有技術乾貨的公眾號,歡迎關注,及時獲取更新內容)
———————————————————————————————————————————————————————————————

有道詞典 devuser@server_ ... 詳細X   devuser@server_01: ~ $ sudo apt安裝cpu-checker      devuser@server_01: ~ $ sudo kvm-ok   資訊:/ dev / kvm的存在   可以使用KVM加速度 有道詞典 devuser@server_ ... 詳細X   devuser@server_01: ~ $ sudo apt安裝cpu-checker   devuser@server_01: ~ $ sudo kvm-ok   資訊:/ dev / kvm的存在   可以使用KVM加速度