KVM
一、kvm简介
基于内核的虚拟机(英语:Kernel-based Virtual Machine,缩写为KVM),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个虚拟机监视器(Hypervisor)。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。
- kvm:kernel-based vm。
- CPU和内存的虚拟化由kvm负责,IO虚拟化由qemu负责。
主机级虚拟化:
- xen
- kvm
容器级虚拟化:
- lxc
- openvz
二、kvm安装
1、确认内核是否支持kvm
# modinfo kvm
2、确认CPU是否支持kvm
# grep -i -E '(vmx|svm|lm)' /proc/cpuinfo
vmx:intel
svm:amd
lm:x64
3、安装kvm
# yum install libvirt-daemon-kvm qemu-kvm virt-manager libvirt -y
4、启动服务
# systemctl start libvirtd
# systemctl enable libvirtd
5、启动图形接口
# virt-manager &
配置桥接
# virsh iface-bridge ens32 br0 || systemctl restart network
需要修改ifcfg-br0配置文件
三、使用cirros镜像测试
1、准备一个cirros
# mkdir -p /data/VMs/c1/
# cd /data/VMs/c1/
# wget https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img
# mv cirros-0.3.0-x86_64-disk.img c1.img
# qemu-img info c1.img
2、启动virt-manager
# virt-manager &
新建——导入现有磁盘映像——》
3、使用virsh连接
查看:
virsh # list
virsh # console c1
使用"Ctrl+]"剥离会话
四、vrish命令
1、域管理命令
virsh # domstate c1
virsh # domstats c1
virsh # dominfo c1
virsh # domiflist c1
virsh # domblklist c1
# virsh dumpxml c1
# virsh create --console /etc/libvirt/qemu/c2.xml
# virsh shutdown c2
# virsh destroy c2 强制关闭虚拟机
# virsh define /etc/libvirt/qemu/c2.xml 定义域
# virsh save c1 /tmp/c1.snap 将状态保存到文件
# virsh restore /tmp/c1.snap 从文件载回
start
reboot
undefine 删除虚拟机
suspend/resume 暂停和继续
# virsh setmem centos7.0 1024 修改内存大小
增加/拆除磁盘
# cd /data/VMs/c1/
c1]# qemu-img create -f qcow2 -o size=20G,preallocation=metadata ./second.img
c1]# qemu-img info second.img
# virsh attach-disk c1 /data/VMs/c1/second.img vdb 为c1附加磁盘
# virsh detach-disk c1 vdb 拆除
增加/拆除网卡
# virsh attach-interface c1 bridge virbr0
# virsh detach-interface c1 bridge --mac 52:54:00:db:7b:65
2、域监控命令
3、查看宿主机和虚拟机相关信息
4、管理网络接口
5、管理网络防火墙规则
6、管理虚拟网络
7、管理节点设备
8、远程连接认证
9、管理快照
10、管理存储池
图形管理工具:
- kimchi
- OpenStack
- oVirt
- proxmox
五、brctl工具
安装:
# yum install bridge-utils
查看
# brctl show
添加桥
# brctl addbr mybr0
# ip link set mybr0 up
# ip addr add 10.0.0.1/8 dev mybr0
六、qemu-kvm工具
安装
# yum install qemu-kvm
# ln -sv /usr/libexec/qemu-kvm /usr/bin/
查看可以模拟的架构和CPU
# qemu-kvm -machine ?
# qemu-kvm -cpu ?
指定CPU核心树
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
指定引导选项
-boot [order=drives][,once=drives][,menu=on|off]
[,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
块设备
-hda/-hdb file:
-hdc/-hdd file:
-cdrom file.iso:
-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
显示
-display type: sdl,curses,none,vnc
-nographic:不使用图形接口
-vga [std|cirrus|vmware|qxl|xenfb|none]
-vnc
-monitor stdio
ctrl-a,c
ctrl-a,h
网络选项
-net nic
-net tap
/etc/qemu-ifup
#!/bin/bash
#
bridge=br0
if [ -n "$1" ];then
ip link set $1 up
sleep 1
brctl addif $bridge $1
[ $? -eq 0] && exit 0 || exit 1
else
echo "Error: on interface specified"
exit 2
fi
示例:
[root@p-kvm ~]# vim /etc/qemu-ifup
#!/bin/bash
#
bridge=br0
if [ -n "$1" ];then
ip link set $1 up
sleep 1
brctl addif $bridge $1
[ $? -eq 0] && exit 0 || exit 1
else
echo "Error: on interface specified"
exit 2
fi
# chmod -x /etc/qemu-ifup
[root@p-kvm ~]# mkdir /data/VMs/c1 -p
[root@p-kvm ~]# cd /data/VMs/c1/
下载cirros
[root@p-kvm c1]# mv cirros-no_cloud-0.3.0-x86_64-disk.img c1.img
[root@kvm ~]# qemu-kvm -name c1 -m 128 -cpu host -smp 2 -drive file=/data/VMs/c1/c1.img,if=virtio,media=disk,cache=writeback,format=qcow2 -net nic,macaddr=52:54:00:00:00:00,model=virtio -net tap,script=/etc/qemu-ifup -vnc :0
批量获取kvm虚拟机IP的脚本:
#!/bin/bash
#ping当前网段内在线的主机,以便产生arp记录.
for ip in 172.20.128.{1..253};do
{ ping -c1 $ip >/dev/null 2>&1
}&
done
#依次查找arp记录.
running_vms=`virsh list |grep running`
echo -ne "共有`echo "$running_vms"|wc -l`个虚拟机在运行.\n"
for i in `echo "$running_vms" | awk '{ print $2 }'`;do
mac=`virsh dumpxml $i |grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`
ip=`arp -ne |grep "$mac" |awk '{printf $1}'`
printf "%-30s %-30s\n" $i $ip
done
批量创建kvm
# for i in {1..30}; do virt-clone --connect=qemu:///system -o temp -n node$i -f /data/node$i.img ;done