kvm
https://blog.csdn.net/chengyinwu/article/details/103281476 有待整理
kvm集群管理 ovirt 、 proxmox
一、简单介绍
KVM(Kernel-based Virtual Machine)是内核级虚拟化技术
1、kvm和qemu
kvm硬件虚拟化(CPU和内存) ,qemu软件虚拟化 。二者相辅相成,QEMU通过KVM达到了硬件虚拟化的速度,而KVM则通过QEMU来模拟设备。对于KVM来说,其匹配的用户空间工具并不仅仅只有QEMU,还有其他的,比如RedHat开发的libvirt、virsh、virt-manager等,QEMU并不是KVM的唯一选择
2、kvm和docker
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案,但它本质上是进程隔离(namespace)和资源限制(cgroups),严格来说不算是虚拟化技术。
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
二、KVM 安装配置
1、环境准备
关闭Selinux & 防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config 设置Yum源 curl -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 makecache 查看是否支持虚拟化 cat /proc/cpuinfo | grep -E 'vmx|svm' 查看KVM 驱动是否加载 lsmod | grep kvm 如果没有加载kvm驱动,利用命令加载驱动 modprobe -a kvm modprobe -a kvm_intel
2、安装kvm及相关组件
安装所需工具包qemu-kvm
librvirt
virt-manager
在安装之前我们最好更新一下软件包 yum update -y 安装qemu-kvm yum install -y qemu-kvm 安装libvirt yum install -y libvirt [root@abcdocker.com ~]# systemctl restart libvirtd [root@abcdocker.com ~]# systemctl enable libvirtd #libvirt 用来管理kvm 安装virt-manager工具 yum install -y virt-manager 解决字符集问题(CRT会出现) yum install dejavu-lgc-sans-fonts 或者一条通配符 # yum install *qemu* *virt* librbd1-devel -y
3、查看版本(编译安装的较新)
# /usr/libexec/qemu-kvm -version QEMU emulator version 2.12.0 (qemu-kvm-ev-2.12.0-33.1.el7) Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers # qemu-img --help | grep version qemu-img version 2.12.0 (qemu-kvm-ev-2.12.0-33.1.el7) '-V', '--version' output version information and exit conversion. If the number of bytes is 0, the source will not be scanned for
4、相关工具
libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP, Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等 Hypervisor。 Virsh:基于 libvirt 的 命令行工具 (CLI) Virt-Manager:基于 libvirt 的 GUI 工具 virt-v2v:虚机格式迁移工具 virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具), Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等 sVirt:安全工具
5、rocky8安装kvm
# dnf groupinstall 'Virtualization Host' # dnf -y install virt-install virt-manager virt-viewer virt-v2v
三、KVM 网络
1、KVM 客户机网络连接有两种方式:
(1)用户模式(NAT):这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外网访问虚拟机网络 (2)桥接模式(Bridge):这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的主机可以直接访问到虚拟机内部
2、配置桥接网络
IP地址 说明 备注 10.4.82.220 本机IP 10.4.82.200 网关地址 10.4.82.116 虚拟机IP
1.编辑宿主机网卡
[root@YZSJHL82-220 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 DEVICE=em1 ONBOOT=yes HWADDR=B4:99:BA:B1:24:57 TYPE=Ethernet BOOTPROTO=static BRIDGE=br0 ## 注释网络配置,添加BRIDGE=br0
2.添加bro虚拟网卡
# vim /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 BOOTPROTO=none ONBOOT=yes TYPE=Bridge IPADDR=10.4.82.220 NETMASK=255.255.255.0 GATEWAY=10.4.82.200 ##添加网络配置,TPYE设置为Bridge
3. 重启网卡
# systemctl restart network
如果重启网卡有报错,内容如下
Linux : Bridge support not available: brctl not found
请安装br网卡依赖包
yum install bridge-utils -y
4.查看IP地址
此时ens33物理网卡应该没有IP,IP应该都在br0网卡上
5、配置虚拟机ip
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 HWADDR=52:54:00:ED:7A:16 TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes PEERDNS=yes NAME=eth0 UUID=1c1d3828-0adb-4d1a-ada5-80eda0646952 ONBOOT=yes IPADDR=10.4.82.113 NETMASK=255.255.255.0 GATEWAY=10.4.82.200 #和宿主机的网关一样 DNS1=114.114.114.114
四、制作快照
命令行方式(磁盘格式为qcow2才支持快照) 虚拟机创建快照: # virsh snapshot-create-as vm8 vm8.snap1(vm8为虚拟机) # virsh snapshot-create centos7.0 (不如上面的方便) 已生成域快照 1583311966 # virsh snapshot-list centos7.0 查看当前快照 名称 生成时间 状态 ------------------------------------------------------------ centos7.sanp1 2020-03-03 16:13:43 +0800 shutoff centos7.snap2 2020-03-03 16:26:07 +0800 shutoff # qemu-img info /var/lib/libvirt/images/centos7.0.qcow2 (查看虚拟机信息) image: /var/lib/libvirt/images/centos7.0.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 11G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 centos7.sanp1 0 2020-03-03 16:13:44 00:00:00.000 2 centos7.snap2 0 2020-03-03 16:26:07 00:00:00.000 3 1583311966 364M 2020-03-04 16:52:46 00:39:42.734 Format specific information: compat: 1.1 lazy refcounts: true 关闭虚拟机,恢复到第一个快照 # virsh shutdown vm8 # virsh snapshot-revert vm8 vm8.snap1 # virsh snapshot-delete test01 1560191837 #删除快照
五、kvm常用指令和文件夹
# virt-manage 调用图形管理界面 查看kvm支持的os版本: # man virt-install # osinfo-query os | grep centos # virsh -h #查看命令帮助 # ls /etc/libvirt/qemu #查看KVM的配置文件存放目录 networks test01.xml (test01.xml是虚拟机系统实例的配置文件) # virsh list --all #查看虚拟机状态 Id 名称 状态 ---------------------------------------------------- 2 test01 running # virsh shutdown test01 #关闭虚拟机 # virsh start test01 #开启虚拟机 # virsh destroy test01 #强制关机 # virsh create /etc/libvirt/qemu/test01.xml #通过配置文件启动虚拟机 # virsh suspend test01 #挂起虚拟机 # virsh resume test01 #从挂起状态恢复运行虚拟机 # virsh autostart test01 #设置虚拟机伴随宿主机自动启动 #虚拟机的删除与添加: [root@localhost ~]# virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml #导出虚拟机配置 #删除虚拟机: [root@localhost ~]# virsh shutdown test01 [root@localhost ~]# virsh undefine test01 [root@localhost ~]# virsh list --all #查看虚拟机是否被删除 Id 名称 状态 ---------------------------------------------------- #通过备份的配置文件重新定义虚拟机: [root@localhost ~]# cd /etc/libvirt/qemu/ [root@localhost qemu]# mv test02.xml test01.xml [root@localhost qemu]# virsh define test01.xml #修改虚拟机配置(内存大小等)信息: # vim /etc/libvirt/qemu/test01.xml # virt-df -h test01 #在宿主机上查看虚拟机磁盘信息 克隆虚拟机: # virt-clone -o test01 -n test02 -f /kvm/store/test02.qcow2 #将test01克隆为test02 [root@localhost qemu]# virsh list --all #查看现有虚拟机 Id 名称 状态 ---------------------------------------------------- - test01 关闭 - test02 关闭 转化格式 qemu-img convert -c -O qcow2 test.raw test.qcow2 改变镜像文件大小(raw和qcow2都可以支持resize) qemu-img resize test.raw +1GB
六、 使用iso制作qcow2镜像
https://www.cnblogs.com/elvi/p/8001298.htm 制作windos镜像
首选创建虚拟磁盘
#qemu-img create -f qcow2 CentOS-6.3-x86_64.qcow2 10G
其次从iso启动镜像
#virt-install --name centos-7.4 --ram 1024 --cdrom=CentOS-7.4-x86_64-bin-DVD1.iso --disk CentOS-7.4-x86_64.qcow2,format=qcow2 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel6 --check all=off
报错
开始安装...... ERROR Cannot access storage file '/root/CentOS-7.4-x86_64.qcow2' (as uid:107, gid:107): 权限不够 域安装失败,您可以运行下列命令重启您的域: 'virsh start virsh --connect qemu:///system start centos-7.4'
解决:
sed -i 's/#vnc_listen = "0.0.0.0"/vnc_listen = "0.0.0.0"/g' /etc/libvirt/qemu.conf sed -i 's/#group = "root"/group = "root"/g' /etc/libvirt/qemu.conf sed -i 's/#user = "root"/user = "root"/g' /etc/libvirt/qemu.conf service libvirtd restart
#virt-install --name Windows2008_x64 --ram 2048 --cdrom=win2008_x64fre_server_eval_zh-cn-GRMSXEVAL_CN_DVD.iso --disk Windows2008_x64.qcow2,format=qcow2 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=windows --os-variant=win2k8 --check all=off
查看vnc端口
#virsh vncdisplay centos-6.3
使用vnc去连接安装系统
最后关闭系统后就可以使用QCOW2的镜像了
七、创建kvm虚拟机的三种方式
1 使用 virt-install 命令
virt-install \ --name=guest1-rhel5-64 \ --file=/var/lib/libvirt/images/guest1-rhel5-64.dsk \ --file-size=8 \ --nonsparse --graphics spice \ --vcpus=2 --ram=2048 \ --location=http://example1.com/installation_tree/RHEL5.6-Serverx86_64/os \ --network bridge=br0 \ --os-type=linux \ --os-variant=rhel5.4
2 使用 virt-manager 工具
不做介绍
3 使用 qemu-img 和 qemu-kvm 命令行方式安装
(1)创建一个空的qcow2格式的镜像文件
qemu-img create -f qcow2 windows-master.qcow2 10G
(2)启动一个虚机,将系统安装盘挂到 cdrom,安装操作系统
qemu-kvm -hda windows-master.qcow2 -m 512 -boot d -cdrom /home/user/isos/en_winxp_pro_with_sp2.iso
(3)现在你就拥有了一个带操作系统的镜像文件。你可以以它为模板创建新的镜像文件。使用模板的好处是,它会被设置为只读所以可以免于破坏。
qemu-img create -b windows-master.qcow2 -f qcow2 windows-clone.qcow2
(4)新的镜像文件上启动虚机了
https://www.sohu.com/a/312683006_120115703 问题解决方法
ln -s /usr/libexec/qemu-kvm /usr/sbin/ (可执行文件软连接)
qemu-kvm -hda windows-clone.qcow2 -m 400
1、使用dd创建虚拟机硬盘
dd if=/dev/zero of=centos.img bs=2k seek=4096k count=1
<domain type="kvm"> <name>centos</name> <!--虚拟机名称--> <memory unit="MiB">1024</memory> <!--最大内存,单位k--> <currentMemory unit="MiB">1024</currentMemory> <!--可用内存,单位k--> <vcpu>2</vcpu> <!--//虚拟cpu个数--> <os> <type arch="x86_64" machine="pc">hvm</type> <boot dev="hd" /> <!-- 硬盘启动 --> <boot dev="cdrom" /> <!--//光盘启动--> </os> <features> <acpi /> <apic /> <pae /> </features> <clock offset="localtime" /> <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" /> <source file="/var/lib/libvirt/images/test.qcow2" /> <!--目的镜像路径--> <target dev="hda" bus="ide" /> </disk> <disk type="file" device="cdrom"> <source file="/var/lib/libvirt/images/ubuntu.iso" /> <!--光盘镜像路径 --> <target dev="hdb" bus="ide" /> </disk> <interface type="bridge"> <!--虚拟机网络连接方式--> <source bridge="br0" /> <!--当前主机网桥的名称--> </interface> <input type="mouse" bus="ps2" /> <!--vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询--> <graphics type="vnc" port="-1" autoport="yes" listen="0.0.0.0" keymap="en-us" /> </devices> </domain>
3、创建虚拟机
virsh define centos.xml
###将配置导入到虚拟机
virsh start centos
#### 启动虚拟机