centos7安裝kvm--命令行模式安裝虛擬機

KVM簡介

KVM(名稱來自英語:Kernel-basedVirtual Machine的縮寫,即基於內核的虛擬機),是一種用於Linux內核中的虛擬化基礎設施,可以將Linux內核轉化爲一個hypervisor。KVM在2007年2月被導入Linux 2.6.20核心中,以可加載核心模塊的方式被移植到FreeBSD及illumos上。

KVM在具備Intel VT或AMD-V功能的x86平臺上運行。它也被移植到S/390,PowerPC與IA-64平臺上。在Linux內核3.9版中,加入ARM架構的支持。


1).KVM是開源軟件,全稱是kernel-based virtual machine(基於內核的虛擬機)。
2).是x86架構且硬件支持虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。
3).它包含一個爲處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
4).KVM還需要一個經過修改的QEMU軟件(qemu-kvm),作爲虛擬機上層控制和界面。
5).KVM能在不改變linux或windows鏡像的情況下同時運行多個虛擬機,(它的意思是多個虛擬機使用同一鏡像)併爲每一個虛擬機配置個性化硬件環境(網卡、磁盤、圖形適配器……)。
6).在主流的Linux內核,如2.6.20以上的內核均已包含了KVM核心。

kvm 是linux內核包含的東西,使用qemu作爲上層管理(命令行)。
1).要求cpu 必須支持虛擬化。
2).性能:作爲服務器很好,可是圖形能力十分的差。即使放電影,圖像也是像刷油漆一樣,一層一層的。
3).cpu使用率控制很好。
4).控制上比較簡潔,功能比較豐富:比如使用“無敵功能”所有更改指向內存,你的鏡像永遠保持乾淨。“母鏡像”功能讓你擁有n個獨立快照點。還有很多參數。另外,kvm作爲內核級的虛擬機,剛開始發展關注的公司比較多——但是還沒有達到商業應用的水平。
KVM內存管理
KVM繼承了Linux系統管理內存的諸多特性,比如,分配給虛擬使用的內存可以被交換至交換空間、能夠使用大內存頁以實現更好的性能,以及對NUMA的支持能夠讓虛擬機高效訪問更大的內存空間等。
KVM基於Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技術可以支持更新的內存虛擬功能,這可以降低CPU的佔用率,並提供較好的吞吐量。
此外,KVM還藉助於KSM(Kernel Same-pageMerging)這個內核特性實現了內存頁面共享。KSM通過掃描每個虛擬機的內存查找各虛擬機間相同的內存頁,並將這些內存頁合併爲一個被各相關虛擬機共享的單獨頁面。在某虛擬機試圖修改此頁面中的數據時,KSM會重新爲其提供一個新的頁面副本。實踐中,運行於同一臺物理主機上的具有相同GuestOS的虛擬機之間出現相同內存頁面的概率是很高的,比如共享庫、內核或其它內存對象等都有可能表現爲相同的內存頁,因此,KSM技術可以降低內存佔用進而提高整體性能。


1,安裝準備
關閉防火牆和selinux

[root@ c7-41 ~] systemctl stop firewalld
[root@ c7-41 ~] systemctl disable firewalld
[root@ c7-41 ~] setenforce 0
[root@ c7-41 ~] sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

在這裏插入圖片描述
查看硬件是否支持虛擬化

[root@ c7-41 ~] egrep '(vmx|svm)' /proc/cpuinfo

在這裏插入圖片描述
注意:要有 vmx 或 svm 的標識才行。vmx標識intel,svm代表AMD。

2.安裝KVM
由於Linux內核已經將KVM收錄了,在安裝系統時已經加入了KVM,我們只需要在命令行模式下啓用KVM即可:

[root@ c7-41 ~] modprobe kvm
[root@ c7-41 ~] lsmod |grep kvm
kvm_intel             188644  0 
kvm                   621480  1 kvm_intel
irqbypass              13503  1 kvm

KVM虛擬機創建和管理所依賴的組件介紹
KVM虛擬機的創建依賴qemu-kvm:
雖然kvm的技術已經相當成熟而且可以對很多東西進行隔離,但是在某些方面還是無法虛擬出真實的機器。比如對網卡的虛擬,那這個時候就需要另外的技術來做補充,而qemu-kvm則是這樣一種技術。它補充了kvm技術的不足,而且在性能上對kvm進行了優化。
我們還可以使用virt-manager,virt-viewer來管理虛擬機;
我們在創建和管理KVM虛擬機時還需要libvirt這個重要的組件。
3,安裝KVM所需組件

