KVM实验(一)
参考:https://www.cnblogs.com/wn1m/p/11281576.html
一、验证是否开启虚拟化
[root@node1 ~]# grep -E "vmx|svm" /proc/cpuinfo | wc -l
4
二、安装工具
qemu-kvm(kvm在用户空间的管理工具),libvirt(一个服务,其下组件可用来管理kvm虚拟机)
[root@node1 ~]# yum install qemu-kvm libvirt -y
libvirt安装完后会创建virbr0网桥

三、相关命令
libvirt
使用最多的KVM虚拟化管理工具和应用程序接口,即通过libvirt调用KVM创建虚拟机,libvirt是KVM通用的访问API,其不但能管理KVM,还能管理VMware、Xen、Hyper-V、virtualBox等虚拟化方案。
virsh:
是一个常用的管理KVM虚拟化的命令行工具,常用语管理运行在单个宿主机上的虚拟机,virsh是一个使用C语言编写调用libvirt API的虚拟化管理命令行工具。
virt-manager:
virt-manager是一个虚拟化管理图形软件,其底层也是调用libvirt API来完成对虚拟机的操作,包括虚拟机的创建、删除、启动、停止以及一些简单的监控功能等。
openstack:
openstack是一个开源的虚拟化编排工具,常用于构建大规模的虚拟化环境,用语管理成千上万虚拟机的创建、启动、删除等整个生命周期。
四、启动服务
[root@node1 ~]# systemctl start libvirtd && systemctl enable libvirtd
五、libvirt0-client已经安装,virt-install安装下,管理虚拟机的
[root@node1 ~]# yum install virt-install -y
六、安装vncserver待会儿要用(好像不需要)
[root@node1 ~]# yum install tigervnc-server -y
七、创建自己的网桥br0,不用自动创建的
[root@node1 network-scripts]# cat ifcfg-br0
# Generated by dracut initrd
NAME="br0"
DEVICE=br0
ONBOOT=yes
BOOTPROTO=static
TYPE=Bridge
IPADDR=172.18.3.138
NETMASK=255.255.0.0
GATEWAY=172.18.0.1
DNS1=114.114.114.114
[root@node1 network-scripts]# cat ifcfg-eth0
# Generated by dracut initrd
NAME="eth0"
ONBOOT=yes
BOOTPROTO=static
TYPE=Ethernet
BRIDGE=br0
DNS1=114.114.114.114
[root@node1 network-scripts]# systemctl restart network
删除之前的网桥

