天天看点

linux部署kvm虚拟化KVM概述

初学Linux的朋友往往自己会做很多实验,这就需要用到许多虚拟机,本文介绍了一种适合个人实验环境的kvm快速部署虚拟机,(企业环境也可以,根据实际情况修改),纯手打原创。

KVM概述

Kernel-based Virtual Machine的简称,kvm是一个开源的基于硬件的虚拟化技术,所以需要cpu的支持(Intel VT技术或者AMD V技术)。企业里常用到的vmware 是基于软件层面的虚拟化,这是两者的区别。这里为什么选择kvm,是因为他部署简单,不需要另外的客户端管理,可以完全用命令管理,方便操作。

步骤

1.一台物理机,也可以是云服务器,配置看自己情况,内存要大,不能低于8G。安装centos(推荐7系列的版本)图形版或者ubuntu 桌面版,这里以实验环境举例,所以安装带图形的版本。

以centos举例,ubuntu安装方法一样。

2.配置网络yum源,有些包iso镜像里没有,用网络yun源方便解决。

执行egrep -c ‘(vmx|svm)’ /proc/cpuinfo命令

如果输出结果为0则说明CPU不支持硬件虚拟化

如果输出结果大于0则说么可以支持

如果不支持请进入开机bios开启cpu虚拟化,主流cpu都支持虚拟化。

3.安装软件包:

必备软件

qemu-kvm— 为kvm提供底层支持

libvirt-client — virsh等软件

libvirt-daemon — libvirtd服务进程

libvirt-daemon-driver-qemu— virsh的qemu驱动

可选功能

virt-install — 系统安装工具

virt-manager— 图形管理工具,在这里一定要装,纯命令管理不适合初学者

virt-v2v— 虚拟机迁移工具

virt-p2v— 物理机迁移工具

3.搭建网桥,这是关键的一步,保证虚拟机和真机能通讯。

进入/etc/libvirt/qemu/networks目录,里面有个defaulst.xml的模板配置文件,可以拿这个复制,也可以重新手写,必须在此目录下。

自建一个以.xml结尾的文件,推荐名称以你要命名的网卡加.xml结尾,内容如下:

<network> <name>网卡名</name> <forward mode='nat'/> <bridge name='网卡名'/> <ip address='192.168.1.254' netmask='255.255.255.0'> <dhcp> <range start='192.168.1.100' end='192.168.1.200'/> </dhcp> </ip> </network>

//其中汉字部分可以自定义,192.168.1.254是自己给本机这个网卡设置的ip,可以自己随意设置,但主机位最好是254,这个是虚拟机的网关。第三行是转发的方式,如果没有这个只能内部通讯,不能链接因特网。dhcp这一段是给虚拟机用dhcp的方式分发ip,范围是从100到200,可以将这3行删掉,就是新建的虚拟机没有ip,自己手动配置。结束保存退出。

激活:vrish net-define 网卡.xml

启动:virsh net-start 网卡

开机启动:virsh net-autostart 网卡

现在ifconfig查看就会发现多了一个叫xx的网卡,并且IP是192.168.1.254/24

4.创建虚拟磁盘

进入/var/lib/libvirt/images/目录,这是默认磁盘存放目录

qemu-img create -f qcow2 node.qcow2 50G

//node.qcow2是磁盘的名称,创建时要以qcow2结尾,不然等会识别不出来,后面做成模板后就可以随意命名,50G是给磁盘的大小,这个大小只是一个文件,跟真机的物理磁盘大小没关系。

qemu-img info node.qcow2 可以查看这个虚拟磁盘的信息

5.创建模板虚拟机

打开vrit-manager图行管理,点击左上的小灯泡按钮,选择新建虚拟机,这里要自己准备一个centos7的镜像,可以去官网下载,选择本地镜像安装(其他方式也可以,这里选简单的),选择你下载好的镜像,下一步,注意在网卡选择上要选择你刚才新建的网卡,内存给2048就够了,磁盘不要选择第一个选项,要选择第二个,并找到刚才你新建的node.qcow2磁盘,在自定义配置里最好自己添加几个网卡,选择virtool(记不太清了),不添加也没关系,其他和正常装系统没区别,选择最小化安装。如果安装报错cpu不支持,请进入开机bios将cpu虚拟化打开,前面说过kvm需要cpu支持。