[root@ c7-41 ~] yum -y install virt-* libvirt bridge-utils qemu-img qemu-kvm
#啓動libvirtd服務
[root@ c7-41 ~] systemctl start libvirtd
#查看是否安裝正確
[root@ c7-41 ~] ifconfig 

在這裏插入圖片描述

[root@ c7-41 ~] brctl show #使用網橋管理命令查看
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400509c9a	yes		virbr0-nic
#像VMware Workstation中需要創建物理橋接設備,可以使用virsh創建橋設備關聯網卡到橋接設備上。
[root@ c7-41 ~] systemctl stop NetworkManager #將NetworkManager服務關閉
[root@ c7-41 ~] systemctl disable NetworkManager #關閉開機啓動

4,創建橋接設備及關聯網卡到橋接設備上

[root@ c7-41 ~] virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
Bridge interface br0 started
[root@ c7-41 ~] ifconfig 

在這裏插入圖片描述

[root@ c7-41 ~] brctl show #使用網橋管理命令查看
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c29dc4316	yes		ens33
virbr0		8000.525400509c9a	yes		virbr0-nic
#列表中多了br0,說明橋接成功

5,創建kvm項目目錄,上傳鏡像

[root@ c7-41 ~] mkdir /kvm_data
[root@ c7-41 ~] cd /tmp/
#上傳或者下載鏡像
[root@ c7-41 tmp] ls
CentOS-7-x86_64-DVD-1908.iso

6,使用命令行安裝這個CentOS7鏡像文件

[root@ c7-41 tmp]  virt-install --name=gurobi --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1908.iso --disk path=/kvm_data/gurobi.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"

命令以及參數說明

–name 指定虛擬機的名稱
–memory 指定分配給虛擬機的內存資源大小
maxmemory 指定可調節的最大內存資源大小,因爲KVM支持熱調整虛擬機的資源
–vcpus 指定分配給虛擬機的CPU核心數量
maxvcpus 指定可調節的最大CPU核心數量
–os-type 指定虛擬機安裝的操作系統類型
–os-variant 指定系統的發行版本
–location 指定ISO鏡像文件所在的路徑,支持使用網絡資源路徑,也就是說可以使用URL
–disk path 指定虛擬硬盤所存放的路徑及名稱,size 則是指定該硬盤的可用大小,單位是G
–bridge 指定使用哪一個橋接網卡,也就是說使用橋接的網絡模式
–graphics 指定是否開啓圖形
–console 定義終端的屬性,target_type 則是定義終端的類型
–extra-args 定義終端額外的參數

virt-install參數說明

usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]

從指定安裝源創建新虛擬機。

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --connect URI         通過 libvirt URI 連接到虛擬機管理程序

通用選項:
  -n NAME, --name NAME  客戶機實例名稱
  --memory MEMORY       Configure guest memory allocation. Ex:
                        --memory 1024 (in MiB)
                        --memory 512,maxmemory=1024
                        --memory 512,maxmemory=1024,hotplugmemorymax=2048,hotplugmemoryslots=2
  --vcpus VCPUS         配置客戶機虛擬 CPU(vcpu) 數量。例如:
                        --vcpus 5
                        --vcpus 5,maxcpus=10,cpuset=1-4,6,8
                        --vcpus sockets=2,cores=4,threads=2
  --cpu CPU             CPU model and features. Ex:
                        --cpu coreduo,+x2apic
                        --cpu host-passthrough
                        --cpu host
  --metadata METADATA   配置客戶機元數據。例如:
                        --metadata name=foo,title="My pretty title",uuid=...
                        --metadata description="My nice long description"

