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

管理工具栈:http://www.linux-kvm.org/page/Management_Tools

五、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
posted @ 2018-09-23 08:38  生生不息.连绵不绝  阅读(525)  评论(0编辑  收藏  举报