介绍
kvm–全称是基于内核的虚拟机(kernel-based Virtual Machine),基于内核的虚拟化技术,实际就是嵌入一个虚拟化模块,通过优化内核来使用虚拟技术。
libvirt 是管理虚拟机和其他虚拟化功能的软件,比如存储管理、网络管理等。由一个守护程序libvirtd和一个命令行工具virsh.
kvm虚拟机由kvm\qemu\libvirtd组成
virsh\virt-manager\virt-viewer\virt-install是libvirt用户态的工具
rpm -qa | egrep '(libvirt|virt-install|qemu-kvm)' 查看是否安装
/usr/libexec/qemu-kvm --version 查看qemu版本
systemctl start|status|enable|restart libvirtd libvirtd服务相关命令
Command
dmesg |grep kvm
## 查看内核加载
lsmod | grep kvm
## 查看KVM模块是否被正确加载
grep -E '(vmx|svm)' /proc/cpuinfo
## 查看是否有回显信息,发现是有的,说明是支持虚拟化
- 常用command:
virsh dumpxml vm_name | grep mac 查看mac
arp -ne | grep 52:54:00:5a:a9:9b 查看对应mac的IP地址
virsh list --all 查看所有虚机
virsh start vmhost 开启vmhost虚机
virsh shutdown vmhost 关闭虚机,正常关机,会挨个关掉虚机中已开启的服务
virsh destroy vmhost 来强制关闭虚拟机,拔电源关机
virsh dominfo VM-Name 查看宿主机信息
virsh list 查看running中运行的
virsh reboot vm-1 重启虚拟机
virsh undefine centos74 删除虚机
[root@localhost ~]# virsh undefine centos7.0 ##centos7.0 已经被取消定义
#结果: centos7.0 的配置文件已经没有了
virsh help domblklist //列出指定虚拟机磁盘信息
[root@node1 ~]#virsh domblklist Vm_Name
virsh help domiflist //列出指定虚拟机上的所有网卡
[root@node1 ~]# virsh domiflist Vm_Name
virsh help domifaddr ###获取指定虚拟机上的ip地址
[root@node1 ~]# virsh domifaddr Vm_Name
virsh help domifstat ##统计指定虚拟机上的指定网卡状态
virsh domifstat centos7 vnet1 ###查看指定虚拟机指定网卡状态
virsh dominfo centos7 ##获取指定虚拟机的简要信息
virsh help dommemstat ##获取指定虚拟机内存相关状态信息
[root@node1 ~]# virsh dommemstat Vm_Name
virsh help domstate ##获取指定虚拟机的状态信息
[root@node1 ~]# virsh domstate Vm_Name
[root@node1 ~]#virsh domblklist centos7 //列出指定虚机磁盘信息
[root@node1 ~]#virsh domblkinfo centos7 vda //指定虚机指定磁盘的大小
root@node1 ~]#virsh domblkinfo centos7 vda --human //人性化显示
virsh vcpucount centos ##vcpucount 查看虚拟机 vcpu 的配置数量
virsh vcpuinfo cirros ##vcpuinfo 查看 vcpu 详细信息; vcpu1 绑定到物理 cpu3 上
VCPU: 1
CPU: 3
State: running
CPU time: 1.0s
CPU Affinity: yyyy
[root@localhost ~]# ls /etc/libvirt/qemu/
autostart centos7.1 networks
#现在没有运行的虚拟机
#恢复删除了虚拟机:
[root@kvm images]# virsh define nebula1.xml
查看 KVM 的配置文件存放目录
kvm的配置文件:/etc/libvirt/qemu/
[root@localhost ~]# ll /etc/libvirt/qemu/
#用 ps -ef |grep qemu可以看到正在运行的虚拟机的磁盘内容等。
kvm虚拟机只要磁盘文件和xml配置文件就可以创一台新的虚机。只要有磁盘文件+配置文件,虚拟机就可以迁移到任何电脑上, 将配置文件导入, 就可以迁移到其他主机上了。
[root@kvm images]# virsh define nebula1.xml
##基于配置文件,创建虚拟机
[root@centos74-0911 ~]# virsh dumpxml centos74 >centos74back.xml
##备份
#将这个配置文件写入到一个文件里,就可以看到内存,cpu,磁盘等情况。
[root@kvm images]# virsh dumpxml centos74 >>centos74111.xml
virsh define centos74back.xml 导入配置
修改配置文件:virsh edit centos74
[root@kvm ~]#virsh vncdisplay centos74
## 查看vnc端口
[root@kvm ~]#virsh console centos68
## console登录
[root@kvm ~]# virsh domifaddr cic-2_vm
Name MAC address Protocol Address
[root@localhost ~]# virsh autostart centos7.0
# centos7.0标记为宿主机开机,虚机自动开机
[root@kvm autostart]# virsh autostart --disable centos7.0
##取消自动开机
Domain centos7.0unmarked as autostarted
[root@kvm ~]# cd /etc/libvirt/qemu/autostart
[root@kvm autostart]# ls ###这个目录下没内容了,实质上就是删除了软链接
[root@kvm autostart]#
##虚拟机处于paused暂停状态,一般情况下是被admin运行了virsh suspend才会处于这种状态, 但是仍然消耗资源,只不过不被超级管理程序调度而已。
[root@localhost ~]# virsh suspend centos7.0
## centos7.0 被挂起
[root@localhost ~]# virsh resume centos7.0
##恢复被suspend的虚机
##虚拟机关闭后才能重命名
[root@localhost ~]# virsh shutdown centos7.0
[root@kvm images]# virsh domrename centos7.0 web-blog
CPU pinging
CPU Pinning(CPU 钉选)在KVM中运行的所有虚拟机在主机操作系统中作为用户空间的任务运行,通过钉选操作,可以将某一vCPU(虚拟CPU)与物理CPU进行绑定,可以看成是线程绑定到某一物理CPU中。
CPU Pinning是一种将虚拟机实例与物理CPU核心之间进行绑定的技术。
virsh vcpuinfo+虚拟机ID #虚拟机CPU使用情况
virsh capabilities命令查看物理机CPU的详细信息,包括CPU个数等
virsh vcpupin 3 0 6-8 #Id为3的虚拟机的vCPU0钉选到物理CPU编号为6-8
virsh vcpupin 3 1 30-32 #vCPU1钉选到物理CPU为30-32上面
/etc/libvirt/qemu/centos74.xml
<vcpu vcpuset='4,28' >2</vcpu><!--这里原来的内容有placement='static' 我们把它去掉,添加上vcpuset='4,28'表示将该虚拟机的vcpu钉选到物理CPU为4和28的上面-->
<cputune>
<vcpupin vcpu='0' cpuset='4'/><!--将vCPU 0钉选到物理CPU 4上面-->
<vcpupin vcpu='1' cpuset='28'/><!--将vCPU 1钉选到物理CPU 28上面-->
</cputune>
<numatune><!--这里的配置是实现内存的钉选,表示将虚拟机使用的内存钉选到node0上面-->
<memory mode='strict' nodeset='0'/>
</numatune>
virsh freecell --all ##使用virsh freecell命令查看可以当前空闲内存
virsh emulatorpin 21 ##使用emulatorpin可以查看虚拟机可以使用那些物理逻辑CPU
virsh emulatorpin 21 26-31 --live ##强制让虚拟机只能在26-31这些cpu之间调度