安裝方法選項:
  --cdrom CDROM         光驅安裝介質
  -l LOCATION, --location LOCATION
                        安裝源 (例如:nfs:host:/path, http://host/path,
                        ftp://host/path)
  --pxe                 使用 PXE 協議從網絡引導
  --import              在已有的磁盤鏡像中構建客戶機
  --livecd              將光驅介質視爲 Live CD
  -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                        將附加參數添加到由 --location
                        引導的內核中
  --initrd-inject INITRD_INJECT
                        添加指定文件到由 --location 指定的 initrd
                        根中
  --os-variant DISTRO_VARIANT
                        在客戶機上安裝的操作系統,例如:'fedor
                        a18'、'rhel6'、'winxp' 等。
  --boot BOOT           配置客戶機引導設置。例如:
                        --boot hd,cdrom,menu=on
                        --boot init=/sbin/init (針對容器)
  --idmap IDMAP         爲 LXC 容器啓用用戶名稱空間。例如:
                        --idmap uid_start=0,uid_target=1000,uid_count=10

設備選項:
  --disk DISK           指定存儲的各種選項。例如:
                        --disk size=10 (在默認位置創建 10GiB 鏡像)
                        --disk /my/existing/disk,cache=none
                        --disk device=cdrom,bus=scsi
                        --disk=?
  -w NETWORK, --network NETWORK
                        配置客戶機網絡接口。例如:
                        --network bridge=mybr0
                        --network network=my_libvirt_virtual_net
                        --network network=mynet,model=virtio,mac=00:11...
                        --network none
                        --network help
  --graphics GRAPHICS   配置客戶機顯示設置。例如:
                        --graphics vnc
                        --graphics spice,port=5901,tlsport=5902
                        --graphics none
                        --graphics vnc,password=foobar,port=5910,keymap=ja
  --controller CONTROLLER
                        配置客戶機控制器設備。例如:
                        --controller type=usb,model=ich9-ehci1
  --input INPUT         配置客戶機輸入設備。例如:
                        --input tablet
                        --input keyboard,bus=usb
  --serial SERIAL       配置客戶機串口設備
  --parallel PARALLEL   配置客戶機並口設備
  --channel CHANNEL     配置客戶機通信通道
  --console CONSOLE     配置文本控制檯連接主機與客戶機
  --hostdev HOSTDEV     配置物理 USB/PCI 等主機設備與客戶機共享
  --filesystem FILESYSTEM
                        傳遞主機目錄到客戶機。例如:
                        --filesystem /my/source/dir,/dir/in/guest
                        --filesystem template_name,/,type=template
  --sound [SOUND]       配置客戶機聲音設備仿真
  --watchdog WATCHDOG   配置客戶機 watchdog 設備
  --video VIDEO         配置客戶機視頻硬件。
  --smartcard SMARTCARD
                        配置客戶機智能卡設備。例如:
                        --smartcard mode=passthrough
  --redirdev REDIRDEV   配置客戶機重定向設備。例如:
                        --redirdev usb,type=tcp,server=192.168.1.1:4000
  --memballoon MEMBALLOON
                        配置客戶機 memballoon 設備。例如:
                        --memballoon model=virtio
  --tpm TPM             配置客戶機 TPM 設備。例如:
                        --tpm /dev/tpm
  --rng RNG             Configure a guest RNG device. Ex:
                        --rng /dev/urandom
  --panic PANIC         配置客戶機 panic 設備。例如:
                        --panic default
  --memdev MEMDEV       Configure a guest memory device. Ex:
                        --memdev dimm,target_size=1024

客戶機配置選項:
  --security SECURITY   設置域安全驅動配置。
  --cputune CPUTUNE     Tune CPU parameters for the domain process.
  --numatune NUMATUNE   爲域進程調整 NUMA 策略。
  --memtune MEMTUNE     爲域進程調整內存策略。
  --blkiotune BLKIOTUNE
                        爲域進程調整 blkio 策略。
  --memorybacking MEMORYBACKING
                        爲域進程設置內存後備策略。例如:
                        --memorybacking hugepages=on
  --features FEATURES   設置域 <features> XML。例如:
                        --features acpi=off
                        --features apic=on,eoi=on
  --clock CLOCK         設置域 <clock> XML。例如:
                        --clock offset=localtime,rtc_tickpolicy=catchup
  --pm PM               配置 VM 電源管理功能
  --events EVENTS       配置 VM 生命週期管理策略
  --resource RESOURCE   配置 VM 資源分區(cgroups)
  --sysinfo SYSINFO     Configure SMBIOS System Information. Ex:
                        --sysinfo emulate
                        --sysinfo host
                        --sysinfo bios_vendor=Vendor_Inc.,bios_version=1.2.3-abc,...
                        --sysinfo system_manufacturer=System_Corp.,system_product=Computer,...
                        --sysinfo baseBoard_manufacturer=Baseboard_Corp.,baseBoard_product=Motherboard,...
  --qemu-commandline QEMU_COMMANDLINE
                        Pass arguments directly to the qemu emulator. Ex:
                        --qemu-commandline='-display gtk,gl=on'
                        --qemu-commandline env=DISPLAY=:0.1

虛擬化平臺選項:
  -v, --hvm             這個客戶機應該是一個全虛擬化客戶機
  -p, --paravirt        這個客戶機應該是一個半虛擬化客戶機
  --container           這個客戶機應該是一個容器客戶機
  --virt-type HV_TYPE   要使用的管理程序名稱 (kvm, qemu, xen, ...)
  --arch ARCH           模擬 CPU 架構
  --machine MACHINE     機器類型爲仿真類型

其它選項:
  --autostart           主機啓動時自動啓動域。
  --transient           Create a transient domain.
  --wait WAIT           請等待數分鐘以便完成安裝。
  --noautoconsole       不要自動嘗試連接到客戶端控制檯
  --noreboot            安裝完成後不啓動客戶機。
  --print-xml [XMLONLY]
                        打印生成的 XML 域,而不是創建客戶機。
  --dry-run             運行安裝程序,但不創建設備或定義客戶
                        機。
  --check CHECK         啓用或禁用驗證檢查。例如:
                        --check path_in_use=off
                        --check all=off
  -q, --quiet           抑制非錯誤輸出
  -d, --debug           輸入故障排除信息 

7,開始安裝後,正常的情況下會進入到一下界面:
*設置語言,輸入數字1,回車進入以下界面
在這裏插入圖片描述
這是通過命令行配置語言、時區、安裝源、網絡、密碼等信息
在這裏插入圖片描述
選English數字數字16並回車即可
在這裏插入圖片描述
設置語言,英語(通用)
在這裏插入圖片描述
設置時區
在這裏插入圖片描述
亞洲上海
在這裏插入圖片描述
在這裏插入圖片描述
安裝位置
在這裏插入圖片描述
在這裏插入圖片描述
標準化分區
在這裏插入圖片描述
設置用戶密碼
在這裏插入圖片描述
開始安裝
在這裏插入圖片描述
安裝成功
在這裏插入圖片描述

現在是處於我們構建的虛擬終端,如果推出虛擬終端,按Ctrl + ] 即可。

