目录
虚拟化技术
主机虚拟化
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
php-net
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 只能完全克隆,无法做成连接式克隆,也不知道是自己了解的不够深入