centos7安裝kvm並通過kvm命令行安裝centos7


 

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架構的支持。

關於KVM:

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 與 vbox的區別:
vbox 是由 qemu 改寫而成,包含大量qemu 代碼。

1).可以使用於"不支持"虛擬化技術的cpu。
2).值得說的一點:vbox 在圖形方面比較好,能進行2D 3D加速;但cpu控制不理想(估計是因為圖形支持的緣故);操作上有獨立的圖形界面,易於上手。

kvm 是linux內核包含的東西,使用qemu作為上層管理(命令行)。

1).要求cpu 必須支持虛擬化。
2).性能:作為服務器很好,可是圖形能力十分的差。即使放電影,圖像也是像刷油漆一樣,一層一層的。
3).cpu使用率控制很好。
4).控制上比較簡潔,功能比較豐富:比如使用“無敵功能”所有更改指向內存,你的鏡像永遠保持干凈。“母鏡像”功能讓你擁有n個獨立快照點。還有很多參數。另外,kvm作為內核級的虛擬機,剛開始發展關注的公司比較多——但是還沒有達到商業應用的水平。

總體而言:在支持虛擬化的情況下,vbox 和 kvm 的性能差不多,主要是面向對象不同:kvm適用於服務器,vbox適用於桌面應用。

qemu 全稱Quick Emulator。是獨立虛擬軟件,能獨立運行虛擬機(根本不需要kvm)。kqemu是該軟件的加速軟件。kvm並不需要qemu進行虛擬處理,只是需要它的上層管理界面進行虛擬機控制。虛擬機依舊是由kvm驅動。所以,大家不要把概念弄錯了,盲目的安裝qemu和kqemu。

KVM內存管理:
KVM繼承了Linux系統管理內存的諸多特性,比如,分配給虛擬使用的內存可以被交換至交換空間、能夠使用大內存頁以實現更好的性能,以及對NUMA的支持能夠讓虛擬機高效訪問更大的內存空間等。
KVM基於Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技術可以支持更新的內存虛擬功能,這可以降低CPU的占用率,並提供較好的吞吐量。
此外,KVM還借助於KSM(Kernel Same-pageMerging)這個內核特性實現了內存頁面共享。KSM通過掃描每個虛擬機的內存查找各虛擬機間相同的內存頁,並將這些內存頁合並為一個被各相關虛擬機共享的單獨頁面。在某虛擬機試圖修改此頁面中的數據時,KSM會重新為其提供一個新的頁面副本。實踐中,運行於同一台物理主機上的具有相同GuestOS的虛擬機之間出現相同內存頁面的概率是很高的,比如共享庫、內核或其它內存對象等都有可能表現為相同的內存頁,因此,KSM技術可以降低內存占用進而提高整體性能。

二.KVM虛擬化平台構建
1.安裝准備
查看硬件是否支持虛擬化。命令:

[root@localhost ~]# egrep ‘(vmx|svm)’ /proc/cpuinfo


注意:要有 vmx 或 svm 的標識才行。vmx標識intel,svm代表AMD。

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

[root@localhost ~]# modprobe kvm
[root@localhost ~]# lsmod |grep kvm

 

3.KVM虛擬機創建和管理所依賴的組件介紹

KVM虛擬機的創建依賴qemu-kvm:
雖然kvm的技術已經相當成熟而且可以對很多東西進行隔離,但是在某些方面還是無法虛擬出真實的機器。比如對網卡的虛擬,那這個時候就需要另外的技術來做補充,而qemu-kvm則是這樣一種技術。它補充了kvm技術的不足,而且在性能上對kvm進行了優化。

我們還可以使用virt-manager,virt-viewer來管理虛擬機;

我們在創建和管理KVM虛擬機時還需要libvirt這個重要的組件:

