1. 程式人生 > >Linux 第83天 kvm

Linux 第83天 kvm

Linux 第83天 kvm

時間: 20181104

個人小站: www.winthcloud.top


目錄

虛擬化技術

主機虛擬化

Linux目前流行的開源虛擬化技術解決方案

KVM的元件

快速使用kvm技術

安裝kvm環境

主要配置檔案

虛擬機器網路配置

建立kvm虛擬機器順序

建立物理橋接

建立虛擬機器硬碟

搭建時所遇到的問題和解決方式

總結的一些常用的virsh命令

一個手動建立虛擬機器的命令

qemu作用

kvm相關的套件網站

總結

虛擬化技術


虛擬化技術型別:

主機虛擬化:xen, kvm, virtualbox, ...

容器(使用者空間隔離): lxc(LinuX Container), openvz, ...

系統庫虛擬化:wine, ...

應用程式級虛擬化:jvm, pvm,...


主機虛擬化

CPU:

模擬:emulation, 虛擬機器的arch與物理平臺的arch可以不相同;qemu;

虛擬:virtualization

完全虛擬化(full-virt)

BT: 二進位制轉換 (軟體)

HVM:硬體輔助的虛擬化(硬體)

半(準)虛擬化 (para-virt)

GuestOS得明確知道自己運行於虛擬化技術

記憶體:

MMU virtualization:

Intel: EPT, Extended Page Table

AMD: NPT, Nested Page Table

TLB virtualization:

tagged TLB

IO:

Emulation   模擬

Para-virtualization  半虛擬化

IO-through:IO透傳


主機虛擬化的型別:

TYPE-I:

於硬體級別直接執行hypervisor;

xen, vmware ESX/ESXI

TYPE-II:

於硬體級別執行一個OS(Host OS),而此OS上執行一個VMM;

vmware workstation, virtualbox, kvm,VMWare Server

Linux目前流行的開源虛擬化技術解決方案

主機虛擬化:xen, kvm, virtualbox

容器級:lxc, libcontainer, runC, openvz

模擬器:qemu

KVM的元件

kvm.ko:模組

API

qemu-kvm:使用者空間的工具程式;

qemu-kvm is an open source virtualizer that provides hardware 

emulation for the KVM hypervisor. 

libvirt:Libvirt is a C toolkit to interact with the virtualization

capabilities of recent versions of Linux (and other OSes). The main 

package includes the libvirtd server exporting the virtualization support.

C/S:

Client:

libvirt-client

virt-manager

Daemon:

libvirt-daemon



快速使用kvm技術

安裝使用KVM:

判斷CPU是否支援硬體虛擬化:

# grep -i -E '(vmx|svm|lm)' /proc/cpuinfo

vmx:Intel VT-x

svm:AMD AMD-v


安裝kvm環境

yum install virt-manager libvirt libguestfs-tools libvirt-daemon-kvm

systemctl start libvirtd

systemctl enable libvirtd



主要配置檔案

/etc/libvirt/qemu/network 網路介面配置檔案儲存

/etc/libvirt/qemu/     虛擬機器配置檔案儲存路徑



虛擬機器網路配置

建立網路

建立交換機時,會自動建立其網路介面

cd /etc/libvirt/qemu/network

cp default.xml php-net.xml

vim php-net

<network>

<name>php-net</name>

<forward mode='nat'/>

<bridge name='php-bridge' stp='on' delay='0'/>

<mac address='52:54:00:10:00:01'/>

<ip address='10.0.0.1' netmask='255.255.255.0'>

</ip>

</network>

virsh dumpxml net-name

virsh net-define php-net.xml

新增網路

virsh domiflist dom_name

virsh attach-interface DOMAIN network NET_NAME


儲存主機的網路

virsh dumpxml DOMAIN_NAME > /etc/libvirt/qemu/DOMAIN_NAME.xml


建立kvm虛擬機器順序

1.建立物理橋接,使其可安裝系統,或者直接使用光碟就可以不用使用橋接

但是建議使用橋接,即使有問題可以方便ssh連線進去操作,後續可以刪除掉

