KVM--安裝及初步使用

KVMKernel-based Virtual Machine的簡稱,是一個開源的虛擬化模塊,今天我將在CentOS7的操作系統上安裝KVM

一.環境信息

系統: CentOS 7.7 IP: 10.0.0.41/24

在虛擬機安裝時,需要啓用CPU的虛擬化功能
在這裏插入圖片描述

二. KVM安裝步驟

1. 安裝qemu-kvm和libvirt

#qemu-kvm用來創建虛擬機硬盤,libvirt用來管理虛擬機
[root@c7-41 ~]# yum install -y qemu-kvm libvirt

2. 安裝virt-install

#用來創建虛擬機
[root@c7-41 ~]# yum install -y virt-install

3. 啓動libvirtd,並將它設爲開機啓動,

#啓動後使用ifconfig查看,發現會多出來一塊virbr0的網卡,ip默認爲192.168.122.1/24,說明libvirtd啓動成功,如果默認沒有ifconfig命令,使用yum install -y net-tools安裝
[root@c7-41 ~]# systemctl start libvirtd && systemctl enable libvirtd
[root@c7-41 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.41  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fe49:48c7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:49:48:c7  txqueuelen 1000  (Ethernet)
        RX packets 35522  bytes 50991746 (48.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5373  bytes 579842 (566.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.1.41  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::20c:29ff:fe49:48d1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:49:48:d1  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 1016 (1016.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:0b:43:69  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

經過以上三步,KVM安裝成功,下面開始使用KVM創建虛擬機.

三. 使用KVM創建虛擬機(Centos7)

1. 使用qemu命令創建一個10G的硬盤

#最小10,G,可以更多,硬盤的名稱爲: CentOS-7-x86_64.raw
[root@c7-41 ~]# qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
Formatting '/opt/CentOS-7-x86_64.raw', fmt=raw size=10737418240 
[root@c7-41 ~]# ll -h /opt
total 0
-rw-r--r-- 1 root root 10G May  9 18:03 CentOS-7-x86_64.raw

2. 使用virt-install創建名稱爲CentOS-7-x86_64的虛擬機

#在創建之前,先上傳一個CentOS7的ISO鏡像,最好在根目錄下創建一個ISO的目錄文件夾
[root@c7-41 ~]# mkdir /ISO
[root@c7-41 ~]# cd /ISO/
[root@c7-41 ISO]# ls
CentOS-7-x86_64-DVD-1908.iso
[root@c7-41 ISO]# virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/ISO/CentOS-7-x86_64-DVD-1908.iso --disk path=/opt/CentOS-7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

Starting install...
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.

vpn下載地址
這時候使用VNC工具,連接主機IP 10.0.0.41,設置安裝操作系統的網卡名稱爲eth0,如圖所示
在這裏插入圖片描述
使用tab
在這裏插入圖片描述
回車
安裝步驟和我們平時安裝操作系統的方法一樣,安裝完成後,可以使用virsh list --all顯示KVM上所有的虛擬機

[root@c7-41 ISO]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     CentOS-7-x86_64                shut off            # 可以看到虛擬機的名稱和狀態

四. 管理KVM

1. 使用virsh啓動KVM中的虛擬機

[root@c7-41 ISO]# virsh start CentOS-7-x86_64
Domain CentOS-7-x86_64 started

啓動後,使用VNC連接工具,登錄後可以看到網卡的名稱爲eth0,默認沒有ip地址,是因爲網卡沒有激活,將ONBOOT改爲yes,重啓網卡,可以看到ip地址爲192.168.122.0網段的
在這裏插入圖片描述
當KVM中的虛擬機啓動後,可以在/etc/libvirt/qemu目錄下,看到啓動的虛擬機的信息

root@c7-41 ISO]# cd /etc/libvirt/qemu
[root@c7-41 qemu]# pwd
/etc/libvirt/qemu
[root@c7-41 qemu]# ls -lh
total 8.0K
-rw------- 1 root root 4.2K May  9 18:11 CentOS-7-x86_64.xml
drwx------ 3 root root   42 May  9 18:08 networks

CentOS-7-x86_64.xml就是啓動的虛擬機的信息,當我們使用vim編輯器查看時,會提示如下信息:

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit CentOS-7-x86_64
or other application using the libvirt API.
-->

看到提示需要修改虛擬機的信息,需要使用命令 virsh edit CentOS-7-x86_64,是用這條命令後,我們可以看到很多虛擬機的信息,包括vcpu,memory

[root@c7-41 qemu]# virsh edit CentOS-7-x86_64
<domain type='kvm'>
  <name>CentOS-7-x86_64</name>
  <uuid>e7c924f2-2ebf-4eca-9124-b6740b70a4fb</uuid>
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='auto' current='1'>4</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>Broadwell-noTSX-IBRS</model>
    <feature policy='require' name='md-clear'/>
    <feature policy='require' name='spec-ctrl'/>
    <feature policy='require' name='ssbd'/>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
"/tmp/virsh1kbtgk.xml" 107L, 4024C written
Domain CentOS-7-x86_64 XML configuration edited.


2. CPU熱添加(


#KVM支持CPU的熱添加,不過侷限是宿主機和虛擬機的系統相同才行,這裏宿主機是CentOS7,虛擬機也是CentOS7,所以可以模擬CPU熱添加,不過真實生產環境不建議這樣操作)
[root@c7-41 qemu]# virsh edit CentOS-7-x86_64
 <vcpu placement='static'>1</vcpu> 修改爲: 
 <vcpu placement='auto' current='1'>4</vcpu> 
 #修改成這個##意思是當前cpu爲1核,最多可以有4核,修改完虛擬機的配置文件,必須關閉虛擬機再啓動,配置才能生效        
  
[root@c7-41 qemu]# virsh shutdown CentOS-7-x86_64      #關閉虛擬機
Domain CentOS-7-x86_64 is being shutdown

[root@c7-41 qeum ~]# virsh list --all            ##查看虛擬機狀態 
Id          Name            State
----------------------------------------------------
-      CentOS-7-x86_64          shut off

[root@c7-41 qemu]# virsh start CentOS-7-x86_64       #啓動虛擬機
Domain CentOS-7-x86_64 started


[root@c7-41 qemu]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     CentOS-7-x86_64                running


先通過VNC工具查看虛擬機的cpu信息
在這裏插入圖片描述
在宿主機上通過命令添加核數

[root@c7-41 qemu]# virsh setvcpus CentOS-7-x86_64 2 --live     
#虛擬機的cpu添加到2core

再通過VNC工具查看虛擬機CPU信息在這裏插入圖片描述

3. 內存熱添加

(還是不建議生產中使用,知道功能就行了)
通過VNC連接虛擬機,查看虛擬機內存在這裏插入圖片描述


[root@c7-41 qemu]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
balloon: actual=1024
# 查看當前虛擬機的內存

[root@c7-41 qemu]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512
# 修改當前虛擬機的內存爲512

[root@c7-41 qemu]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
balloon: actual=512
# 查看修改的內存信息已經改變成了512

使用VNC工具連接虛擬機,查看內存是否有變:
在這裏插入圖片描述

4. 網卡配置

(如何將KVM虛擬機中的網卡改爲橋接模式,讓局域網的其他用戶可以正常訪問)

[root@c7-41 qemu]# brctl show
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.5254003a7202	yes		virbr0-nic
							vnet0


創建一個腳本

#創建一個腳本,刪除ens33網卡的ip信息,新建一個橋接網卡,並且將ens33網卡的ip信息富裕新建的橋接網卡
[root@c7-41 qemu]# cd
[root@c7-41 ~]# cat br0.sh 
#!/bin/bash
brctl addbr br0            #創建一個橋接網卡br0
brctl addif br0 ens33               #將ens33網卡的橋接信息轉到br0網卡
ip addr del dev ens33 10.0.0.41/24          #將ens33網卡的ip信息刪除
ifconfig br0 10.0.0.41/24 up              #將ens33網卡的ip信息這隻到br0網卡上
route add default gw 10.0.0.2            #添加網關
[root@c7-41 ~]# chmod u+x br0.sh
[root@c7-41 ~]# ./br0.sh

#使用ifocnfig查看網卡的ip信息,可以看到br0的地址已經變爲了10.0.0.41/24
[root@c7-41 ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.41  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fe49:48c7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:49:48:c7  txqueuelen 1000  (Ethernet)
        RX packets 42  bytes 2438 (2.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 63  bytes 4762 (4.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fe49:48c7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:49:48:c7  txqueuelen 1000  (Ethernet)
        RX packets 3523503  bytes 4923288560 (4.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 313418  bytes 52607195 (50.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.1.41  netmask 255.255.0.0  broadcast 172.16.255.255
        inet6 fe80::20c:29ff:fe49:48d1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:49:48:d1  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 1016 (1016.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:75:79:e4  txqueuelen 1000  (Ethernet)
        RX packets 81  bytes 6682 (6.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 46  bytes 5691 (5.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc54:ff:fedb:1c4c  prefixlen 64  scopeid 0x20<link>
        ether fe:54:00:db:1c:4c  txqueuelen 1000  (Ethernet)
        RX packets 19  bytes 1712 (1.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 147  bytes 8262 (8.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

使用命令修改KVM虛擬機的信息

[root@c7-41 ~]# virsh edit CentOS-7-x86_64
 72  <interface type='network'>  修改爲:
     <interface type='bridge'>

 74   <source network='default'/> 修改爲:
      <source bridge='br0'/>


修改完成後關閉虛擬機,啓動虛擬機,通過VNC工具修改ip爲10.0.0.88,嘗試ping宿主機是否可以ping通,並通過ssh連接

[root@c7-41 ~]# virsh shutdown CentOS-7-x86_64
Domain CentOS-7-x86_64 is being shutdown

[root@c7-41 ~]# virsh start CentOS-7-x86_64 
Domain CentOS-7-x86_64 started

在這裏插入圖片描述
在這裏插入圖片描述
通過本地的Xshell軟件,嘗試連接,可以連接,並且可以看到IP信息
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章