[root@node1 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c297afd2e no eth0
virbr0 8000.5254002fd1b3 yes virbr0-nic
[root@node1 network-scripts]# ip link set virbr0 down
[root@node1 network-scripts]# brctl delbr virbr0
[root@node1 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c297afd2e no eth0
[root@node1 network-scripts]# ip link delete virbr0-nic #也删一下

八、下载镜像
[root@node1 ~]# mkdir /data/image -p
[root@node1 ~]# cd /data/image/
[root@node1 image]# wget http://cloud-images.ubuntu.com/daily/server/bionic/current/bionic-server-cloudimg-arm64.img
九、创建10G磁盘空间
[root@node1 image]# qemu-img create -f qcow2 /data/machine/centos7-1 10G
Formatting '/data/machine/centos7-1', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
十、创建虚拟机
[root@node1 image]# virt-install \
--name centos7-1 \
--memory 512 \
--vcpus 1 \
--virt-type kvm \
--cdrom /data/image/CentOS-7-x86_64-Minimal-1908.iso \
--disk /data/machine/centos7-1 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
十一、vnc连接
[root@node1 data]# virsh list
Id Name State
----------------------------------------------------
1 centos7-1 running
[root@node1 data]# ss -ltn
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 1 *:5900 *:*

失败了,连不上,网上也找不到资料,都是virt-manager管理的,之前我用ubuntu是可以的
换了vnc可以连上了:https://www.realvnc.com/download/file/viewer.files/VNC-Viewer-6.19.1115-Windows-64bit.exe

销毁虚拟机:
[root@node1 ~]# virsh destroy centos7-1
Domain centos7-1 destroyed
[root@node1 ~]# virsh destroy ubuntu18.04-1
Domain ubuntu18.04-1 destroyed
[root@node1 ~]# virsh undefine --domain centos7-1
Domain centos7-1 has been undefined
[root@node1 ~]# virsh undefine --domain ubuntu18.04-1
Domain ubuntu18.04-1 has been undefined
十二、令一种方法来创建虚拟机
创建系统盘
[root@localhost boot]# qemu-img create -f qcow2 /data/machine/CentOS7-1.qcow2 10G
Formatting '/data/machine/CentOS7-1.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
开始安装:
[root@localhost boot]# virt-install \
> --name centos7-1 \
> --memory 1024 \
> --vcpus 1 \
> --virt-type kvm \
> --location=/data/iso/CentOS-7-x86_64-Minimal-1908.iso \
> --disk /data/machine/CentOS7-1.qcow2 \
> --network bridge=br0 \
> --graphics none \
> --extra-args='console=ttyS0' \
> --force
安装界面:

语言设置:


时区:

ntp配置:

关闭kdump

网络配置:开启启动

root密码:

b开始安装

成功了:


十三、关于如何看虚拟机的ip
网上大多是virsh edit [虚拟机名字]得到mac地址,然后arp看本机arp路由表
脚本来自:https://www.v2ex.com/t/197481
[root@localhost ~]# cat ping.sh
#!/bin/bash
#BY MRCO,2015-06-10
#MODIFY 2015-06-10
#ping当前网段内在线的主机,以便产生arp记录.
subnet=`route -n|grep "UG" |awk '{print $2}'|sed 's/..$//g'`
for ip in $subnet.{1..253};do
{
ping -c1 $ip >/dev/null 2>&1
}&
done
#依次查找arp记录.
running_vms=`virsh list |grep running`
echo -ne "共有`echo "$running_vms"|wc -l`个虚拟机在运行.\n"
for i in `echo "$running_vms" | awk '{ print $2 }'`;do
mac=`virsh dumpxml $i |grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`
ip=`arp -ne |grep "$mac" |awk '{printf $1}'`
printf "%-30s %-30s\n" $i $ip
done

十四、虚拟机的其他操作
14.1查看所有虚拟机列表
[root@es-2 tmp]# virsh list --all
Id Name State
----------------------------------------------------
- centos7-1 shut off
14.2启动虚拟机
[root@es-2 tmp]# virsh start centos7-1
Domain centos7-1 started
[root@es-2 tmp]# virsh list --all
Id Name State
----------------------------------------------------
5 centos7-1 running
14.3关闭虚拟机
[root@es-2 tmp]# virsh shutdown centos7-1
14.4设置虚拟机开机自启动
[root@es-2 tmp]# virsh autostart centos7-1
[root@es-2 ~]# virsh autostart --disable centos7-1 #开机不自动启动
14.5挂起和恢复虚拟机
[root@es-2 tmp]# virsh suspend centos7-1 #挂起虚拟机
Domain centos7-1 suspended
[root@es-2 tmp]# virsh list --all #查看虚拟机状态
Id Name State
----------------------------------------------------
6 centos7-1 paused
[root@es-2 tmp]# virsh resume centos7-1 #恢复虚拟机
Domain centos7-1 resumed
[root@es-2 tmp]# virsh list --all #查看虚拟机状态
Id Name State
----------------------------------------------------
6 centos7-1 running
14.6重启虚拟机
[root@es-2 tmp]# virsh reboot centos7-1
14.7强制关闭虚拟机
通过这一步,可以发现virsh只不过是一个管理工具而已
#虚拟机仍在,仍可以virsh start启动
[root@es-2 tmp]# virsh destroy centos7-1
#取消定义域,这样列表就看不到虚拟机了,实际上虚拟机磁盘还在
[root@es-2 tmp]# virsh dumpxml centos7-1 > /tmp/centos7-1.xml #先备份xml配置
[root@es-2 tmp]# virsh undefine centos7-1 #这样就看不到了
#再导入xml文件,重新定义
[root@es-2 tmp]# virsh define /tmp/centos7-1.xml
[root@es-2 tmp]# virsh define /tmp/centos7-1.xml
Domain centos7-1 defined from /tmp/centos7-1.xml
[root@es-2 tmp]# virsh list --all #查看虚拟机列表
Id Name State
----------------------------------------------------
- centos7-1 shut off
[root@es-2 tmp]# virsh start centos7-1 #启动虚拟机
Domain centos7-1 started
14.8查看虚拟机网卡信息
可以看到mac信息
[root@es-2 ~]# virsh domiflist centos7-1
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br0 virtio 52:54:00:d0:28:d9
14.9查看 kvm 虚拟机磁盘信息
[root@es-2 ~]# virsh domblklist centos7-1
Target Source
------------------------------------------------
vda /data/machine/centos7-1.qcow2
hda -
14.10查看虚拟机配置文件信息
[root@es-2 ~]# virsh dumpxml centos7-1
<domain type='kvm' id='8'>
<name>centos7-1</name>
.....
14.11查看虚拟机的基本信息
[root@es-2 ~]# virsh dominfo centos7-1
Id: 8
Name: centos7-1
UUID: 39bd68f5-7779-425f-9f51-6d7f9d886521
OS Type: hvm
State: running
CPU(s): 1
CPU time: 36.0s
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
十五、调整虚拟机磁盘大小
1、当前磁盘大小
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 100G 0 disk
├─vda1 252:1 0 512M 0 part /boot
└─vda2 252:2 0 72G 0 part
├─centos-root 253:0 0 20G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-data 253:2 0 50G 0 lvm /data
2、查看虚拟机磁盘位置
[root@es-2 ~]# virsh domblklist centos7-1
Target Source
------------------------------------------------
vda /data/machine/centos7-1.qcow2
hda -
3、查看磁盘信息
[root@es-2 ~]# qemu-img info /data/machine/centos7-1.qcow2
image: /data/machine/centos7-1.qcow2
file format: qcow2
virtual size: 100G (107374182400 bytes)
disk size: 1.9G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@es-2 ~]# du -sh /data/machine/centos7-1.qcow2
2.0G /data/machine/centos7-1.qcow2
[root@es-2 ~]# ls -lh /data/machine/centos7-1.qcow2
-rw-r--r-- 1 qemu qemu 2.0G Nov 18 13:34 /data/machine/centos7-1.qcow2
4、给磁盘加10G
[root@es-2 ~]# qemu-img info /data/machine/centos7-1.qcow2
image: /data/machine/centos7-1.qcow2
file format: qcow2
virtual size: 110G (118111600640 bytes)
disk size: 1.9G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
5、重启虚拟机查看
下面实验证明了调整磁盘一定要关机后操作,然后启动
[root@es-2 ~]# virsh reboot centos7-1
#没有生效
磁盘 /dev/vda:107.4 GB, 107374182400 字节,209715200 个扇区
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 100G 0 disk
├─vda1 252:1 0 512M 0 part /boot
└─vda2 252:2 0 72G 0 part
├─centos-root 253:0 0 20G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-data 253:2 0 50G 0 lvm /data
再次调整:

vrish reboot还是不行,先关机,再开机就好了

十六、调整虚拟机内存
当前虚拟机内存
[root@es-2 ~]# virsh dominfo centos7-1
Id: 9
Name: centos7-1
UUID: 39bd68f5-7779-425f-9f51-6d7f9d886521
OS Type: hvm
State: running
CPU(s): 1
CPU time: 23.6s
Max memory: 1048576 KiB
Used memory: 1048576 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
调整
[root@es-2 ~]# virsh shutdown centos7-1
[root@es-2 ~]# virsh setmaxmem centos7-1 2G #关机后设置最大内存
[root@es-2 ~]# virsh start centos7-1
[root@es-2 ~]# virsh setmem centos7-1 2G #开机后设置虚拟机内存
调整后
[root@es-2 ~]# virsh dominfo centos7-1
Id: 10
Name: centos7-1
UUID: 39bd68f5-7779-425f-9f51-6d7f9d886521
OS Type: hvm
State: running
CPU(s): 1
CPU time: 17.9s
Max memory: 2097152 KiB
Used memory: 2097152 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
#进入虚拟机查看
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 2.0G 87M 1.8G 8.5M 91M 1.7G
Swap: 2.0G 0B 2.0G
十七、使用xml文件创建虚拟机
先传一个模版虚拟机
[root@kibana ~]# scp /opt/centos7-init.qcow2 172.18.3.139:/data/machine/centos7-2.qcow2
编写配置文件(大佬给的,暂时不会改)
<domain type='kvm'>
<name>centos7-2</name>
<memory unit='GiB'>1</memory>
<currentMemory unit='GiB'>1</currentMemory>
<vcpu placement='static'>2</vcpu>
<sysinfo type='smbios'>
<system>
<entry name='manufacturer'>test</entry>
</system>
</sysinfo>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
<bootmenu enable='yes'/>
<smbios mode='sysinfo'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback'/>
<source file='/data/machine/centos7-2.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/data/iso/CentOS-7-x86_64-Minimal-1908.iso'/>
<target dev='hdb' bus='ide'/>
<readonly/>
</disk>
<controller type='virtio-serial' index='0'>
</controller>
<controller type='usb' index='0' model='piix3-uhci'>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<input type='tablet' bus='usb'>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
</graphics>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
</video>
<memballoon model='virtio'>
<stats period='10'/>
</memballoon>
</devices>
</domain>
使用配置文件定义虚拟机,然后开机
[root@es-2 ~]# virsh define centos7-2.xml
Domain centos7-2 defined from centos7-2.xml
[root@es-2 ~]# virsh list --all #定义之后就有了
Id Name State
----------------------------------------------------
10 centos7-1 running
- centos7-2 shut off
[root@es-2 ~]# virsh start centos7-2 #开机
Domain centos7-2 started
连接虚拟机试试
[root@es-2 ~]# ss -ltn | grep :59
LISTEN 0 1 *:5900 *:*
LISTEN 0 1 *:5901 *:*
有点小问题,没有IP

修改配置文件,加上mac地址(mac地址还不能随便填,网上生成的不能用,我就照着其他的mac改了几位)
<domain type='kvm'>
<name>centos7-2</name>
<memory unit='GiB'>1</memory>
<currentMemory unit='GiB'>1</currentMemory>
<vcpu placement='static'>2</vcpu>
<sysinfo type='smbios'>
<system>
<entry name='manufacturer'>test</entry>
</system>
</sysinfo>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
<bootmenu enable='yes'/>
<smbios mode='sysinfo'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback'/>
<source file='/data/machine/centos7-2.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/data/iso/CentOS-7-x86_64-Minimal-1908.iso'/>
<target dev='hdb' bus='ide'/>
<readonly/>
</disk>
<controller type='virtio-serial' index='0'>
</controller>
<controller type='usb' index='0' model='piix3-uhci'>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<interface type='bridge'>
<mac address='52:C7:CE:41:D5:EA'/>
<source bridge='br0'/>
<target dev='vnet0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<input type='tablet' bus='usb'>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
</graphics>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
</video>
<memballoon model='virtio'>
<stats period='10'/>
</memballoon>
</devices>
</domain>