2.使用virt-sysprep命令將硬碟資料清空,並使用此臺機器做模板

3.所有的virsh所管理的機器和網路都儲存在/etc/libvirt/qemu資料夾裡

將其複製後,並將硬碟檔案也複製命名改其配置檔案裡幾條即可生成另外一臺

也可以使用建立快照,目前還沒有研究出來

4. 至此虛擬機器便可實現多機



建立物理橋接

1. 首先建立橋接網絡卡裝置併為其配置地址

vim /etc/sysconfig/network-scripts/ifcfg-mybr0

# Generated by dracut initrd

NAME="mybr0"

DEVICE="mybr0"

ONBOOT=yes

NETBOOT=yes

BOOTPROTO=static

TYPE=Bridge   #最主要就是這個裝置型別這裡

IPADDR=192.168.48.151

NETMASK=255.255.255.0

GATEWAY=192.168.48.2

DNS1=114.114.114.114


2. 然後將某個網絡卡關聯至該橋接網絡卡上

# Generated by dracut initrd

NAME="eth0"

DEVICE="eth0"

ONBOOT=yes

NETBOOT=yes

BOOTPROTO=none

TYPE=Ethernet

BRIDGE=mybr0   #最主要就是改這裡


3. 重啟網路服務

systemctl restart network

如果你的橋接網絡卡顯示為UP表示橋接配置成功

後續虛擬機器就可以將其介面掛至此橋下即可和物理網絡卡處於同一個網路中


建立虛擬機器硬碟

qemu-img create -f qcow2 disk1.qcow2 100G



搭建時所遇到的問題和解決方式

virsh console DOMAIN卡住,無法正常顯示登入介面 

虛擬機器的核心新增console=ttyS0

grubby --update-kernel=ALL --args="console=ttyS0"


virsh-manager無法輸入字元至虛擬機器

虛擬機器配置使用vnc顯示器



總結的一些常用的virsh命令


virsh help domain --config可以將配置儲存至xml檔案裡

suspend

resume

start

reboot

shutdown 正常關機

destroy 斷電

autostart

console

attach-interface --config

detach-interface --config

attach-disk --config

detach-disk --config

attach-device --config

detach-device --config

domrename --config

edit

create

define

undefine

set-user-password


virsh help monitor

dominfo

dommemstat

domiflist

list --all


virsh help network

net-autostart

net-create

net-define

net-destroy

net-dumpxml

net-edit

net-start

net-undefine


virsh help snapshot

virsh help pool

virsh help volume


qemu-kvm

-machine

-cpu

-smp maxcpus= cores= threads= sockets=

-boot order c 硬碟 -d 光碟

-m mem

-name 

-drive 


-display type

-nographic

-vga

-vnc display

-monitor


-net nic

-net tap

--daemonize


一個手動建立虛擬機器的命令

qemu-kvm -name v1 -m 512 -cpu host \

-smp 1,maxcpus=2,sockets=1,cores=1,threads=1 \

-drive \

file=/vm/v1/disk.qcow2,if=virtio,media=disk,cache=writeback,format=qcow2 \

-vnc :0 -net nic,macaddr=52:54:00:00:00:01,model=virtio \

-net tap,name=vm1,script=no,downscript=no --daemonize




qemu作用

qemu是一個模擬器套件,可以模擬各種硬體,由此套件就可以建立虛擬機器並管理

由於此配置檔案過於複雜由此生成了許多甚於此套件的二次開發如virsh-manager



kvm相關的套件網站,另外兩個是比較好用的web配置kvm工具有興趣可以試試 

www.linux-kvm.org

proxmox

kimchi


總結

1. virsh dumpxml 使用是因為實時配置或新增的網路在重啟後就會失效

使用此命令用來將實時的配置重定向輸出至原來的配置主機檔案裡

包括網路也是一樣或者在配置時加上--config選項用來同步配置至xml檔案中

        2. virsh snapshot 所建立的快照無法引用,只能作為原主機的快照還原使用

3. virsh clone 只能完全克隆,無法做成連線式克隆,也不知道是自己瞭解的不夠深入