切出虛擬機後,可以看到/kvm_data/目錄下多了一個虛擬機的磁盤目錄

[root@ c7-41 tmp] ls /kvm_data/
gurobi.img

列出當前有多少個虛擬機,以及其狀態

[root@ c7-41 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     gurobi                         running
[root@ c7-41 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 1     gurobi                         running

查看虛擬機配置文件

[root@ c7-41 ~] ls /etc/libvirt/qemu/
Centos7x64_1908.xml  gurobi.xml  networks
[root@ c7-41 ~] ls /etc/libvirt/qemu/networks/
autostart  default.xml
[root@ c7-41 ~] ls /etc/libvirt/qemu/networks/autostart/
default.xml

管理虛擬機的一些常用命令:

# virsh console xxx # 進入指定的虛擬機,進入的時候還需要按一下回車
# virsh start xxx # 啓動虛擬機
# virsh shutdown xxx # 關閉虛擬機
# virsh destroy xxx # 強制停止虛擬機
# virsh undefine xxx # 徹底銷燬虛擬機,會刪除虛擬機配置文件,但不會刪除虛擬磁盤
# virsh autostart xxx # 設置宿主機開機時該虛擬機也開機
# virsh autostart --disable xxx # 解除開機啓動
# virsh suspend xxx # 掛起虛擬機
# virsh resume xxx # 恢復掛起的虛擬機

8,進入虛擬機

#gurobi是創建虛擬終端的名字
[root@ c7-41 tmp] virsh console gurobi
Connected to domain gurobi
Escape character is ^]
[root@localhost ~] ip addr # 此時還沒有能聯網的IP
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:65:d3:3f brd ff:ff:ff:ff:ff:ff
[root@localhost ~] dhclient eth0 # 獲取IP地址
[root@localhost ~] ip addr # 此時可以看到已經有IP地址了
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:65:d3:3f brd ff:ff:ff:ff:ff:ff
inet 192.168.77.140/24 brd 192.168.77.255 scope global dynamic eth0
valid_lft 1793sec preferred_lft 1793sec
inet6 fe80::5054:ff:fe65:d33f/64 scope link
valid_lft forever preferred_lft forever
# 獲取到IP能聯網後安裝網絡管理工具
[root@localhost ~] yum install -y net-tools
#安裝完之後就可以使用ifconfig命令了 
[root@localhost ~] ifconfig  	
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.77.140 netmask 255.255.255.0 broadcast 192.168.77.255
inet6 fe80::5054:ff:fe65:d33f prefixlen 64 scopeid 0x20
ether 52:54:00:65:d3:3f txqueuelen 1000 (Ethernet)
RX packets 4404 bytes 13614102 (12.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2480 bytes 139445 (136.1 KiB)
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
loop txqueuelen 0 (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
[root@localhost ~] cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts] vi ifcfg-eth0 # 修改ONBOOT的值爲yes
ONBOOT=yes
[root@localhost network-scripts] systemctl restart network # 重啓網卡服務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章