KVM — 使用 qemu-kvm 原生工具栈实现创建管理虚拟机实例

1 篇文章 0 订阅
1 篇文章 0 订阅

KVM — 使用 qemu-kvm 原生工具栈实现创建管理虚拟机实例

为了更好的理解虚拟机实例的创建和初始化过程,我们在此处使用提供了 CLI 接口的 qemu-kvm 工具来演示虚拟机实例管理的详细过程。

应用准备

启用硬件虚拟化支持功能,对于不同宿主机,启用方式略有不同

如果虚拟机的宿主机为Windows,假如使用VMware中的虚拟机作为宿主机,需要在VMware选项中的”处理器”选项中启用”虚拟化 Intel VT-x/EPT 或 AMD-V/RVI(V) ” 选项。

如果虚拟机的宿主机为Linux,需要在BIOS处启动 Intel VT-x/EPT 或 AMD-V/RVI(V) 虚拟化技术

验证系统已经支持KVM并加载该模块,使宿主机成为hyperViso

  • 搜索cpu信息中是否有以下字段
grep -E -i "(svm|vmx|lm)" /proc/cpuinfo
  • 查看kvm模块信息
modinfo kvm
  • 加载kvm模块并查看结果
modprobe kvm

lsmod | grep kvm
kvm_intel             170181  0 
kvm                   554609  1 kvm_intel
irqbypass              13503  1 kvm
  • 查看kvm字符设备是否存在
ls -l /dev/kvm
crw-------. 1 root root 10, 232 Jul 27 03:58 /dev/kvm

qemu-kvm 程序包

  • 安装程序包
yum install -y qemu-kvm
  • 为了方便使用 qemu-kvm 命令,执行以下命令
rpm -ql qemu-kvm
/usr/libexec/qemu-kvm

ln -sv /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
‘/usr/bin/qemu-kvm-> ‘/usr/libexec/qemu-kvm’

ll /usr/bin/qemu-kvm
lrwxrwxrwx. 1 root root 21 Jul 27 21:19 /usr/bin/qemu-kvm -> /usr/libexec/qemu-kvm

qemu-kvm 命令详解

  • qemu-kvm 命令语法
qemu-kvm [options] [disk_image]
  • 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;
    -net nic,model=?
macaddr=mac:指明mac地址;52:54:00:XX:XX:XX

-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
    通过物理的TAP网络接口连接至vlan n
    script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup
    downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown
    ifname=NAME:自定义接口名称

其它选项:
    -daemonize:以守护进程运行

脚本示例 :

/etc/qemu-ifup

#!/bin/bash
#

bridge=br0

if [ -n "$1" ];then
    p link set $1 up
    sleep 1
    brctl addif $bridge $1
    [ $? -eq 0 ] && exit 0 || exit 1
else
    echo "Error: no interface specified."
    exit 1
fi

使用 qemu-kvm 创建管理虚拟机实例的实验具体步骤

  • 为虚拟户实例创建 .img 磁盘映像文件
qemu-img create -f qcow2 -o preallocation=metadata,size=80G /vms/centos/cts1.img
#显示结果为
Formatting '/vms/centos/cts1.img', fmt=qcow2 size=85899345920 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off

查看创建的映像文件信息,实际占据空间仅有16M

ls -lh /vms/centos/cts1.img 
-rw-r--r--. 1 root root 81G Jul 27 21:51 /vms/centos/cts1.img

du -sh /vms/centos/cts1.img 
16M /vms/centos/cts1.img
  • 使用 qemu-img 命令查看 .img 磁盘映像文件的信息
qemu-img info /vms/centos/cts1.img 
image: /vms/centos/cts1.img
file format: qcow2
virtual size: 80G (85899345920 bytes)
disk size: 15M
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

 为虚拟机安装操作系统

准备一个操作系统,为新创建的虚拟机安装操作系统

#从虚拟光驱引导,安装准备好的操作系统
qemu-kvm -name cts7 -m 512 -cpu host -smp 2,cores=2,sockets=1 -drive file=/vms/centos/cts1.img,if=virtio,media=disk,cache=writeback,format=qcow2 -drive file=/vms/ISOs/CentOS-7-x86_64-Minimal-1511.iso,media=cdrom -boot order=d -vnc :0

#查看端口
ss -tnlp | grep qemu-kvm
LISTEN     0      1     *:5900      *:*      users:(("qemu-kvm",pid=9026,fd=13))

注:如果 -vnc 后的选项是 “:1” ,则监听5901端口

测试使用vnc远程连接至创建的虚拟机实例

使用另一台主机连接至虚拟机,该主机需要有vnc程序,并支持图形界面

  • 安装vnc程序并连接至创建的虚拟机实例
yum install -y vnc
vncviewer :0        #或者 vncviewer 172.16.50.18:5901

运行虚拟机的操作系统

#从磁盘引导操作系统
qemu-kvm -name cts7 -m 512 -cpu host -smp 2,cores=2,sockets=1 -drive file=/vms/centos/cts1.img,if=virtio,media=disk,cache=writeback,format=qcow2 -drive file=/vms/ISOs/CentOS-7-x86_64-Minimal-1511.iso,media=cdrom -boot order=-vnc :0

至此,虚拟机实例可以正常使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值