在CentOS7上运行KVM虚拟机
在CentOS7上運行KVM虛擬機
- 準備工作
- 檢查CPU特性
- 安裝一些基礎軟件包(非必須)
- 安裝KVM及相關工具
- 驗證安裝結果
- 啟動服務并設置為開機自動運行
- 創建網絡環境
- 使用KVM虛擬機
- 下載操作系統的guest image
- 準備磁盤鏡像
- 創建和管理虛擬機
- 使用圖形界面管理虛擬機
- 參考資料
準備工作
檢查CPU特性
CPU應該支持vmx特性以更好地運行KVM虛擬機:lscpu | grep vmx
安裝一些基礎軟件包(非必須)
sudo yum install -y epel-release net-tools vim unzip zip wget ftp bridge-utils安裝KVM及相關工具
sudo yum install -y qemu-kvm libvirt sudo yum install -y libguestfs-tools libguestfs-tools libguestfs-tools-c驗證安裝結果
$ lsmod | grep ^kvm kvm_intel 174250 0 kvm 570658 1 kvm_intel啟動服務并設置為開機自動運行
systemctl start libvirtd systemctl enable libvirtd檢查服務狀態:
systemctl status libvirtd systemctl is-enabled libvirtd創建網絡環境
注意: 如果這時系統里已經有了virbr0這個網橋,則可以跳過本章節,后面直接使用virbr0網橋即可。
創建default網絡和virbr0網橋:
sudo virsh net-define /usr/share/libvirt/networks/default.xml sudo virsh net-start default sudo virsh net-autostart default sudo virsh net-list檢查網絡設置:
[root@cheshi-desktop1 ~]# sudo virsh net-listName State Autostart Persistent --------------------------------------------default active yes yes[root@cheshi-desktop1 ~]# ifconfig virbr0 virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.66.15.173 netmask 255.255.254.0 broadcast 10.66.15.255inet6 fe80::4ecc:6aff:fec5:ad0d prefixlen 64 scopeid 0x20<link>ether 4c:cc:6a:c5:ad:0d txqueuelen 1000 (Ethernet)RX packets 1613 bytes 118768 (115.9 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 74 bytes 10467 (10.2 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@cheshi-desktop1 ~]# ifconfig eno1 eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet6 fe80::4ecc:6aff:fec5:ad0d prefixlen 64 scopeid 0x20<link>ether 4c:cc:6a:c5:ad:0d txqueuelen 1000 (Ethernet)RX packets 50352153 bytes 7052127783 (6.5 GiB)RX errors 0 dropped 111 overruns 0 frame 0TX packets 2944305 bytes 2436350686 (2.2 GiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0device interrupt 16 memory 0xdf000000-df020000使用KVM虛擬機
方案一:使用KVM創建一臺不帶操作系統的虛擬機,然后使用安裝鏡像或網絡服務為其安裝操作系統;
方案二:直接下載操作系統的“guest image”并由其直接運行虛擬機。(推薦)
第二種方法可以省去操作系統的安裝過程,因此效率比較高,也比較省事,這里著重介紹這種方法。
下載操作系統的guest image
在CentOS官方的下載頁面中,找到供Cloud使用的鏡像文件,使用wget等命令將其下載到物理機中。
wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2.xz準備磁盤鏡像
準備虛擬機的系統盤:
[cheshi@cheshi-desktop1 kvm_workspace]$ mkdir vm1 [cheshi@cheshi-desktop1 kvm_workspace]$ cd vm1 [cheshi@cheshi-desktop1 kvm_workspace]$ xz -d CentOS-7-x86_64-GenericCloud.qcow2.xz [cheshi@cheshi-desktop1 kvm_workspace]$ cp CentOS-7-x86_64-GenericCloud.qcow2 /var/lib/libvirt/images/vm1.qcow2 [cheshi@cheshi-desktop1 kvm_workspace]$ cd /var/lib/libvirt/images/接下來需要對鏡像做一些修改,步驟中用到的virt-edit和guestfish命令來源于libguestfs項目,如果找不到這兩個工具,可以通過命令sudo yum install libguestfs*來安裝。
出于安全原因,我們無法登錄root用戶,因此我們需要清空鏡像中的root密碼:
sudo virt-edit -a ./vm1.qcow2 /etc/shadow -e 's/^root:[^:]*:/root::/'在沒有配置cloud-init的情況下,這個服務將耗費將近5分鐘的啟動時間,因此最好把它禁用掉:
sudo guestfish -a ./vm1.qcow2 -i rm '/etc/systemd/system/multi-user.target.wants/cloud-config.service' sudo guestfish -a ./vm1.qcow2 -i rm '/etc/systemd/system/multi-user.target.wants/cloud-final.service' sudo guestfish -a ./vm1.qcow2 -i rm '/etc/systemd/system/multi-user.target.wants/cloud-init-local.service' sudo guestfish -a ./vm1.qcow2 -i rm '/etc/systemd/system/multi-user.target.wants/cloud-init.service'備注:
- 在一些打包有較新版本cloud-init工具的鏡像中,cloud-*.service可能位于'/etc/systemd/system/cloud-init.target.wants/路徑下,因此上述命令可能需要一些修改。
- 此外,本節中對鏡像的修改也可通過腳本來完成,使用時如遇權限不足的問題請將qcow2鏡像放置于/tmp目錄下進行修改。
創建和管理虛擬機
回到之前的路徑下,創建一個xml文件,并更改其信息為:
[cheshi@cheshi-desktop1 kvm_workspace]$ cat vm1.xml <domain type='kvm' id='1'><name>vm1</name><memory unit='KiB'>2097152</memory><currentMemory unit='KiB'>2097152</currentMemory><vcpu placement='static'>4</vcpu><os><type arch='x86_64' machine='pc-i440fx-2.7'>hvm</type></os><features><acpi/><apic/></features><cpu mode='custom' match='exact'><model fallback='allow'>Skylake-Client</model></cpu><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>destroy</on_crash><devices><emulator>/usr/libexec/qemu-kvm</emulator><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/vm1.qcow2'/><target dev='vda' bus='virtio'/></disk><interface type='network'><source network='default' bridge='kvmbr0'/><target dev='vnet0'/><model type='virtio'/></interface><console type='pty' tty='/dev/pts/5'><source path='/dev/pts/5'/><target type='serial' port='0'/><alias name='serial0'/></console></devices> </domain>備注:必要時可使用whereis qemu-kvm確定執行文件所在位置。
創建一臺虛擬機:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh define ./vm1.xml Domain vm1 defined from ./vm1.xml啟動虛擬機:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh start vm1 Domain vm1 started連接虛擬機console(使用Ctrl+]退出):
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh console vm1 Connected to domain vm1 Escape character is ^]CentOS Linux 7 (Core) Kernel 3.10.0-862.14.4.el7.x86_64 on an x86_64dhcp-15-92 login: root Last login: Mon Oct 29 07:16:27 on ttyS0 [root@dhcp-15-92 ~]# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=34 time=46.5 ms--- 8.8.8.8 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 46.574/46.574/46.574/0.000 ms [root@dhcp-15-92 ~]# exit logoutCentOS Linux 7 (Core) Kernel 3.10.0-862.14.4.el7.x86_64 on an x86_64dhcp-15-92 login:關閉虛擬機:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh shutdown vm1 Domain vm1 is being shutdown查看虛擬機狀態:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh list --allId Name State ----------------------------------------------------- centos-minion1 shut off- vm1 shut off銷毀虛擬機:
[cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh undefine vm1 Domain vm1 has been undefined [cheshi@cheshi-desktop1 kvm_workspace]$ sudo virsh list --allId Name State ----------------------------------------------------- centos-minion1 shut off[cheshi@cheshi-desktop1 kvm_workspace]$virsh命令參考:
| autostart | 自動開始一個域 |
| create | 從一個 XML 文件創建一個域 |
| define | 從一個 XML 文件定義(但不開始)一個域 |
| edit | 編輯某個域的 XML 配置 |
| shutdown | 關閉一個域 |
| start | 開始一個(以前定義的)非活躍的域 |
| reboot | 重新啟動一個域 |
| suspend | 掛起一個域 |
| resume | 重新恢復一個域 |
| vncdisplay | vnc 顯示 |
| undefine | 刪除虛擬機,只是刪除VM的配置文件,并不刪除虛擬磁盤文件 |
| console | 連接虛擬機控制臺 |
使用圖形界面管理虛擬機
運行virt-manager:
sudo virt-manager創建虛擬機:
使用圖形界面管理虛擬機比較直觀,這里不再過多介紹。
參考資料
總結
以上是生活随笔為你收集整理的在CentOS7上运行KVM虚拟机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Caas社区作为一种服务
- 下一篇: jc