当前位置: 代码网 > 服务器>服务器>云虚拟主机 > 安装KVM并创建虚拟机及基本使用方式

安装KVM并创建虚拟机及基本使用方式

2025年02月13日 云虚拟主机 我要评论
#环境说明:centos7环境准备cpu开启虚拟化,给宿主机的cpu和内存分配足够多的配置安装kvm1.安装相关软件包yum -y install qemu-kvm libvirt virt-ma

#环境说明: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>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com