在CentOS7上執行KVM虛擬機器
阿新 • • 發佈:2018-12-18
準備工作
檢查CPU特性
CPU應該支援vmx
特性以更好地執行KVM虛擬機器:lscpu | grep vmx
安裝必要的軟體包
sudo yum install -y epel-release net-tools vim unzip zip wget ftp
安裝KVM及其依賴
sudo yum install -y qemu-kvm libvirt virt-install bridge-utils
驗證安裝結果
$ 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
建立網路環境
建立網橋kvmbr0
:
[[email protected] ~]$ sudo su -
[[email protected] ~]# cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# vi ifcfg-kvmbr0
......
[ [email protected] network-scripts]# cat ifcfg-kvmbr0
DEVICE=kvmbr0
NAME=kvmbr0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=dhcp
NM_CONTROLLED=no
DELAY=0
修改當前網絡卡配置,更新如下幾行為:
BOOTPROTO=none
BRIDGE=kvmbr0
NM_CONTROLLED=no
重啟網路:
[[email protected] network-scripts]# service network restart Restarting network (via systemctl): [ OK ]
檢查網路設定:
[[email protected] network-scripts]# ifconfig kvmbr0
kvmbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.66.15.173 netmask 255.255.254.0 broadcast 10.66.15.255
inet6 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 0
TX packets 74 bytes 10467 (10.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[[email protected] network-scripts]# ifconfig eno1
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 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 0
TX packets 2944305 bytes 2436350686 (2.2 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device 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
準備磁碟映象
準備虛擬機器的系統盤:
[[email protected] kvm_workspace]$ mkdir vm1
[[email protected] kvm_workspace]$ cd vm1
[[email protected] vm1]$ cp ../CentOS-7-x86_64-GenericCloud.qcow2.xz .
[[email protected] vm1]$ xz -d CentOS-7-x86_64-GenericCloud.qcow2.xz
[[email protected] vm1]$ mv CentOS-7-x86_64-GenericCloud.qcow2 vm1.qcow2
接下來需要對映象做一些修改,步驟中用到的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'
建立和管理虛擬機器
建立一個xml
檔案,並更改其資訊為:
[[email protected] vm1]$ vi vm1.xml
[[email protected] vm1]$ cat vm1.xml
<domain type='kvm'>
<name>vm1</name>
<memory unit='KiB'>1048576</memory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/cheshi/kvm_workspace/vm1/vm1.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<mac address='52:54:00:da:ac:e5'/>
<source bridge='kvmbr0'/>
<model type='virtio'/>
</interface>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
</domain>
建立一臺虛擬機器:
[[email protected] vm1]$ sudo virsh define ./vm1.xml
Domain vm1 defined from ./vm1.xml
啟動虛擬機器:
[[email protected] vm1]$ sudo virsh start vm1
Domain vm1 started
連線虛擬機器console(使用Ctrl+]
退出):
[[email protected] vm1]$ 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_64
dhcp-15-92 login: root
Last login: Mon Oct 29 07:16:27 on ttyS0
[[email protected] ~]# 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
[[email protected] ~]# exit
logout
CentOS Linux 7 (Core)
Kernel 3.10.0-862.14.4.el7.x86_64 on an x86_64
dhcp-15-92 login:
關閉虛擬機器:
[[email protected] vm1]$ sudo virsh shutdown vm1
Domain vm1 is being shutdown
檢視虛擬機器狀態:
[[email protected] vm1]$ sudo virsh list --all
Id Name State
----------------------------------------------------
- centos-minion1 shut off
- vm1 shut off
銷燬虛擬機器:
[[email protected] vm1]$ sudo virsh undefine vm1
Domain vm1 has been undefined
[[email protected] vm1]$ sudo virsh list --all
Id Name State
----------------------------------------------------
- centos-minion1 shut off
[[email protected] vm1]$
virsh命令參考:
命令 | 說明 |
---|---|
autostart | 自動開始一個域 |
create | 從一個 XML 檔案建立一個域 |
define | 從一個 XML 檔案定義(但不開始)一個域 |
edit | 編輯某個域的 XML 配置 |
shutdown | 關閉一個域 |
start | 開始一個(以前定義的)非活躍的域 |
reboot | 重新啟動一個域 |
suspend | 掛起一個域 |
resume | 重新恢復一個域 |
vncdisplay | vnc 顯示 |
undefine | 刪除虛擬機器,只是刪除VM的配置檔案,並不刪除虛擬磁碟檔案 |
console | 連線虛擬機器控制檯 |
使用圖形介面管理虛擬機器
執行virt-manager:
sudo virt-manager
建立虛擬機器:
- “File” > “New Virtual Machine”;
- 在"Choose how you would like to install the OS"處,選擇"Import existing disk image";
- 在"Provide the existing storage path"處,選擇"Browse…";
- 彈出對話方塊中選擇"Browse Local"並載入"/home/cheshi/kvm_workspace/vm1/vm1.qcow2"檔案並選擇"Choose Volume";
- 在"Choose an operating system type and version"處,選擇"Linux"和"CentOS 7.0",點選"Forward";
- 設定"Memory"和"CPUs",點選"Forward";
- 在"Name"處填上虛擬機器的名字,在"Network selection"處選擇"Bridge kvmbr0",最後點選"Finish"。
使用圖形介面管理虛擬機器比較直觀,這裡不再過多介紹。