系统安装好了用root进入,centos默认的密码是redhat,进入查看ip是否分配ok(用ip a命令),并配置yum源,(这里不要用网络yum,真机挂载一个iso镜像通过http或者ftp共享),用真机ssh远程该虚拟机方便操作,安装常用软件包:

自动补齐的包:bash-completion

ifconfig:net-tools 可以用yum provides查找自己需要的命令的包

禁用防火墙,selinux

禁用空路由:vim /etc/sysconfig/network

添加 NOZEROCONF=”yes”

配置console端口:

vim /etc/sysconfig/grub

在GRUB_CMDLINE_LINUX这一段的后面添加 console=tty0 console=ttyS0,115200n8 (要包含在分号里面)

激活:grub2-mkconfig -o /boot/grub2/grub.cfg

修改网卡配置文件:删除里面的uuid,mac地址,ip地址,网关,如果没有DEVICE=”**” 该行要自己添加。关闭虚拟机。

6.修改虚拟机模板配置文件。

//虚拟机有2个文件,分别是磁盘文件和硬件配置文件,kvm的虚拟机就是通过这2个文件来产生,磁盘文件在/var/lib/libvirt/images, 配置文件在/etc/libvirt/qemu.

进入/etc/libvirt/qemu目录,将刚才建的模板虚拟机配置文件复制一份命名为node1.xml,然后vim修改

<domain type='kvm'>           <name>centos7.0</name>        ##定义虚拟机名称,这里要改成新的名称node1 <uuid>c2d264d3-5c61-4d2e-8678-b28673c1f64b</uuid> ##删掉改行 <memory unit='KiB'>1048576</memory> ##定义内存大小,根据你自己的模板来,可以不改 <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> <os>                  <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/>       </os> <features>           <acpi/> <apic/> </features> <cpu mode='custom' match='exact'> <model fallback='allow'>Haswell-noTSX</model> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff>       <on_reboot>restart</on_reboot> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices>                 <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'>     <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/node.qcow2'/> ##虚拟磁盘的位置,将后面的node.qcow2改成新名字node1.img <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> <interface type='bridge'>     <mac address='52:54:00:6a:1e:54'/> ##删除改行 <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <serial type='pty'>       <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='2'/> </channel> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/> <sound model='ich6'>      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </sound> <video> <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video> <redirdev bus='usb' type='spicevmc'> </redirdev> <redirdev bus='usb' type='spicevmc'> </redirdev> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </memballoon> </devices> </domain>

7.根据模板虚拟机克隆新的虚拟机。

进入磁盘文件目录:(不进入要打绝对路径)

qemu-img create -b node.qcow2 -f qcow2 node1.img

根据node.qcow2创建一个名为node1.img的磁盘文件

根据刚才修改过的配置文件启动新的虚拟机:

cd /etc/libvirt/qemu

virsh define node1.xml

virsh start node1

新的虚拟机启动起来就ok了,如果有报错,请仔细检查配置文件里面改动的名称和磁盘文件名称是否对应,虚拟机名称不能重复。

下面是一些用到的管理虚拟机命令

virsh nodeinfo 查看KVM节点(服务器)信息

virsh list [–all] 列出虚拟机

virsh net-list [–all] 列出虚拟网络

virsh dominfo 虚拟机名称 查看指定虚拟机的信息

virsh start|reboot|shutdown 虚拟机名称 virsh undefine 虚拟机名 运行|重启|关闭挃定的虚拟机

virsh destroy 虚拟机名称 强制关闭指定的虚拟机

virsh autostart [–disable] 虚拟机名称 将指定的虚拟机设为开机自动运行

virsh undefine 虚拟机名 删除虚拟机

virsh console 虚拟机名 用console连接虚拟机

这样以后每次需要新的虚拟机就直接更改xml配置文件,再根据模板磁盘文件克隆一个新的磁盘文件,就能直接启动新的虚拟机,可以自己写一个脚本,用sed替换掉里面的名称和磁盘名称,启动新虚拟机,以后每次需要新虚拟机就执行改脚本,脚本的智能化就取决于自己水平,可以做个交互判断需要一次克隆几台虚拟机。

继续阅读