看標題這是篇純運維的文章。在中小型企業中,一般很少配置專業的運維人員,都是由開發人員兼着。同時,對有志於技術管理的開發人員來說,多了解一些運維及整個軟件生命周期的知識,是很有幫助的,因為帶團隊不僅僅是個管人的活,更多的是在你的部下遇到難題或者無人能上的時候,你能協助他解決或親自上陣,這比只會“吆五喝六”的管理者將能獲得更高的敬重與威信。閑話不多說了,記錄下整個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 (一個不只有技術干貨的公眾號,歡迎關注,及時獲取更新內容)
—————————————————————————