linux部署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替换掉里面的名称和磁盘名称,启动新虚拟机,以后每次需要新虚拟机就执行改脚本,脚本的智能化就取决于自己水平,可以做个交互判断需要一次克隆几台虚拟机。

猜你喜欢

转载自blog.csdn.net/qq_42712356/article/details/81480597