搭建环境 : CentOS 7
[root@KVM ~]# systemctl stop firewalld [root@KVM ~]# systemctl disable firewalld [root@KVM ~]# grep -Ei 'vmx|svm' /proc/cpuinfo # 过滤出vmx或svm关键字就代表支持虚拟化,vmx是Intel的CPU,svm是AMD的CPU
格式化新磁盘,并挂载
[root@KVM ~]# fdisk -l [root@KVM ~]# mkfs.ext4 /dev/sdb # 会有询问,输入y即可 [root@KVM ~]# blkid /dev/sdb # 检查是否已格式化 /dev/sdb: UUID="a2600993-bde6-4d85-bc3e-724f45ff9ae3" TYPE="ext4" [root@KVM ~]# mkdir /kvm_data # 创建挂载目录 [root@KVM ~]# mount /dev/sdb /kvm_data # 将新磁盘挂载到/kvm_data目录下 [root@KVM ~]# vim /etc/fstab # 设置开机自动挂载 # 添加 /dev/sdb /kvm_data/ ext4 defaults 0 0
安装kvm
[root@KVM ~]# yum -y install virt-* libvirt bridge-utils qemu-img
配置网卡
[root@KVM ~]# cd /etc/sysconfig/network-scripts/ [root@KVM network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@KVM network-scripts]# vim ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes NAME=ens33 DEVICE=ens33 ONBOOT=yes
BRIDGE=br0 # 添加 # 然后把IP MASK DNS都删掉即可 TYPE=bridge # 修改网卡类型 PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no NAME=br0 # 网卡名 DEVICE=br0 ONBOOT=yes IPADDR=192.168.94.22 PREFIX=24 GATEWAY=192.168.94.2
[root@KVM ~]# systemctl restart network
查看网卡信息
[root@KVM ~]# ifconfig br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.94.22 netmask 255.255.255.0 broadcast 192.168.94.255 inet6 fe80::20c:29ff:fe6b:dbdc prefixlen 64 scopeid 0x20<link> ether 00:0c:29:6b:db:dc txqueuelen 1000 (Ethernet) RX packets 94 bytes 9027 (8.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 66 bytes 9105 (8.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:0c:29:6b:db:dc txqueuelen 1000 (Ethernet) RX packets 329996 bytes 478088865 (455.9 MiB) RX errors 0 dropped 1 overruns 0 frame 0 TX packets 66181 bytes 4835367 (4.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 611 bytes 75976 (74.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 611 bytes 75976 (74.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
启动KVM的服务
[root@KVM ~]# lsmod |grep kvm # 检查KVM模块是否加载 kvm_intel 174841 0 kvm 578518 1 kvm_intel irqbypass 13503 1 kvm [root@KVM ~]# systemctl start libvirtd # 启动libvirtd服务 [root@KVM ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c296bdbdc no ens33 # 我们配置的桥接网卡 virbr0 8000.525400d2488d yes virbr0-nic # NAT模式的网卡
创建虚拟机安装CentOS7
[root@KVM ~]# cd /tmp/ [root@KVM tmp]# ls CentOS-7-x86_64-DVD-1804.iso # 准备好的镜像 systemd-private-a5de49561f874704a8ab299e79927293-chronyd.service-bhemHv systemd-private-a5de49561f874704a8ab299e79927293-named.service-URqlBG systemd-private-cc88880270574599942110f66e3eae19-systemd-hostnamed.service-c0VlU8
安装这个CentOS7镜像文件
[root@KVM tmp]# virt-install --name=damowang --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1804.iso --disk path=/kvm_data/damowang.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
--name 指定虚拟机的名称
--memory 指定分配给虚拟机的内存资源大小
maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
--vcpus 指定分配给虚拟机的CPU核心数量
maxvcpus 指定可调节的最大CPU核心数量
--os-type 指定虚拟机安装的操作系统类型
--os-variant 指定系统的发行版本
--location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
--disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
--bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
--graphics 指定是否开启图形
--console 定义终端的属性,target_type 则是定义终端的类型
--extra-args 定义终端额外的参数
开始安装后,正常的情况下会进入到这样一个界面
这是配置语言、时区、安装源、网络、密码等信息,和在VMware里安装CentOS虚拟机是一样的,只不过这个是命令行形式,而VMware里是图形界面
首先设置语言,按数字1,回车进入以下界面 输入回车后再输入68
然后选择1 简体中文
配置完成之后又会再次回到配置界面,下面输入2 设置时区
选择设置时区,设置亚洲时区
回车后选择上海时区
输入5 ,设置系统安装盘
选择c继续
默认选项即可 , c继续
选择标准分区
输入c , 继续
输入8 ,设置超级用户密码
输入b, 开始安装
安装完成后回自动重启
重启成功之后就会进入到登录界面
登录
现在是一个虚拟终端,按 Ctrl + ] 可以切出来
/kvm_data下面多了一个镜像文件
[root@KVM tmp]# ll /kvm_data/ 总用量 1377968 -rw------- 1 qemu qemu 10739318784 9月 9 21:03 damowang.img drwx------ 2 root root 16384 9月 9 17:46 lost+found
查看虚拟机状态
[root@KVM tmp]# virsh list # 查看当前运行中的虚拟机 Id 名称 状态 ---------------------------------------------------- 2 damowang running [root@KVM tmp]# virsh list --all # 列出所有虚拟机包括关机状态的 Id 名称 状态 ---------------------------------------------------- 2 damowang running
查看虚拟机配置文件
[root@KVM tmp]# ls /etc/libvirt/qemu/ damowang.xml networks [root@KVM tmp]# ls /etc/libvirt/qemu/networks/ autostart default.xml [root@KVM tmp]# ls /etc/libvirt/qemu/networks/autostart/ default.xml
管理虚拟机的常用命令
[root@KVM tmp]# virsh list Id 名称 状态 ---------------------------------------------------- 2 damowang running [root@KVM tmp]# virsh console 2 # 进入指定的虚拟机,进入的时候还需要按一下回车 可以用虚拟机id 可以用名称 连接到域 damowang 换码符为 ^] [root@localhost ~]# [root@KVM tmp]# virsh shutdown 2 # 关闭虚拟机 域 2 被关闭 [root@KVM tmp]# virsh start damowang # 启动虚拟机 域 damowang 已开始 [root@KVM tmp]# virsh autostart damowang # 设置宿主机开机时该虚拟机也开机 域 damowang标记为自动开始 [root@KVM tmp]# virsh autostart --disable damowang # 解除开机启动 域 damowang取消标记为自动开始 [root@KVM tmp]# virsh suspend damowang # 挂起虚拟机 域 damowang 被挂起 [root@KVM tmp]# virsh resume damowang # 恢复挂起的虚拟机 域 damowang 被重新恢复 [root@KVM tmp]# virsh undefine damowang # 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
为虚拟机配置IP ,然后就可以正常使用了
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes NAME=eth0 UUID=1582ada4-4c42-4dab-84e2-f7075fc66d3f DEVICE=eth0 ONBOOT=yes IPADDR=192.168.94.111 NETMASK=255.255.255.0 GATEWAY=192.168.94.2 DNS1=192.168.94.2 [root@localhost ~]# systemctl restart network [root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:6a:5b:46 brd ff:ff:ff:ff:ff:ff inet 192.168.94.111/24 brd 192.168.94.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe6a:5b46/64 scope link valid_lft forever preferred_lft forever