標籤:soc 記憶體 $1 -name 1.2 tap 啟動 router 模組
Kvm 只支援x86 64的硬體虛擬化 要求cpu必須支援硬體虛擬化 HVM
Kvm兩個組件:
1 kvm.ko模組裝入後為/dev/kvm 工作為hypervisor ,在使用者空間通過系統調用loctl()與核心中的kvm模組互動,從而完成虛擬機器的建立,啟動
2qemu-kvm進程:在使用者空間用於實現IO裝置類比,用於實現一個虛擬機器執行個體
Kvm架構
Virtio:開源的半虛擬化解決方案
KSM:掃描記憶體,如發現有多個虛擬機器執行個體的記憶體有共同的資料記憶體空間,將其合唯一(用的不多)
Kvm管理工具
1 使用qemu-kvm管理kvm
qemu:
處理器模擬器
模擬各IO裝置
將模擬裝置串連至主機的物理裝置
提供使用者介面
想命令使用qemu 建立連結 ln -sv /usr/libexec/qemu-kvm /usr/bin
Qemu-kvm
-machine [type=]name:-machine help來擷取列表,用於指定類比的主控件類型;
-cpu cpu:-cpu help來擷取列表;用於指定要類比的CPU型號;
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虛擬機器上vcpu的數量及拓撲;
-boot [order=drives][,once=drives][,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
order:各裝置的引導次序:c表示第一塊硬碟,d表示第一個光碟機裝置;-boot order=dc,once=d
-m megs:虛擬機器的記憶體大小;
-name NAME:當前虛擬機器的名稱,要惟一;
塊裝置相關的選項:
-hda/-hdb file:指明IDE匯流排類型的磁碟對應檔路徑;第0和第1個;
-hdc/-hdd file:第2和第3個;
-cdrom file:指定要使用光碟片映像檔案;
-drive [file=file][,if=type][,media=d][,index=i][,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
file=/PATH/TO/SOME_IMAGE_FILE:映像檔案路徑;
if=TYPE:塊裝置匯流排類型,ide, scsi, sd, floppy, virtio,...
media=TYPE:介質類型,cdrom和disk;
index=i:設定同一類型裝置多個裝置的編號;
cache=writethrough|writeback|none|directsync|unsafe:緩衝方式;
format=f:磁碟映像檔案的格式;
顯示選項:
-display type:顯示的類型,sdl, curses, none和vnc;
-nographic:不使用圖形介面;
-vga [std|cirrus|vmware|qxl|xenfb|none]:類比出的顯卡的型號;
-vnc display[,option[,option[,...]]]]:啟動一個vnc server來顯示虛擬機器介面; 讓qemu進程監聽一個vnc介面;
display:
(1) HOST:N
在HOST主機的第N個案頭號輸出vnc;
5900+N
(2) unix:/PATH/TO/SOCK_FILE
(3) none
options:
password:串連此服務所需要的密碼;
-monitor stdio:在標準輸出上顯示monitor介面;
Ctrl-a, c:在console和monitor之間切換;
Ctrl-a, h
類比:
網路選項:
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
為虛擬機器建立一個網路介面,並將其添加至指定的VLAN;
model=type:指明類比出的網卡的型號,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio
建立個磁碟影像檔案:
qemu-img create -f qcow2 -o perallocation=metadate,size=80g /vms/centos/centos.img
建立虛擬網路:
建立虛擬網卡,都是成對出現的一個在虛擬機器上,另一個添加到橋上這樣就可以通訊了
ip link add vethm.1 type veth peer name vethm.2
ip link show 顯示
ip link del vethx.1 type veth peer name vethx.2 刪除
這裡可以類比個空間,然後將一個網卡放進去
ip netns add router1 建立
ip netns list 查看
ip link set dev vethm.2 netns router1 vethm.2 添加 router1 中
在router1 中查看
ip netns exec router1 ifconfig -a
配置 ip 後啟用就可以通訊了
一般虛擬機器都會將另一個網卡添加到橋中
brctl show 顯示
建立一個橋:brctl addbr br-int
Ifconfig br-int up 啟用
指令碼:
#!/bin/bash
Bridge=br-int
If [ -n “$1” ]; then
Ip link set $1 up
Sleep 1
Brctl addif $bridge $1
[ $? -eq 0] && exit 0 || exit 1
Else
Echo “no interface specified”
Exit 2
Fi
啟動虛擬機器執行個體:
#qemu-kvm -name c1 -m 256 -smp 2 -drive file=/vms/ cirros1.img,media=disk,if=virtio,format=qcow2 -net nic,model=virtio,macaddr=52:54:00:00:00 -net tap,script=/etc/qemu-ifup -vnc :0 -daemonize
再起一個
~]# qemu-kvm -name c2 -m 256 -smp 2 -drive file=/vms/cirros/cirros1.img,media=disk,if=virtio,format=qcow2 -net nic,model=virtio,macaddr=52:54:00:00:01 -net tap,script=/etc/qemu-ifup -vnc :2 -daemonize
此時看在橋中關聯了兩個網卡tap01 tap02
# vncviewer :0 & 進入虛擬機器
基於net與外面互動
開啟核心轉寄:sysctl -w net.ipv4.ip_forward=1
在虛擬機器中,指定網關 :route add default gw 10.1.1.254
iptables -t nat –vnL
ping 進行抓包發現是宿主機在訪問
tcpdump -i ens33 icmp
如何將外面伺服器串連到虛擬機器,添加dnat規則
Iptables -t nat -A preroutung -d 172.16.0.67 -p tcp --dport 22922 -j DNAT --to destination 10.1.1.1:22
#ssh -p 22922 [email protected]
Dnsmasq 是一個輕量級的dns和dhcp伺服器
#dnsmasq -i br-int -F 10.1.1.11,10.1.1.100 -o 3,10.1.1.254
kvm虛擬化2-qemu-kvm