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. 虛擬機器管理
- 列出當前執行的虛擬機器
virsh list
devuser@server_01:~$ virsh list Id Name State ---------------------------------------------------- 5 dev-server1 running
如果列出所有的,則
virsh list --all
- 從宿主機進入虛擬機器
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+]
可退出。
-
啟動與關閉虛擬機器
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
-
libvirtd啟動時,自動啟動虛擬機器
devuser@server_01:~$ virsh autostart dev-server1 Domain dev-server1 marked as autostarted
-
掛起/恢復虛擬機器
devuser@server_01:~$ virsh suspend dev-server1 # 掛起虛擬機器 devuser@server_01:~$ virsh resume dev-server1 # 恢復掛起的虛擬機器
-
銷燬虛擬機器
devuser@server_01:~$ virsh undefine dev-server1 # 徹底銷燬虛擬機器,會刪除虛擬機器配置檔案,但不會刪除虛擬磁碟
我的個人部落格地址:http://blog.jboost.cn
我的微信公眾號:jboost-ksxy (一個不只有技術乾貨的公眾號,歡迎關注,及時獲取更新內容)
———————————————————————————————————————————————————————————————