kvm学习笔记(二)- KVM基础学习
kvm简绍
KVM 全称是 基于内核的虚拟机(Kernel-basedVirtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor:
- 它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。
- 它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。
- 它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。
- 它需要支持虚拟化扩展的 CPU。
- 它是完全开源的。
(1)KVM特性
嵌入到Linux正式Kernel(提高兼容性),代码级资源调用(提高性能),虚拟机就是一个进程(内存易于管理)
(2)KVM虚拟化架构
(3)KVM CPU性能优化
- 一个 KVM 虚机即一个 Linux qemu-kvm 进程,与其他Linux 进程一样被Linux 进程调度器调度。
- KVM 虚机包括虚拟内存、虚拟CPU和虚机 I/O设备,其中,内存和 CPU 的虚拟化由 KVM 内核模块负责实现,I/O 设备的虚拟化由 QEMU 负责实现。
- KVM户机系统的内存是 qumu-kvm 进程的地址空间的一部分。
-
KVM 虚机的 vCPU 作为 线程运行在 qemu-kvm 进程的上下文中。
CPU虚拟化
KVM安装
检查主机是否支持虚拟化
打开您的虚拟机的虚拟化引擎
# egrep -c '(vmx|svm)' /proc/cpuinfo
命令结果大于0表示cpu支持虚拟化
最好关闭防火墙和关闭selinux
# systemctl stop firewalld # systemctl disable firewalld # vim /etc/selinux/config 将enforcing改为disabled
配置本地yum源
替换CentOS默认源,默认生产环境上不了外网,所以你得想办法用自己的内部Yum源,如果没有,需要搭建一个。让系统上网,然后运行下面命令:
# cd /etc/yum.repos.d # rm -rf * # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
在我的实验环境中我已经搭好了本地yum源,在这里我直接使用本地yum源,下面是我的yum配置文件
安装kvm以及相应的依赖包
安装依赖包
# yum -y groupinstall "Virtualization Host" # yum -y install virt-{install,viewer,manager}
相关组件介绍
【1】libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。
【2】Virsh:基于 libvirt 的 命令行工具 (CLI)
【3】Virt-Manager:基于 libvirt 的 GUI 工具
kvm内核模块
配置网卡为桥接模式
# cd /etc/sysconfig/network-scripts/ # cp ifcfg-eno16777736 ifcfg-br0
我的配置文件
[root@kvm network-scripts]# cat ifcfg-eno16777736 TYPE="Ethernet" DEVICE="eno16777736" NAME="eno16777736" BRIDGE=br0 [root@kvm network-scripts]# cat ifcfg-br0 TYPE=Bridge NAME=br0 DEVICE=br0 IPADDR=172.31.129.95 NETMASK=255.255.255.0 GATEWAY=172.31.129.254
创建虚拟机硬盘
# qemu-img create -f qcow2 /mnt/vm-test/iso/centos-7.2.qcow2 10G # chown qemu:qemu /mnt/vm-test/iso/centos-7.2.qcow2 -R
创建虚拟机
[root@kvm iso]# virt-install --virt-type kvm --name centos-7.2 --ram 512 \ # name 是自己取得 > --vcpus 1 \ #指定cpu核数 > --cdrom=CentOS-7-x86_64-DVD-1511.iso \ #指定镜像 > --disk centos-7.2.qcow2,format=qcow2 \ #disk参数为上面创建的磁盘 > --network network=default \ #网络设置为默认网络(NAT) > --graphics vnc,listen=0.0.0.0 --noautoconsole \ #运行所有网段远程,远程方式采用vnc > --os-type=linux --os-variant=rhel7 #指定系统类型
桥接网卡位置
virt-install --virt-type kvm --name centos-7.2 --ram 512 --vcpus 1 --cdrom=CentOS-7-x86_64-DVD-1511.iso --disk centos7.2.qcow2,format=qcow2 --network bridge=virbr0 --vnc --vncport=5910 --vnclisten=0.0.0.0 --os-type=linux --os-variant=rhel7
远程虚拟机
查看端口:netstat –natp
在vnc输入172.31.129.95:5900即可远程虚拟机
KVM命令介绍
virsh
virsh:虚拟化交互式终端
- virsh list # 显示本地活动虚拟机
- virsh start kvm_name # 启动非活动虚拟机, kvm_name为你的虚拟机名字
- virsh create kvm_name.xml # 创建虚拟机(创建后,虚拟机立即执行,成为活动主机)
- virsh suspend kvm_name # 暂停虚拟机
- virsh resume kvm_name # 启动暂停的虚拟机
- virsh shutdown kvm_name # 正常关闭虚拟机
- virsh destroy kvm_name # 强制关闭虚拟机
- virsh dominfo kvm_name # 显示虚拟机的基本信息
- virsh dumpxml kvm_name # 显示虚拟机的当前配置文件
- virsh setmem kvm_name 51200 # 给不活动虚拟机设置内存大小
- virsh setvcpus kvm_name 4 # 给不活动虚拟机设置cpu个数
-
virsh edit kvm_name # 编辑配置文件(一般用在刚定义完VM)
虚拟机配置文件路径:/etc/libvirt/qemu
虚拟化vcpu操作
# yum -y install numactl
- nodeinfo #查看节点配置信息
- dominfo #查看虚拟机节点配置信息
- numactl --hardware #查看节点硬件信息
- numastat –c qemu-kvm
- virsh
- vcpuinfo kvm_name #查看运行在那个逻辑cpu上
- emulatorpin kvm_name #查看可以调度逻辑cpu
- emulatorpin kvm_name 1-2 –live #限制可以调度逻辑cpu(重启生效)
虚拟机cpu优化
vcpu单独强制绑定
- vcpupin kvm_name 0 1
- vcpupin kvm_name 1 2
- vcpuinfo
- dumpxml kvm_name
命令使用参考文章:
CPU性能监控之二-----Numa架构下进程与CPU绑定
安装acpid
默认情况下virsh工具不能对linux虚拟机进行关机操作,linux操作系统需要开启与启动acpid服务。在安装KVM linux虚拟机必须配置此服务。
# yum install -y acpid # systemctl enable acpid
克隆虚拟机
(1)根据模板文件修改
- 进入对应目录拷贝模板文件
# cd /etc/libvirt/qemu # cp centos-7.2.xml clone-1.xml
- 修改虚拟名称
- 删除uuid
- 指定disk
- 删除mac
- 修改vnc远程允许端口(可选)
如果您上面选择桥接模式创建虚拟机且指定了端口5910,请您把5910改为5911,这样可以避免与centos7.3的端口冲突
(2)复制qcow2文件
# cp centos-7.2.qcow2 clone-1.qcow2
(3)virsh define 模板文件路径
# virsh define /etc/libvirt/qemu/clone-1.xml
(4)启动虚拟机
# virsh start clone-1
(5)删除克隆的虚拟机
# virsh shutdown clone-1 # virsh undefine clone-1 # rm –rf /mnt/vm-test/clone-1.qcow2
(6)一个小坑
这一行位置在第86行,修改配置文件时一定要删除,不知道为什么,它会出现在CentOS7.2版本的系统中,而在CentOS7.3版本的系统中不会出现这一行代码!
虚拟机快照snapshot
virsh # snapshot-create-as centos-7.2 kuaizhao #创建虚拟机centos-7.2的快照,快照名字为kuaizhao Domain snapshot kuaizhao created virsh # snapshot-list centos-7.2 #显示虚拟机快照的名称 Name Creation Time State ------------------------------------------------------------ kuaizhao 2017-10-17 09:53:49 +0800 shutoff virsh # snapshot-revert centos-7.2 kuaizhao #恢复快照
添加磁盘
(1)创建磁盘
# qemu-img create -f qcow2 /mnt/vm-test/ios/testadd.qcow2 10G
(2)修改配置文件
# virsh edit centos-7.2
添加以下内容并保存配置文件
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/vm-test/ios/testadd.qcow2'/>
<target dev='vdb' bus='virtio'/>
</disk>
# virsh create /etc/libvirt/qemu/centos-7.2.xml # virsh destroy centos-7.2 # virsh start centos-7.2
重启后进入虚拟机查看
(3)直接扩展qcow2磁盘
qcow2格式的好处就是支持直接扩展,下面我们关闭虚拟机直接对磁盘进行扩容
# qemu-img resize clone-3.qcow2 +10G
经过前后对比,磁盘大小已由20G扩展到30G,已扩展,qcow2磁盘格式必须采用此方式进行扩展!
kvm虚拟机的网络模式
(1)nat网络模式
(2)桥接模式
(3)添加NAT网络
定义一个虚拟网络
# virsh net-define /usr/share/libvirt/networks/default.xml
添加内容
<network>
<name>default</name>
<bridge name="virbr0" />
<forward/>
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.2" end="192.168.122.254" />
</dhcp>
</ip>
</network>
设置为自动启动
# virsh net-autostart default
查看网络
# brctl show
修改/etc/sysctl.conf中参数,允许ip转发
# net.ipv4.ip_forward=1
修改虚拟机配置文件
# virsh edit centos-7.2
修改网卡链接模式
桥接模式
nat模式
修改完之后,保存退出。
# virsh create /etc/libvirt/qemu/centos-7.2.xml
-
修改桥接后nat不能上网问题
默认配置文件:(virsh交互界面)
将默认配置文件修改为:
# vim /etc/libvirt/qemu/networks/default.xml
然后再执行如下命令
virsh # net-define /etc/libvirt/qemu/networks/default.xml virsh # net-destroy default virsh # net-start default
作者:废权
链接:https://blog.yjscloud.com/archives/33
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。


共有 0 条评论