它是一系列提供出來的庫函數,用以其他技術調用,來管理機器上的虛擬機。包括各種虛擬機技術,kvm、xen與lxc等,都可以調用libvirt提供的api對虛擬機進行管理。有這么多的虛擬機技術,它為何能提供這么多的管理功能那。是因為它的設計理念,它是面向驅動的架構設計。對任何一種虛擬機技術都開發設計相對於該技術的驅動。這樣不同虛擬機技術就可以使用不同驅動,而且相互直接不會影響,方便擴展。而且libvirt提供了多種語言的編程接口,可以直接通過編程,調用libvirt提供的對外接口實現對虛擬機的操作。如今流行的雲計算中的IaaS是與該庫聯系相當密切的。通過下圖可以看出它的架構設計思想。

4.安裝KVM所需組件

[root@localhost ~]# yum install -y virt-* libvirt bridge-utils qemu-img qemu-kvm

安裝完成后啟動libvirtd服務:

[root@localhost ~]# service libvirtd start

查看是否安裝正確

使用網橋管理命令查看:

像VMware Workstation中我們需要創建物理橋接設備,可以使用virsh創建橋設備關聯網卡到橋接設備上:
需要將NetworkManager服務關閉,開機啟動也關閉:

[root@localhost ~]# chkconfig NetworkManager off
[root@localhost ~]# service NetworkManager stop

然后在創建橋接設備及關聯網卡到橋接設備上:

[root@localhost ~]# virsh iface-bridge enp61s0f0 br0


查看橋接設備:


列表中多了br0,說明橋接成功。

三.創建虛擬機並安裝CentOS7
將服務成功啟動后,我們就可以使用KVM安裝虛擬機了,首先需要准備一個操作系統的鏡像文件,我這里用的是CentOS7的鏡像文件:

[root@localhost ~]# mkdir kvm_data
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# ls |grep Cent
CentOS-7-x86_64-DVD-1708.iso
[root@localhost tmp]#

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

創建一個名為gurobi的1個8核cpu,內存容量為512M的,硬盤容量為1TB
[root@localhost ~]# virt-install --name=centos --memory=2048,maxmemory=4096 --vcpus=2,maxvcpus=4 --os-type=linux --os-variant=rhel7 --location=/opt/CentOS-7-x86_64-DVD-2003.iso  --disk path=/kvm_data/img/centos.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 輸入故障排除信息
開始安裝后,會讓你配置語言、時區、安裝源、網絡、密碼等信息,就和我們在VMware里安裝CentOS虛擬機是一樣的,只不過這個是命令行形式,而VMware里是圖形界面罷了。

首先設置語言,按數字1,回車進入:

例如我要選Chinese就按數字68並回車即可,回車之后會讓你選擇是中文簡體還是繁體,也是按下相應的數字並回車即可:

 

配置完成后會再次回到配置界面,設置時區:

選擇亞洲——65 上海

 

配置第五項 5,選擇c繼續,直到Partition Scheme Options 1,

 

設置root密碼:8

 

開始安裝系統:b

一切順利,安裝成功!

這時我們是處於一個虛擬終端的,如果要退出來虛擬機,應該說是切出來,按Ctrl + ] 即可。
切出虛擬機后,可以看到/kvm_data/目錄下多了一個虛擬機的磁盤目錄:


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

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

配置虛擬機里IP:

[root@localhost ~]# virsh console study01
Connected to domain study01
Escape character is ^]

 

配置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


[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


[root@localhost ~]# yum install -y net-tools # 獲取到IP能聯網后安裝網絡管理工具


[root@localhost ~]# ifconfig # 安裝完之后就可以使用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 ~]#
[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 # 重啟網卡服務

 

配置靜態ip

編輯網卡對應的配置文件,位於/etc/sysconfig/network-scripts/ifcfg-你的網卡名字

vim /etc/sysconfig/network-scripts/ifcfg-你的網卡名字 按i進入編輯

修改配置

BOOTPROTO="static" # 使用靜態IP地址

IPADDR="192.168.1.125" # 設置的靜態IP地址

NETMASK="255.255.255.0" # 子網掩碼 

GATEWAY="192.168.1.1" # 網關地址

ONBOOT=yes #設置網卡啟動方式為 開機啟動

重啟網絡服務

service network restart


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM