#环境说明:centos7
环境准备
cpu开启虚拟化,给宿主机的cpu和内存分配足够多的配置
安装kvm
1.安装相关软件包
yum -y install qemu-kvm libvirt virt-manager virt-install virt-viewer
软件包简介:
- qemu-kvm: 为kvm提供底层仿真支持
- libvirt: 使用最多的kvm虚拟化管理工具和应用程序接口,即通过libvirt调用kvm创建虚拟机, libvirt是kvm通用的访问api,其不但能管理kvm,还能管理vmware、xen、hyper-v、 virtualbox等虚拟化方案
- virt-manager: 图形界面管理工具,其底层也是调用libvirt api来完成对虚拟机的操作,包括虚拟机的 创建、删除、启动、停止以及一些简单的监控功能等
- virt-install: 虚拟机命令行安装工具
- virt-viewer: 通过 vnc 和 spice 协议显示虚拟机器图形控制台的最小工具。该工具在其同名软件包 中:virtviewer
2.启动服务
systemctl start --now libvirtd
创建虚拟机
下面介绍三种创建虚拟机的方法
在创建之前需要在宿主机上先创建一个存放系统镜像的目录,然后上传至此目录下
mkidr -p /data/isos
1.使用virt-manager图形化界面进行创建
#打开图形化需要下载xmanager,并在xshell开启下面功能:
#图形化界面如果乱码,修改语言为英文就能解决
输入virt-manager命令打开图形化界面
基于iso镜像文件创建
浏览
选择镜像
设置虚拟机内存
设置磁盘大小
后面按照安装centos7系统时进行配置即可
2.使用virt-install创建虚拟机(需要手动安装系统)
创建前,需要先利用qume-img命令创建虚拟磁盘,如下:
qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.qcow2 20g
然后使用下面命令创建虚拟机:
virt-install --virt-type kvm --name centos7 --ram 1024 --vcpus 2 \ --cdrom=/data/isos/centos-7-x86_64-minimal-2009.iso --disk \ path=/var/lib/libvirt/images/centos7.qcow2 --network=default --graphics \ vnc,listen=0.0.0.0 --noautoconsole --os-variant=centos7.0
选项解析如下:
- --virt-type:指定要使用的虚拟机监控程序名称(kvm, qemu, xen)
- --name:指定kvm虚拟机的名称
- --ram:指定kvm虚拟机的内存大小
- --vcpus:指定kvm虚拟机的cpu核数
- --cdrom:指定iso镜像文件所在路径
- --disk:指定虚拟磁盘所在路径
- --network:指定kvm虚拟机的网络模式,default为nat模式;桥接模式为--bridge="网卡"
- --graphics:是否使用vnc,none为否
- --noautoconsole:宿主机不自动尝试连接kvm虚拟机
- --os-variant:指定要安装的系统版本
vnc工具
kvm默认网络模式是nat,宿主机会充当路由器,为内部的kvm虚拟机做端口映射。如果开启了vnc连接功能,kvm会为每个kvm虚拟机开启一个连接端口。可以访问宿主机的设备,就可以使使用vnc工具来连接kvm虚拟机
下面是宿主机为kvm虚拟机开启的vnc端口:
查看启动的虚拟机:
3.配合kickstart实现自动化部署kvm虚拟机(无须手动安装系统)
在创建前还是需要先创建虚拟磁盘,如下:
qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.qcow2 20g
编写应答文件:
#需要自行创建
vim /root/ks.cfg
#platform=x86, amd64, 或 intel em64t #version=devel # install os instead of upgrade install # keyboard layouts keyboard 'us' # root password rootpw --iscrypted $6$dx1m9/rlv5sb0kjv$19adcxxscbbnxsrubywhhqvkmtgcd0stjshb3nrmqxzj.opzwcngzoron/tg6fgxu3hyvptc35dgmcg8rpy.61 # 系统语言 #lang zh_cn.utf-8 lang en_us # system authorization information auth --useshadow --passalgo=sha512 # use cdrom installation media #cdrom # use text mode install # 使用字符界面安装操作系统 text # do not configure the x window system # 不配置图形界面系统 skipx # selinux configuration selinux --disabled # firewall configuration firewall --disabled # 设置动态获取 ip network --bootproto=dhcp --device=eth0 --onboot=on #network --hostname=hosname # 设置静态 ip # network --bootproto=static --device=eth0 --gateway=192.168.122.1 --ip=192.168.122.100 --nameserver=192.168.122.1 --netmask=255.255.255.0 --activate # 系统安装完成后 重启系统 #halt reboot # system timezone 系统时区 timezone asia/shanghai # system services 系统启动时候自动启动的服务 services --enable="chronyd" # system bootloader configuration #系统启动引导方式 vda 是kvm 虚拟机时候的第块磁盘名称 bootloader --location=mbr --boot-drive=vda # 清除主引导记录 zerombr # 删除原来的分区和磁盘标签 clearpart --all --initlabel # 磁盘分区信息,这里采用的是 lvm 自动分区 autopart --type=lvm # 下面是自定义分区 #part /boot --fstype="xfs" --ondisk=vda --size=200 #part / --fstype="xfs" --ondisk=vda --size=10040 #part /var --fstype="xfs" --ondisk=vda --size=2048 #part /home --fstype="xfs" --ondisk=vda --size=2048 # 安装软件 %packages @^minimal @core chrony %end # 禁用 kdump %addon com_redhat_kdump --disable --reserve-mb='auto' %end # 安装系统完成后执行的命令脚本 #%post --interpreter=/bin/bash #yum install -y epel-release bash-completion vim-enhanced wget #yum group install "development tools" -y #%end # 用户密码策略 %anaconda pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty %end
#上文件中rootpw --iscrypted指定的为root账户的密码,如过想修改为其它密码可以用下面命令生成加密字符串,将其替掉即可:
python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("confirm: ")) else exit())'
运行下面命令创建虚拟机:
virt-install -v \ --arch x86_64 --virt-type kvm \ --name centos7 \ --memory 1024 \ --vcpus 2 \ --os-type linux \ --location /data/isos/centos-7-x86_64-minimal-2009.iso \ --network default \ --graphics vnc,listen=0.0.0.0 \ --os-variant centos7.0 \ --initrd-inject "/root/ks.cfg" \ --extra-args "ks=file:/ks.cfg \ console=tty0 console=ttys0,115200n8 \ hostname=centos7" \ --disk /var/lib/libvirt/images/centos7.qcow2,cache=writeback,io=threads,bus=virtio
选项解析如下:
location
:指定安装源,这里用于指定iso镜像文件路径os-type
:操作系统类型initrd-inject
:指定ks.cfg文件路径extra-args
:根据location指定的方式安装系统时,用于给内核传递额外的选项
安装完后输入账户密码即可登录kvm虚拟机:
- 账户:root
- 密码:123.com
- ctrl+}退出
克隆现有的虚拟机
virt-clone -o centos7 -f /var/lib/libvirt/images/centos7.qcow2 -n centos7-2
选项解析:
-o
:指定已存在的虚拟机名称-f
: 指定新虚拟机磁盘文件路径-n
:指定新虚拟机的名称
磁盘快照管理
qemu-img管理磁盘快照
创建快照
qemu-img snapshot -c centos7-snapshot1 /var/lib/libvirt/images/centos7.qcow2
选项解析:
-c:指定快照名称
查看快照
qemu-img snapshot -l /var/lib/libvirt/images/centos7.qcow2
查看快照的详细信息
qemu-img info /var/lib/libvirt/images/centos7.qcow2
恢复快照
#需要关机后进行
qemu-img snapshot -a centos7-snapshot /var/lib/libvirt/images/centos7.qcow2
选项解析:
-a:指定需要恢复的快照名称
删除快照
#需要关机后进行
qemu-img snapshot -d centos7-snapshot /var/lib/libvirt/images/centos7.qcow2
选项解析:
-d:指定需要删除的快照名称
virsh管理虚拟机快照
创建快照
virsh snapshot-create centos7
查看快照
virsh snapshot-list centos7
恢复快照
#无须关机
virsh snapshot-revert centos7 --snapshotname 1600593611 --running
选项解析:
snapshotname
:先查看快照确认快照的名称,是一段数字,在--snapshotname后跟上快照名称running
:恢复后,将状态更改为正在运行
删除快照
virsh snapshot-delete centos7 --snapshotname 1600593611
网络管理
配置虚拟机和宿主机为桥接网络,实现网络互通并用xshell连接
1)配置宿主机的桥接网络
修改宿主机网卡文件为以下,模式为空,nm_controlled=no,意思为此网络不受networkmanager控制,网桥名为br0:
bootproto=none name=ens32 device=ens32 onboot=yes nm_contrlled=no bridge=br0
创建并编写br0网卡文件为一下, 模式为静态,类型是网桥,不受nm控制,定义ip:
bootproto=static type=bridge name=br0 device=br0 onboot=yes nm_contrlled=no ipaddr=10.0.0.200 prefix=24 netmask=255.255.255.0 gateway=10.0.0.0.2 dns=202.106.0.20
关闭networkmanager:
systemctl stop networkmanager systemctl disable networkmanager
重启网络服务:
systemctl restart network
使用brctl show命令查看虚拟设备情况,没有的话,安装名为bridge-utils的包即可:
[root@centos7-temp ~]# brctl show bridge name bridge id stp enabled interfaces br0 8000.000c291e1dd4 yes ens32 virbr0 8000.5254006c683e yes virbr0-nic vnet0
#由上可见,br0设备,绑定了ens32网卡成功,stp enabled为no,可以执行brctl stp br0 on打开
使用route命令查看路由情况:
[root@centos7-temp ~]# route -n kernel ip routing table destination gateway genmask flags metric ref use iface 0.0.0.0 10.0.0.2 0.0.0.0 ug 0 0 0 br0
#由上可见,所有地址,网关为10.0.0.2,通过br0,进行通信
2)配置虚拟机桥接网络
修改/etc/qemu-kvm/bridge.conf文件:
allow virbr0 #加上下面一行 allow br0
将虚拟机关机:
virsh shutdown <name>
查看启动的虚拟机:
virsh list
修改虚拟机配置文件中网络部分两处:
vim /etc/libvirt/qemu/centos7.xml
修改前如下:
修改为:
启动虚拟机:
virsh start <name>
使用virt-manager打开图形化界面将网卡修改桥接网卡:
修改虚拟机网络配置文件:
#加上带注释的行即可
vi /etc/sysconfig/network-scripts/ifcfg-eth0
name="eth0" hwaddr="52:54:00:38:8d:43" onboot="yes" netboot="yes" uuid="50682a96-3672-42ac-8469-2c2f20ffde5a" ipv6init="yes" bootproto="static" #设置静态ip ipaddr=10.0.0.201 #选择和宿主机在同一个网段的ip netmask=255.255.255.0 #与宿主机同网段 gateway=10.0.0.2 #与宿主机同网关 dns=202.106.0.20 #与宿主机同dns type="ethernet" proxy_method="none" browser_only="no" defroute="yes" ipv4_failure_fatal="no" ipv6_autoconf="yes" ipv6_defroute="yes" ipv6_failure_fatal="no"
在虚拟机中关闭networkmanager:
systemctl stop networkmanager
重启网络服务:
systemctl restart network
3)验证
在宿主机上ping虚拟机的地址,验证网络是否能通信:
在虚拟机上ping外网地址,验证是否能上外网:
通过xshell终端工具连接虚拟机:
virsh常用命令:
- 查看当前启动的虚拟机: virsh list
- 查看所有虚拟机:virsh list --all
- 启动虚拟机:virsh start <name>
- 正常关机:virsh shutdown <name>
- 强制关机::virsh destroy <name>
- 暂停虚拟机::virsh suspend <name>
- 恢复虚拟机:virsh resume <name>
- 设置虚拟机随宿主机启动而自启动:virsh autostart <name>
- 禁用虚拟机随宿主机启动而自启动:virsh autostart <name> --distable
- 删除虚拟机配置,但不删除磁盘文件:virsh undefine <name>
- 删除虚拟机包括磁盘文件:virsh undefine <name> --remove-all-storage
- 查看虚拟机网卡配置:virsh domiflist <name>
- 查看虚拟机的网卡地址信息:virsh domifaddr <name>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论