kvm 订阅
KVM,是Keyboard Video Mouse的缩写,KVM 通过直接连接键盘、视频和鼠标 (KVM) 端口,能够访问和控制计算机。KVM 技术无需目标服务器修改软件。这就意味着可以在BIOS环境下,随时访问目标计算机。KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备。KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统。可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备。KVM over IP 解决方案具备完善的多地点故障转移功能、符合新服务器管理标准 (IPMI) 的直接界面,以及将本地存储媒体映射至远程位置的功能。 展开全文
KVM,是Keyboard Video Mouse的缩写,KVM 通过直接连接键盘、视频和鼠标 (KVM) 端口,能够访问和控制计算机。KVM 技术无需目标服务器修改软件。这就意味着可以在BIOS环境下,随时访问目标计算机。KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备。KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统。可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备。KVM over IP 解决方案具备完善的多地点故障转移功能、符合新服务器管理标准 (IPMI) 的直接界面,以及将本地存储媒体映射至远程位置的功能。
信息
简    写
KVM
优    点
支持多平台服务器和串行设备
外文名
Keyboard Video Mouse
地    位
网络中的管理设备
中文名
键盘、视频和鼠标
功    能
支持串口overIP远程调试串口设备
学    科
计算机
KVM简介
KVM代表着键盘(Keyboard)、显示器(Video)和鼠标(Mouse),即利用一组键盘、显示器和鼠标实现对多台设备的控制,在远程调度监控方面发挥着重要作用。KVM技术可以向远程终端发送调度信息网中的各项数据资料,为下一级调度机构提供方便,这样即便下级调度机构没有建立调度数据网,也能够实现信息的共享。多计算机切换器(KVM)以多主机切换技术为依据,借助一组键盘、鼠标和显示器完成多台服务器之间的切换,进而节省空间,降低成本,使得管理更为简易方便,以提升工作效率。该技术具有很多优点,应用十分广泛。首先,在整个机房管理中,改变了传统的一对一的控制方式,而采用了一对多的管理方式,有利于节省空间、提高工作效率;其次,主机系统的安全性能得到了很大提升,而且具备了长距离的传输能力,在与远程用户相连接时,安全性能得到良好的保证;在服务器较多的情况下,通过数字交换机与其他服务器相连,并能与远程相连,可同时对本地和远程进行控制。在一些大型系统的解决方案中,可使用具有模拟交换机矩阵功能的大型模块系统,能够满足终端用户同时对上百台甚至更多服务器的访问,进而实现从中心点通过KVM系统对各地的服务器进行有效控制。此外,该技术也可以在家庭中用,为普通用户提供了很多方便。 [1] 
收起全文
精华内容
下载资源
问答
  • KVM

    万次阅读 多人点赞 2019-05-21 20:22:30
    kvm虚拟化管理软件的安装安装一台kvm虚拟机kvm虚拟机的virsh日常管理和配置kvm虚拟机开机启动和console 控制台 登录kvm虚拟机虚拟磁盘格式转换和快照管理kvm虚拟机克隆 宿主机:内存4G+ 纯净的系统CentOS-7 什么是...


    宿主机:内存4G+ 纯净的系统CentOS-7

    什么是虚拟化?

    虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。

    为什么要用虚拟化?

    阿里云 kvm开源
    azure
    vmware ESXI商业软件
    没有虚拟化之前:
    计算机的硬件配置越来越高
    512G 内存,4路 8核16线程 ,12* PCI-E 1T的SSD;
    ntp服务,安装多个mysql,安装多个tomcat,安装…
    linux开源的,很多软件都有依赖包openssl nginx
    充分利用资源,软件运行环境的隔离,只有虚拟化才行实现。
    场景1:同一台物理机运行多个php版本 php5.3(openssl,gd) php5.5 php7.2
    场景2:机房的迁移,解决了硬件和系统的依赖
    场景3:openstack环境,软件发布方式
    场景4:开发环境和测试环境,使用虚拟化
    只靠一台物理服务器,30台虚拟机
    产品 – 开发 – 运维 – 测试
    so结尾,linux 库文件
    场景5:业务的快速部署
    从头安装系统,安装服务,配置
    克隆虚拟机,改ip,
    虚拟化:提高了资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖

    kvm虚拟化管理软件的安装

    yum install libvirt virt-install qemu-kvm -y
    
    KVM:         Kernel-based Virtual Machine  
    libvirt       作用: 虚拟机的管理软件
    libvirt:      kvm,xen,qemu,lxc....
    virt          virt-install virt-clone   作用:虚拟机的安装工具和克隆工具
    qemu-kvm      qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘
    

    虚拟化软件:

    qemu           软件纯模拟全虚拟化软件,特别慢!AIX,兼容性好!
    xen(半)        性能特别好,需要使用专门修改之后的内核,兼容性差!  redhat 5.5  xen
    KVM(linux)   全虚拟机,它有硬件支持cpu,基于内核,而且不需要使用专门的内核   centos6 kvm 性能较好,兼容较好
    

    安装一台kvm虚拟机

    需要用到 TightVNC或者VNC Viewer 4.exe
    宿主机
    vnc:远程的桌面管理工具
    向日葵

    systemctl start libvirtd.service
    systemctl status libvirtd.service
    

    10.0.0.11 宿主机
    建议虚拟机内存不要低于1024M,否则安装系统特别慢!

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    

    vnc-service:5900
    vnc:10.0.0.11:5900

    –virt-type kvm 虚拟化的类型(qemu)
    –os-type=linux 系统类型
    –os-variant rhel7 系统版本
    –name centos7 虚拟机的名字
    –memory 1024 虚拟机的内存
    –vcpus 1 虚拟cpu的核数
    –disk /opt/centos2.raw,format=raw,size=10
    –cdrom /opt/CentOS-7-x86_64-DVD-1708.iso
    –network network=default 使用默认NAT的网络
    –graphics vnc,listen=0.0.0.0
    –noautoconsole
    raw:10G 不支持做快照,性能好
    qcow2: 支持快照

    kvm虚拟机的virsh日常管理和配置

    列表               list(--all)
    开机               start
    关机               shutdown
    拔电源关机          destroy
    导出配置            dumpxml  例子:virsh dumpxml centos7 >centos7-off.xml
    删除               undefine  推荐:先destroy,在undefine
    导入配置            define   
    修改配置            edit(自带语法检查)
    重命名             domrename (低版本不支持)
    挂起               suspend
    恢复               resume
    查询vnc端口号       vncdisplay
    

    kvm虚拟机开机启动和console 控制台 登录

    kvm运行业务程序
    开机启动autostart,前提:systemctl enable libvirtd;
    取消开机启动 autostart --disable

    centos7的kvm虚拟机:

    grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
    reboot
    

    kvm虚拟机虚拟磁盘格式转换和快照管理

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/oldboy.qcow2,format=qcow2,size=10 --cdrom /data/CentOS-7.2-x86_64-DVD-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    

    raw: 裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输 总50G 占用2G
    qcow2: cow (copy on write)占用空间小,支持快照,性能比raw差一点,方便传输 总50G 占用2G

    qcow
    qemu-img info  test.qcow2
    创建一块qcow2格式的虚拟硬盘:qemu-img create -f qcow2 test.qcow2 2G
    
    raw转qcow2:qemu-img convert -f raw     -O qcow2           oldboy.raw   oldboy.qcow2
                         convert [-f fmt]   [-O output_fmt]    filename     output_filename
                         
    
    virsh edit web01:					 
    <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/opt/centos.qcow2'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
    
    virsh destroy web01
    virsh start web01					
    
    创建快照      virsh snapshot-create centos7
    查看快照      virsh snapshot-list centos7
    还原快照      virsh snapshot-revert centos7 --snapshotname 1516574134
    删除快照      virsh snapshot-delete centos7 --snapshotname 1516636570
    raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中
    

    kvm虚拟机克隆

    完整克隆

    virt-clone --auto-clone -o web01 -n web02 (完整克隆)  
    

    a:生成虚拟机磁盘文件

    qemu-img create -f qcow2 -b 49-web03.qcow2 49-web04.qcow2
    

    b:生成虚拟机的配置文件

      <name>49-web03</name>
      <uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>
      <source file='/opt/49-web03.qcow2'/>
      <mac address='52:54:00:4e:5b:89'/>
      
    

    c:导入虚拟机并进行启动测试

    kvm链接克隆

    a.基于源磁盘文件,创建链接磁盘文件

    qemu-img create -f qcow2 -b 49-web03.qcow2 49-web04.qcow2
    

    后置备
    b:生成虚拟机的配置文件
    c:导入虚拟机并进行启动测试

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    

    kvm虚拟机的桥接网络

    默认的虚拟机网络是NAT模式,网段192.168.122.0/24

    默认NAT模式

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    

    桥接模式

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    

    1:创建桥接网卡

    virsh iface-bridge eth0 br0
    

    取消桥接网卡

    virsh iface-unbridge br0
    

    2:修改xml

    virsh edit centos7
        <interface type='bridge'>
          <mac address='52:54:00:55:aa:fa'/>
          <source bridge='br0'/>
    

    在宿主机上,重启虚拟机生效
    3:测试虚拟机网络

    热添加技术

    kvm虚拟机在线热添加硬盘

    1.创建一块硬盘

    qemu-img create -f qcow2 add01.qcow2 5G
    

    2.添加硬盘

    
    临时
    virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb  --subdriver=qcow2
    永久
    virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb  --subdriver=qcow2  --config
    

    删除硬盘
    virsh detach-disk centos7 vdb

    虚拟机磁盘扩容:

    在kvm虚拟机,卸载

    virsh detach-disk centos7 vdb
    qemu-img resize /data/centos7-add01.qcow2 +5G
    virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2
    

    在虚拟机中:

    xfs_growfs /dev/vdb
    

    根分区扩容:
    1)在宿主机上关闭虚拟机并调整虚拟机磁盘大小

    qemu-img resize oldboy.qcow2 +10G
    
    

    2)虚拟机中fdisk重新分区

    fdisk /dev/vda
    

    3)重启之后,执行

    xfs_growfs /dev/vda1,
    

    如果虚拟机磁盘文件系统是

    ext4:resize2fs /dev/vda1
    

    kvm虚拟机在线热添加网卡

    virsh attach-interface web04 --type bridge --source br0 --model virtio 
    detach-interface web04 --type bridge --mac 52:54:00:35:d3:71
    

    kvm虚拟机在线热添加内存

    创建的时候使用此参数 --memory 512,maxmemory=2048

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048   --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    

    临时热添加内存

    setmem web04 1024M --live
    永久增大内存
    setmem web04 1024M --config
    

    kvm虚拟机在线热添加cpu

    创建的时候使用此参数 --vcpus 1,maxvcpus=10

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048  --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    热添加cpu核数
    setvcpus web04 4 --live
    永久添加cpu核数
    setvcpus web04 4 --config
    
    

    virt-manager和kvm虚拟机热迁移(共享的网络文件系统)

    冷迁移kvm虚拟机:配置文件,磁盘文件
    热迁移kvm虚拟机:配置文件,nfs共享

    热迁移

    操作步骤:
    一:在kvm01和kvm02上安装kvm和nfs,配置桥接网卡

    yum install libvirt* virt-* qemu-kvm* nfs-utils openssh-askpass -y
    systemctl start libvirtd.service
    virsh iface-bridge eth0 br0
    

    二:在nfs01上安装配置nfs

    yum install nfs-utils -y
    mkdir /data
    vim /etc/exports
    /data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
    systemctl restart rpcbind
    systemctl restart nfs
    

    三:kvm01和kvm02挂载共享目录/opt

    mount -t nfs 10.0.0.31:/data /opt
     
    

    四:安装一台基于桥接模式的虚拟机

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    

    热迁移的命令:

    virsh migrate --live --verbose oldboy qemu+ssh://10.0.0.12/system --unsafe
    

    将宿主机10.0.0.11上的kvm虚拟机oldboy迁移到10.0.0.12

    图新化界面热迁移

    1):

    yum groupinstall “GNOME Desktop” -y
    yum install openssh-askpass -y

    yum install tigervnc-server -y

    vncpasswd
    vncserver :1
    vncserver -kill :1

    2):kvm虚拟机热迁移
    1:两边的环境(桥接网卡)
    2:实现共享存储(nfs)
    3:虚拟机桥接网络
    4:在线热迁移

    virt-v2v -i ova centos-dev-test01-v2v.ova -o local -os /opt/test -of qcow2

    openstack

    kvm宿主机 2000台
    查看每一个宿主机有多少台虚拟机?
    查看每一个宿主机还剩多少资源?
    查看每一台宿主机,每一个虚拟机的ip地址?
    kvm管理平台,数据库工具
    信息:宿主机,总配置,剩余的总配置
    虚拟机的信息,配置信息,ip地址,操作系统

    带计费功能的kvm管理平台,openstack ceilometer计费
    自动化管理kvm宿主机,云主机定制化操作

    部署openstack
    克隆一台openstack模板机:4G内存,开启虚拟化,挂载centos7.4的光盘
    上传脚本openstack-mitaka-autoinstall.sh到/root目录
    上传镜像:cirros-0.3.4-x86_64-disk.img到/root目录
    上传配置文件:local_settings到/root目录
    上传openstack_rpm.tar.gz到/opt下,并解压
    sh /root/openstack-mitaka-autoinstall.sh
    大概10-30分钟左右
    访问http://10.0.0.11/dashboard
    域:default
    用户名:admin
    密码:ADMIN_PASS

    注意: 在windows系统上修改hosts解析(10.0.0.11 controller)

    添加node节点:
    修改ip地址
    hostnamectl set-hostname compute1
    重新登录让新主机名生效
    cd /opt/
    rsync -avz 10.0.0.11:/opt/repo .
    上传脚本 openstack_node_autoinstall.sh
    sh openstack_node_autoinstall.sh <node节点ip>

    openstack controller主控制节点,node节点, kvm宿主机
    node节点, kvm宿主机
    node节点, kvm宿主机
    node节点, kvm宿主机
    node节点, kvm宿主机

    展开全文
  • kvm

    千次阅读 2015-11-26 17:10:30
    kvm、libvirt、virsh、virt-manager、qemu、qemu-kvm、qemu-img、virt-install等等之间的关系 全虚拟化和半虚拟化。目前全虚拟化的产品有KVM、VMwerae、Qemu等 KVM:(Kernel-based Virtual Machine)基于内核的...

    kvm、libvirt、virsh、virt-manager、qemu、qemu-kvm、qemu-img、virt-install等等之间的关系

    全虚拟化和半虚拟化。目前全虚拟化的产品有KVM、VMwerae、Qemu等


    KVM:(Kernel-based Virtual Machine)基于内核的虚拟机
    KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。
    从存在形式看, KVM是两个内核模块kvm.ko和kvm_intel.ko(对AMD处理器来说,就是kvm_amd.ko),这两个模块用来实现CPU的虚拟化。 如果要让用户在KVM上完成一个虚拟机相关的操作,显然需要用户空间的东西,同时还包括IO虚拟化,所以KVM的解决方案借鉴了QEMU的东西并做了一定的修改,形成了自己的KVM虚拟机工具集和IO虚拟化的支持,也就是所谓的qemu-kvm. (KVM is a fork of QEMU, namely qemu-kvm);

    libvirt:libvirt是一个中间层专门用于管理虚拟化的函数库,将底层不同的虚拟化驱动如qemu+kvm, XEN等都用统一的接口封装。这样对用户而言,只需要知道libvirt的接口就能使用虚拟机,而不用关心底层的各种驱动的细节。virsh和virt-manager还有kimchi等软件都是调用libvirt来实现虚拟机的管理。用户通常是直接使用上面这三个软件的。

    virsh和virt-manager:都是利用virsh库开发出来实现虚拟化管理的。

    virsh:是管理虚拟机的

    virt-install:是安装虚拟机的.其是qemu-kvm工具的人性化实现

    qemu-img:是创建虚拟机的镜像文件的

    qemu-kvm:也可以安装虚拟机但是没有virt-install这个友好。

    qemu:是一个完整的可以单独运行的软件,它可以用来模拟机器,非常灵活和可移植。它主要通过一个特殊的'重编译器'将为特定处理器编写二进制代码转换为另一种。(也就是,在PPCmac上面运行MIPS代码,或者在X86 PC上运行ARM代码)

    qemu-kvm:现在所说的虚拟化,一般都是指在CPU硬件支持基础之上的虚拟化技术。KVM也同hyper-V、Xen一样依赖此项技术。没有CPU硬件虚拟化的支持,KVM是无法工作的。
    准 确来说,KVM是Linux的一个模块。可以用modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情:还必须有一个用户空间的工具才行。这个用户空间的工具,开发者选择了已经成型的开源虚拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出 可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两 大部分三个文件,分别是KVM模块、QEMU工具以及二者的合集。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系;

    KVM:(Kernel-based Virtual Machine)基于内核的虚拟机

    KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。

    从存在形式看, KVM是两个内核模块kvm.ko和kvm_intel.ko(对AMD处理器来说,就是kvm_amd.ko),这两个模块用来实现CPU的虚拟化。 如果要让用户在KVM上完成一个虚拟机相关的操作,显然需要用户空间的东西,同时还包括IO虚拟化,所以KVM的解决方案借鉴了QEMU的东西并做了一定的修改,形成了自己的KVM虚拟机工具集和IO虚拟化的支持,也就是所谓的qemu-kvm. (KVM is a fork of QEMU, namely qemu-kvm)

    Xen

    Xen是第一类运行再裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化,Xen支持hypervisor和虚拟机互相通讯,而且提供在所有Linux版本上的免费产品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行(如Windows),能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。 QEMU is used by Xen.

    QEMU

    QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性,qemu可以虚拟出不同架构的虚拟机,如在x86平台上可以虚拟出power机器kqemu为qemu的加速器经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。

    QEMU本身可以不依赖于KVM,但是如果有 KVM的存在并且硬件(处理器)支持比如Intel VT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。


    KVM和QEMU的关系

    准确来说,KVM是Linux kernel的一个模块。可以用命令modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系。

    QEMU是个独立的虚拟化解决方案,从这个角度它并不依赖KVM。 而KVM是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT, AMD SVM)虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了QEMU的代码并加以精简,连同KVM一起构成了另一个独立的虚拟化解决方案,不妨称之为:KVM+QEMU. 

    KVM用户空间虚拟机管理工具有kvm, kvm-img, kvm-nbd ,kvm-ok 和kvm_stat,实际上kvm就是一个指向qemu-system-x86_64的符号链接,kvm-img则是指向qemu-img的符号链接。从适用的范围来讲, QEMU虚拟化方案除了支持x86架构外,还支持其他很多架构,比如qemu-system-m68k,qemu-system-mips64, qemu-system-ppc64, qemu-system-arm等等。但是目前提到KVM,一般指x86上基于Intel VT和AMD SVM的解决方案,虽然目前将KVM移植到ARM, PPC的工作正在进行中。

    当然由于redhat已经开始支持KVM,它认为KVM+QEMU'的方案中用户空间虚拟机管理工具不太好使,或者通用性不强,所以redhat想了一个libvirt出来,一个用来管理虚拟机的API库,不只针对KVM,也可以管理Xen等方案下的虚拟机。

    kvm-qemu可执行程序像普通Qemu一样:分配RAM,加载代码,不同于重新编译或者调用callingKQemu,它创建了一个线程(这个很重要);这个线程调用KVM内核模块去切换到用户模式,并且去执行VM代码。当遇到一个特权指令,它从新切换会KVM内核模块,该内核模块在需要的时候,像Qemu线程发信号去处理大部分的硬件仿真。
    这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个posix线程,这允许你使用通常Linux工具管理。如果你需要一个有2或者4核的虚拟机,kvm-qemu创建2或者4个线程,每个线程调用KVM内核模块并开始执行。并发性(若果你有足够多的真实核)或者调度(如果你不管)是被通用的Linux调度器,这个使得KVM代码量十分的小。
    qemu-img: qemu-img 命​令​行​工​具​是​ Xen 和​ KVM 用​来​格​式​化​各​种​文​件​系​统​的​,可​使​用​ qemu-img 格​式​化​虚​拟​客​户​端​映​像​、​附​加​存​储​设​备​以​及​网​络​存​储​,​qemu-img 选​项​及​用​法​如​下​http://blog.csdn.net/bravezhe/article/details/8461386

    virt-install:virt-install是rpm包python-virtinst里的一个工具 -- 其实就是一个python写的脚本 。其是qemu-kvm工具的人性化实现。可以利用该工具在终端下创建KVM guest主机。

    [root@kvmtest ~]# rpm -qf /usr/bin/virt-install
    python-virtinst-0.600.0-15.el6.noarch

    一、virt-install vs qemu-kvm创建guest主机

    1、virt-install创建guest主机

    $ virt-install --connect qemu:///system
       --name kvmnode1
       --ram 512
       --file /nfs/vms/kvmnode1.disk1
       --file /nfs/vms/kvmnode1.disk2
       --network=bridge:br0
       --accelerate
         -s 18
       --pxe
         -d
       --noautoconsole
       --mac=54:52:00:53:20:15
       --nographics
       --nonsparse

    2、qemu-kvm 创建guest主机

    $ /usr/bin/qemu-kvm -M pc
       -m 1024
       -smp 1
       -name kvmnode1
       -monitor stdio
       -boot n
       -drive file=/nfs/vms/kvmnode1,if=ide,index=0
       -net nic,macaddr=54:52:00:53:20:00,vlan=0
       -net tap,script=no,vlan=0,ifname=tap0
       -serial stdio
       -nographic
       -incoming tcp:0:4444

    注:以上参考了matty 的blog  。不过在centos里qemu-kvm 命令位于/usr/libexec/qemu-kvm 。

    二、virt-install常用参数

    • -n --name= 客户端虚拟机名称
    • -r --ram= 客户端虚拟机分配的内存
    • -u --uuid= 客户端UUID 默认不写时,系统会自动生成
    • --vcpus= 客户端的vcpu个数
    • -v --hvm 全虚拟化
    • -p --paravirt 半虚拟化
    • -l --location=localdir 安装源,有本地、nfs、http、ftp几种,多用于ks网络安装
    • --vnc 使用vnc ,另有--vnclient=监听的IP  --vncport =VNC监听的端口
    • -c --cdrom= 光驱 安装途径
    • --disk= 使用不同选项作为磁盘使用安装介质
    • -w NETWORK, --network=NETWORK 连接客户机到主机网络 
    • -s --file-size= 使用磁盘映像的大小 单位为GB
    • -f --file= 作为磁盘映像使用的文件
    • --cpuset=设置哪个物理CPU能够被虚拟机使用
    • --os-type=OS_TYPE 针对一类操作系统优化虚拟机配置(例如:‘linux’,‘windows’)
    • --os-variant=OS_VARIANT 针对特定操作系统变体(例如’rhel6’, ’winxp’,'win2k3')进一步优化虚拟机配置
    • --host-device=HOSTDEV 附加一个物理主机设备到客户机。HOSTDEV是随着libvirt使用的一个节点设备名(具体设备如’virsh nodedev-list’的显示的结果)
    • --accelerate KVM或KQEMU内核加速,这个选项是推荐最好加上。如果KVM和KQEMU都支持,KVM加速器优先使用。
    • -x EXTRA, --extra-args=EXTRA 当执行从"--location"选项指定位置的客户机安装时,附加内核命令行参数到安装程序
    • --nographics "virt-install" 将默认使用--vnc选项,使用nographics指定没有控制台被分配给客户机

    以上参考virt-install man页中文翻译 。

    三、几个安装示例

    示例1:

    # qemu-img create -f qcow2 /data/centos-6.4.qcow2 10G
    # virt-install --virt-type kvm --name centos-6.4 --ram 1024
    --cdrom=/data/CentOS-6.4-x86_64-netinstall.iso
    --disk path=/data/centos-6.4.qcow2,size=10,format=qcow2
    --network network=default
    --graphics vnc,listen=0.0.0.0 --noautoconsole
    --os-type=linux --os-variant=rhel6

    以上第一部创建guest镜像文件可以省略,virt-install在安装时带有创建过程 。不过还是建议按上面的步骤操作,因为如果两部合并,执行virt-install的时间比分开会略长 。对于--os-variant后面可以跟的值可以通过如下命令查看:

    [root@kvmtest ~]# virt-install --os-variant list
    win7                 : Microsoft Windows 7
    vista                : Microsoft Windows Vista
    winxp64              : Microsoft Windows XP (x86_64)
    winxp                : Microsoft Windows XP
    win2k                : Microsoft Windows 2000
    win2k8               : Microsoft Windows Server 2008
    win2k3               : Microsoft Windows Server 2003
    openbsd4             : OpenBSD 4.x
    freebsd8             : FreeBSD 8.x
    freebsd7             : FreeBSD 7.x
    …………………………省略………………………………

    对于vnc后对应的display号码可以通过下面的方法查看:

    # virsh vncdisplay centos-6.4
    :1

    以上示例参看openstack doc页面 。

    示例2:

    给guest主机划分物理机分区

    lvcreate -L20G -n host.demo.com kvm-storage

    下载镜像并loop到本地:

    wget http://mirrors.manchester.icecolo.com/centos/5.5/isos/x86_64/CentOS-5.5-x86_64-bin-1of8.iso
    mkdir /mnt/centos55
    mount -o loop CentOS-5.5-x86_64-bin-1of8.iso /mnt/centos55/

    通过location本地安装,并通过console管理:

    virt-install
    -n host.demo.com
    -r 512
    --vcpus=1
    --os-variant=rhel5.4
    --accelerate
    --nographics
    -v
    -l /mnt/centos55/
    -w bridge:br1
    --disk path=/dev/kvm-storage/host.demo.com
    -x "console=ttyS0"

    管理时可以通过

    #查看guest id、name 及状态
    virsh list --all
    #通过console连接查看
    virsh console idname
    #连接完成后会要求输入用户名和密码

    以上页面参考另一个叫matt的blog (matt这名字在国外是不是很流行?

    示例3:

    virt-install --hvm --virt-type=kvm
    --location=http://192.168.0.254/centos6/64 --name centos6.4
    --ram 4096 --vcpus=2 --disk path=/dev/vg_vm/centos6.4
    -w bridge:virbr0
    -x "ks=http://192.168.0.130/ks/centos6.4.ks
    ip=192.168.122.10 netmask=255.255.255.0 dns=192.168.122.1 gateway=192.168.122.1
    console=tty0 console=ttyS0,115200n8"

    由于通过console或vnc进行安装时,和普通物理机上安装一样,需要做各种各样的选择和设置 。而安装时可能通过kickstart配置文件,直接完在安装 。





    安装KVM


    1、确认当前cpu支持虚拟化 cat /proc/cpuinfo

    2、yum -y install qemu-kvm libvirt virt-install bridge-utils

    3、lsmod | grep kvm 

    可以modprobe kvm ,kvm-intel,kvm-amd    modinfo kvm 

    4、开启虚拟化服务:systemctl start libvirtd

    5、配置网桥:

    #vim ifcfg-enP1p3s0
    #HWADDR="00:08:D2:ED:FA:A4"
      TYPE="Ethernet"
    BOOTPROTO="none"
    DEVICE=enP1p3s0
    ONBOOT=yes
      BRIDGE=br0 
    ###################################
    #vim ifcfg-br0
    DEVICE=br0
    TYPE=Bridge
         IPADDR=192.168.80.79
    NETMASK=255.255.255.0
    GATEWAY=192.168.80.1
    ONBOOT=yes
         BOOTPROTO=none
    DELAY=0

        6、关闭防火墙,systemctl stop firewalld.service

    7、selinux防火墙关闭

    setenforce 0
         sed -i 's/=enforcing/=disabled/g' /etc/selinux/config


    8、可以通过VNC来远程桌面访问

    展开全文
  • Linux 桌面虚拟化技术 KVM

    万次阅读 2021-08-11 07:35:49
    Linux 桌面虚拟化技术 KVM

    • KVM:是 Kernel-based Virtual Machine 的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。
    • VM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。

    • 官方网址:http://www.linux-kvm.org/page/Main_Page

    • KVM: 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。是第一个整合到Linux 内核的虚拟化技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。
    • 一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)
    • XEN :需要升级内核,只能支持和物理机系统一样的操作系统。 xen 虚拟上,可以运行windows ?
    • KVM: 支持 linux 以外的其它系统。比如:windows
      QEMU:是一套由 Fabrice Bellard 所编写的以 GPL 许可证分发源码的模拟处理器,在GNU/Linux 平台上使用广泛。QEMU 具有高速度和跨平台的特性,QEMU 能模拟至接近真实电脑的速度。
      QEMU 能模拟整个电脑系统,包括中央处理器及其他周边设备。
      QEMU 和 vmware 一样,都是仿真虚拟化技术,效率比较低。QEMU 也是一种虚拟机技术。

    • 实验环境:
    • VM 虚拟机 CentOS 7.6   SElinux、Firewall以及iptables 均为关闭状态

    • 查看 CPU 是否支持虚拟化
    • egrep "vmx|svm" /proc/cpuinfo
    • intel: vmx
    • AMD: svm
    • 如果显示为空,则表示不支持虚拟化,需要开启 主板 BIOS 虚拟化支持

    • 安装 KVM 模块、管理工具和 libvirt,命令行安装:
    • yum install qemu-kvm libvirt libguestfs-tools virt-install libvirt-python librbd1 -y
    • 注:使用系统镜像,先配置好 yum 本地源

      qemu-kvm : kvm 主程序, KVM 虚拟化模块
      virt-manager: KVM 图形化管理工具,这里不安装不使用
      libvirt: 虚拟化服务
      libguestfs-tools : 虚拟机的系统管理工具
      virt-install : 安装虚拟机的实用工具 。比如 virt-clone 克隆工具就是这个包安装的
      libvirt-python : python 调用 libvirt 虚拟化服务的 api 接口库文件
      librbd1:是一个属于librados的用户态接口库
    • 安装完 KVM 后启动服务
    • systemctl enable libvirtd --now
    • 确定正确加载 kvm 模块
    • lsmod |grep kvm
      kvm_intel             188740  0 
      kvm                   637515  1 kvm_intel
      irqbypass              13503  1 kvm 

    • 如果启动报错,查看 系统日志 /var/log/messages  排查

    • 解决办法:安装最新版本的 librbd1

    • 配置 KVM 网络桥接功能

    • 网桥介绍: 经常说的 Bridge 设备其实就是网桥设备,也就相当于现在的二层交换机,用于连接同一网段内的所有机器,目的就是将第一块网卡 ens33 添加到 br0,此时 br0 就成为了所谓的交换机设备,物理机的 ens33 也是连接在上面的。
    • 添加桥接设备 br0: 相当于一个二层交换机
    • 使用 virsh 命令配置网桥
    • 使用 virsh 命令配置网桥很方便,但 br0 上不会自动配置 DNS,如果需要虚拟机上网需要自己添加DNS,过程如下:
      # yum install libvirt-client -y       #安装包括 virsh 命令的 rpm 包
      # virsh iface-bridge ens33 br0 --no-stp
       注:iface-bridge 网卡接口名 新建网桥名 不启用 stp 生成树协议
      # echo 'DNS1=8.8.8.8' >> /etc/sysconfig/network-scripts/ifcfg-br0
      # systemctl restart network.service 

    •  重启验证 

    • 扩展:virbr0 概述
      virbr0 是一种虚拟网络接口,这是由于安装和启用了 libvirtd 服务后会自动生成一个桥设备名字为 virbr0。
      libvirtd 这个服务,在安装系统时,已经帮你安装好并开机启动了。所以尽管我们没有安装 KVM,一样可以能看到这个 virbr0 这个桥设备。
    •  libvirtd 在服务器上生成一个 virtual network switch (virbr0),kvm 中所有的虚拟机(guests操作系统)通过这个 virbr0 连起来。默认情况下 KVM 中 virbr0 使用的是 NAT 网络模式。所以这种情况下 KVM 中的虚拟机需要通过物理机的网卡才能访问外部。

    • 创建KVM 虚拟机,准备一个硬盘或者分区,用于存放安装好的 Linux 操作系统:
    • mkfs.xfs /dev/sdc
    • mount /dev/sdc /var/lib/libvirt/images/

    • 写入 fstab 实现开机挂载

    • virt-install 命令常用选项:
      -n NAME, --name=NAME 指定 Guest 名字
      -r MEMORY, --ram=MEMORY 指定内存大小
      --vcpus=VCPUS 指定虚拟机的 CPU 数量
      --disk 指定虚拟机磁盘存储文件的路径 , size=5 指定虚拟磁盘的大小,单位是 G;
      例:--disk path=/var/lib/libvirt/images/centos-76.img,size=5
      --accelerate KVM 或 KQEMU 内核加速器,这个选项默认是添加的。另外,如果系统 KVM 和KQEMU 加速器都支持,优先使用 KVM 加速器。
      -c CDROM, --cdrom=CDROM 指定用于全虚拟化 Guest 的虚拟光驱, --cdrom=后指定ISO 或 CDROM 镜像。
      --network #指定虚拟机的网卡模式。如:--network bridge=br0 
      -x EXTRA, --extra-args=EXTRA 用来给加载的 kernel 和 initrd 提供额外的内核命令行参数。比如无人值守安装系统 
    • 准备工作
    • 基于 apache 服务器搭建本地 yum 源镜像
      # yum install httpd -y 
      # systemctl enable httpd --now
      # mkdir /var/www/html/centos7/ 
    • 准备系统镜像:centos7.6 (不建议使用 MINI 版)
      # mount /dev/cdrom /var/www/html/centos7/
    • # iptables -F #关闭防火墙

    • 创建 ks.cfg 自动应答文件

    • cat /var/www/html/ks.cfg
      firewall --disabled
      install
      url --url="http://192.168.2.234/centos7"
      rootpw --iscrypted $1$root$j0bp.KLPyr.u9kgQ428D10
      auth  --useshadow  --passalgo=sha512
      text
      firstboot --disable
      keyboard us
      lang en_US.UTF-8
      selinux --disabled
      logging --level=info
      reboot
      timezone  Asia/Shanghai
      network  --bootproto=dhcp --device=eth0 --onboot=on
      bootloader --location=mbr
      zerombr
      clearpart --all --initlabel 
      part /boot --fstype="xfs" --size=500
      #part swap --fstype="swap" --size=1000
      #part / --fstype="ext4" --size=1 --grow

      part pv.156 --fstype="lvmpv" --size=1 --grow
      volgroup centos --pesize=4096 pv.156
      logvol swap  --fstype="swap" --size=1000 --name=swap --vgname=centos
      logvol /  --fstype="xfs" --vgname=centos --size=1 --grow

      %packages
      #CentOS 6.X 这里要使用 @base
      @^minimal
      @core
      %end

    • 创建 centos-7 虚拟机:

    • virt-install --name=centos7 --memory=4096,maxmemory=4096 --vcpus=1,maxvcpus=1 --os-type=linux --os-variant=rhel7 --location=http://192.168.2.234/centos7/ --network bridge=br0 -x "ks=http://192.168.2.234/ks.cfg" --disk path=/var/lib/libvirt/images/centos7.qcow2,size=10 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"

    • KVM 虚拟机常用命令
      # virsh list #列出在运行的虚拟机
      # virsh start centos7 #启动 centos7虚拟机
      # virsh shutdown centos7 #关闭 centos7 虚拟机
      # virsh autostart centos7 #设置 centos7.虚拟机为物理机开机后,自动启动
    • 重启验证

    •  shutdown 需要点时间

    • 设为开机启动 kvm 中 centos7 虚拟机,但是 reboot 物理机后,没有启动。
      解决:
      # chkconfig --list libvirtd #开机启动了
      # libvirtd 0:off 1:off 2:off 3:on4:on5:on6:off
      # vim /etc/fstab #记得设置开机自动挂载 sdc,不然后开机启动不了虚拟机

    • KVM 虚拟机克隆和快照

    • 克隆 kvm 虚拟机
      克隆前,centos7.0 需要提前关机。
      语法:virt-clone -o 原虚拟机 -n 新虚拟机 -f 新虚拟机镜像存放路径
      选项:-o old -n new 
      虚拟机镜像: 就是整个虚拟机文件。 
    • virt-clone -o centos7 -n centos7-1 -f /var/lib/libvirt/images/centos7-1.qcow2

    • KVM 虚拟机组成
      一台 KVM 虚拟机由两部分组成:虚拟机配置文件和镜像 img
      查看虚拟机的配置文件:
    • ll /etc/libvirt/qemu
      总用量 8
      drwxr-xr-x 2 root root   25 8月  11 10:50 autostart
      -rw------- 1 root root 3340 8月  13 12:34 centos7-1.xml
      -rw------- 1 root root 3334 8月  11 10:31 centos7.xml
      drwx------ 3 root root   42 8月  11 07:59 networks

    • vim /etc/libvirt/qemu/centos7-1.xml 

    • 调整虚拟机配置,必须关闭该虚拟机
    • viresh shutdown centos7-1
    • 重新加载配置文件
    • virsh define --file /etc/libvirt/qemu/centos7-1.xml
      定义域 centos7-1(从 /etc/libvirt/qemu/centos7-1.xml)

    • 发现内存已经调整为 1G 

    • 测试链接
    • 修改 IP  HOSTNAME

    •  开启之前关闭的虚拟机
    • virsh start centos7

    •  原虚拟机和克隆完的虚拟机配置文件的区别:

    •  vimdiff /etc/libvirt/qemu/centos7.xml /etc/libvirt/qemu/centos7-1.xml

    • 注:这里可以看出两者的 MAC 地址是不一样的。 所以对克隆或复制出来的虚拟机启动后,要修改网卡配置文件的 MAC 地址,因为克隆出来的虚拟机的真实 MAC 地址和操作系统中的 ifcfg-eth0 中的MAC 地址不一样。
    • 虚拟机常用镜像格式对比
    • 目前主要虚拟机的镜像格式:raw,cow, qcow,qcow2,vmdk 。
      raw 格式镜像
      raw:老牌的镜像格式,用一个字来说就是裸,也就是赤裸裸,你随便 dd 一个 file 就模拟了一个raw 格式的镜像。由于裸的彻底,性能上来说的话还是不错的。centos6 上 KVM 和 XEN 默认的格式还是这个格式。centos7 以上默认是 qcow2 。
      裸的好处还有就是简单,支持转换成其它格式的虚拟机镜像对裸露的它来说还是很简单的(如果其它格式需要转换,有时候还是需要它做为中间格式),空间使用来看,这个很像磁盘,使用多少就是多少(du -h 看到的大小就是使用大小)。
      例: qcow2 转为 vmdk 方法是: qcow2 转为 raw ,然后把 raw 转为 vmdk 。也可以直接 qcow2 转为 vmdk
      raw 格式的缺点:不支持 snapshot 快照。
    • cow、qcow、qcow2 格式
      1、cow 格式:还没有成熟,就被放弃了。后来被 qcow 格式所取代。
      2、qcow 格式:刚刚出现的时候有比较好的特性,但其性能和 raw 格式对比还是有很大的差距,目前已经被新版本的 qcow2 取代。
      3、qcow2 格式:
      现在比较主流的一种虚拟化镜像格式,经过优化,目前 qcow2 的性能上接近 raw 裸格式的性能qcow2 格式支持 snapshot,可以在镜像上做 N 多个快照,具有以下优点:
      更小的存储空间
      支持创建 image 镜像
      支持多个 snapshot,对历史 snapshot 进行管理
      支持 zlib 的磁盘压缩
      支持 AES 的加密
      4、 vmdk 格式:
      VMware 的格式,整体性能最好,因为原本 VMware 就是做虚拟化起家。从性能和功能上来说,vmdk 应该算最出色的,由于 vmdk 结合了 VMware 的很多能力,目前来看,KVM 和 XEN 使用这种格式的情况不是太多。但就 VMware 的企业级虚拟化 Esxi 来看,它的稳定性和各方面的能力都很好 


    • KVM 快照:
      快照的作用:1、热备 2、灾难恢复 3、回滚到历中的某个状态

    • 注:快照是存放在 kvm 的磁盘镜像中。
    • kvm 快照,分两种:
      方法 1:使用 lvm 快照,如果分区是 lvm,可以利用 lvm 进行 kvm 的快照备份
      方法 2:使用 qcow2 格式的镜像创建快照。
    • 创建 KVM 快照
    • 要使用快照功能,磁盘格式必须为 qcow2。
    • qemu-img info /var/lib/libvirt/images/centos7-1.qcow2

    • 语法:virsh snapshot-create-as KVM 虚拟机名 快照名
    • virsh snapshot-create-as centos7-1 系统初始
    • 查看快照文件大小
    • ll -h /var/lib/libvirt/qemu/snapshot/centos7-1/

    • 查看当前 kvm 中的虚拟机,是基于哪个快照来运行
    • virsh snapshot-current centos7-1 |head
    • 查看快照占用的大小:
    • emu-img info /var/lib/libvirt/images/centos7-1.qcow2 
      image: /var/lib/libvirt/images/centos7-1.qcow2
      file format: qcow2
      virtual size: 10G (10737418240 bytes)
      disk size: 3.3G
      cluster_size: 65536
      Snapshot list:
      ID        TAG                 VM SIZE                DATE       VM CLOCK
      1         系统初始           226M 2021-08-13 13:17:37   00:15:30.624
      Format specific information:
          compat: 1.1
          lazy refcounts: true

    • 恢复虚拟机快照必须关闭虚拟机
    • 安装一些软件后创建快照

    • 关闭虚拟机后执行恢复快照
    • virsh snapshot-revert 虚拟机名称 快照名称
    • virsh shutdown centos7-1 
      域 centos7-1 被关闭

      virsh domstate centos7-1 
      关闭

      virsh snapshot-revert centos7-1 系统初始

      virsh snapshot-current centos7-1 |head

    • 删除快照
    • virsh snapshot-delete centos7-1 vim_lrzsz 

    • virsh 常用命令
      # virsh list #查看已启动的虚拟机列表
      # virsh list --all #查看所有虚拟机列表
      # virsh start centos7 #启动名称为 centos7 虚拟机
      # virsh shutdown centos7 #关闭 名称为 centos7 虚拟机
      # virsh dumpxml centos7 > /opt/centos7.xml #导出centos7 虚拟机配置文件
      # virsh undefine centos7 #取消域 centos7.0 的定义。
      注:virsh undefine centos7.0 会删除虚拟机 centos7.0 的配置文件,虚拟机 centos7.0 的磁盘
      镜像文件还在。另外,发现“虚拟系统管理器”中管理的 kvm 虚拟机,没有 centos7.0

    •  不能直接删除有快照的虚拟机,要先删除快照

    •  列表、配置文件已经删除,但是磁盘文件依然存在

    • 把虚拟机重新加入到 virt-manager 目录列表。
      语法:virsh define 虚拟机.xml 的绝对路径
    • # virsh destroy centos7 #强制关机,强制关闭 虚拟机。 当使用 virsh shutdown 正常关机,不行时,用这个。
      # virsh autostart centos7#设置开机自启动 centos7.0
      # virsh autostart --disable centos7.0 #取消虚拟机随宿主机开机自启
      # virsh suspend centos7.0 #挂起虚拟机
      # virsh resume centos7.0 #恢复虚拟机

    • qcow2 格式转换成 raw

    • qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/centos7-1.qcow2 /var/lib/libvirt/images/centos7-1.raw
    • 查看转换后的格式,已经转换成了 raw 
    • qemu-img info /var/lib/libvirt/images/centos7-1.raw
      image: /var/lib/libvirt/images/centos7-1.raw
      file format: raw
      virtual size: 10G (10737418240 bytes)
      disk size: 1.2G

    • 修改虚拟机配置文件-使用新的磁盘格式启动虚拟机 
    • virsh edit centos7-1
    • #注意 vim 直接编辑配置文件/etc/libvirt/qemu/xuegod63-kvm2.xml 不生效
      修改后,需要重启服务

    • 其他镜像格式转换方法
      例 1:将 vmdk 转换为 qcow2
      qemu-img convert -f vmdk -O qcow2 source-name.vmdk target-name.qcow2 
      例 2:将 qcow2 转换为 vmdk
      ]# cd /var/lib/libvirt/images/
      ]# qemu-img convert -f qcow2 -O vmdk centos7.img centos7.vmdk

    • 使用 X11 图形转发

    • 需要安装 virt-manager 和 tigervnc
    • yum -y install virt-manager tigervnc
    • 注:5900为 tigervnc默认监听端口,使用的不是真正的虚拟机图形界面,虚拟机并没有安装图形界面

    • kvm 使用的系统字体,对中文支持不是很友好,需要单独准备字体,这里使用win系统的微软雅黑,将字体文件导入到 /usr/share/fonts/dejavu/ 目录下,然后重启一下

    • 重启之后检查xshell设置X11 转发,使用 virt-manager 命令启动
    • 注意这里调用的是 Xmanager - Passive 程序 

    • 图形界面点点鼠标即可 

    展开全文
  • kvm-源码

    2021-03-29 03:09:46
    kvm
  • kvm环境搭建、kvm配置命令、虚拟化管理、openstack kvm优化
  • kvm创建 kvm管理命令 管理工具 强制关闭虚拟机: virsh destroy vmhost 创建快照:virsh snapshot-create-as xuegod63-kvm2 httpd (httpd是快照名字) 查看快照位置:ll -h /var/lib/libvirt/qemu/snapshot/xuegod63...
  • 文章目录一、案例概述二、实验环境三、实验目的四、实验配置4.1、部署GFS分布式复制卷平台4.2、部署KVM虚拟化平台五、实验验证 所需安装包(GFS软件和XFTP软件包) 链接:...
  • KVM虚拟化

    万次阅读 多人点赞 2019-03-14 20:17:24
    kvm虚拟化1. 虚拟化介绍2. kvm介绍3. kvm部署3.1 kvm安装3.2 kvm web管理界面安装 1. 虚拟化介绍 虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、...

    1. 虚拟化介绍

    虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。

    物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

    那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
    这个主要是通过一个叫做 Hypervisor 的程序实现的。

    根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:

    • 全虚拟化
    • 半虚拟化

    全虚拟化:
    Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型

    在这里插入图片描述
    半虚拟化:

    在这里插入图片描述

    理论上讲:

    全虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比半虚拟化要高;
    半虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

    2. kvm介绍

    kVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。
    KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。

    那 IO 的虚拟化,比如存储和网络设备则是由 Linux 内核与Qemu来实现。

    作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。

    大家在网上看 KVM 相关文章的时候肯定经常会看到 Libvirt 这个东西。

    Libvirt 就是 KVM 的管理工具。

    其实,Libvirt 除了能管理 KVM 这种 Hypervisor,还能管理 Xen,VirtualBox 等。

    Libvirt 包含 3 个东西:后台 daemon 程序 libvirtd、API 库和命令行工具 virsh

    • libvirtd是服务程序,接收和处理 API 请求;
    • API 库使得其他人可以开发基于 Libvirt 的高级工具,比如 virt-manager,这是个图形化的 KVM 管理工具;
    • virsh 是我们经常要用的 KVM 命令行工具

    3. kvm部署

    环境说明:

    IP:192.168.157.99

    3.1 kvm安装

    部署前请确保你的CPU虚拟化功能已开启。分为两种情况:

    • 虚拟机要关机设置CPU虚拟化
    • 物理机要在BIOS里开启CPU虚拟化

    //关闭防火墙与selinux

    	[root@mp ~]# systemctl stop firewalld
    	[root@mp ~]# systemctl disable firewalld
    	Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    	Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    	[root@mp ~]# setenforce 0
    	[root@mp ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
    	//这一步十分重要!!!
    

    //配置网络源

    	[root@mp yum.repos.d]# curl -o /etc/yum.repos.d/CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
    	[root@mp ~]# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo
    	[root@mp ~]# sed -i 's/^enabled=.*/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo
    	[root@mp ~]# yum -y install epel-release vim wget net-tools unzip zip gcc gcc-c++
    	安装过程略.....
    

    //验证CPU是否支持KVM;如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的

    	[root@mp ~]# egrep -o 'vmx|svm' /proc/cpuinfo
    	vmx
    	vmx
    	vmx
    	vmx
    

    //kvm安装

    	[root@mp ~]# yum -y install qemu-kvm qemu-kvm-tools qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer bridge-utils libguestfs-tools
    	//安装过程省略......
    

    //因为虚拟机中网络,我们一般都是和公司的其他服务器是同一个网段,所以我们需要把 KVM服务器的网卡配置成桥接模式。这样的话KVM的虚拟机就可以通过该桥接网卡和公司内部 其他服务器处于同一网段

    //此处我的网卡是ens32,所以用br0来桥接ens32网卡

    	//对应修改或者添加以下内容即可
    	[root@mp ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 
    	TYPE=Bridge
    	DEVICE=br0
    	NM_CONTROLLED=no
    	BOOTPROTO=static
    	NAME=br0
    	ONBOOT=yes
    	IPADDR=192.168.157.99
    	NETMASK=255.255.255.0
    	GATEWAY=192.168.157.2
    	DNS1=8.8.8.8
    
    
    	//保留以下内容即可
    	[root@mp ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32 
    	TYPE=Ethernet
    	BOOTPROTO=static
    	NAME=ens33
    	DEVICE=ens33
    	ONBOOT=yes
    	BRIDGE=br0
    	NM_CONTROLLED=no
    
    
    	[root@mp ~]# systemctl restart network
    	
    	[root@mp ~]# ip a 
    	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    	    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: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    	    link/ether 00:0c:29:93:a6:6c brd ff:ff:ff:ff:ff:ff
    	    inet6 fe80::20c:29ff:fe93:a66c/64 scope link 
    	       valid_lft forever preferred_lft forever
    	3: ens35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    	    link/ether 00:0c:29:93:a6:76 brd ff:ff:ff:ff:ff:ff
    	4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    	    link/ether 00:0c:29:93:a6:6c brd ff:ff:ff:ff:ff:ff
    	    inet 192.168.157.99/24 brd 192.168.157.255 scope global br0
    	       valid_lft forever preferred_lft forever
    	    inet6 fe80::20c:29ff:fe93:a66c/64 scope link 
    	       valid_lft forever preferred_lft forever
    

    //启动服务

    	[root@mp ~]# systemctl start libvirtd
    	[root@mp ~]# systemctl enable libvirtd
    

    //验证安装结果

    	[root@mp ~]# lsmod|grep kvm
    	kvm_intel             170086  0 
    	kvm                   566340  1 kvm_intel
    	irqbypass              13503  1 kvm
    
    

    //测试并验证安装结果

    	[root@mp ~]# virsh -c qemu:///system list
    	 Id    名称                         状态
    	----------------------------------------------------
    	[root@mp ~]# virsh --version
    	4.5.0
    	[root@mp ~]# virt-install --version
    	1.5.0
    	[root@mp ~]# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
    	[root@mp ~]# ll /usr/bin/qemu-kvm 
    	lrwxrwxrwx. 1 root root 21 314 14:17 /usr/bin/qemu-kvm -> /usr/libexec/qemu-kvm
    	
    	[root@mp ~]# lsmod |grep kvm
    	kvm_intel             170086  0 
    	kvm                   566340  1 kvm_intel
    	irqbypass              13503  1 kvm
    

    //查看网桥信息

    	[root@mp ~]# brctl show
    	bridge name	bridge id		STP enabled	interfaces
    	br0		8000.000c2993a66c	no		ens32
    	virbr0		8000.5254009df26a	yes		virbr0-nic
    

    3.2 kvm web管理界面安装

    kvm 的 web 管理界面是由 webvirtmgr 程序提供的。

    //安装依赖包

    	[root@mp ~]# yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx python-devel
    

    //升级pip

    		
    	[root@mp ~]# pip install --upgrade pip
    	//过程省略......
    

    //从github上下载webvirtmgr代码

    	[root@mp ~]# cd /usr/local/src/
    	[root@mp src]# git clone git://github.com/retspen/webvirtmgr.git
    	正克隆到 'webvirtmgr'...
    	remote: Enumerating objects: 5614, done.
    	remote: Total 5614 (delta 0), reused 0 (delta 0), pack-reused 561
    	接收对象中: 100% (5614/5614), 2.98 MiB | 1011.00 KiB/s, done.
    	处理 delta 中: 100% (3602/3602), done.
    

    //安装webvirtmgr

    	[root@mp src]# cd webvirtmgr/
    	[root@mp webvirtmgr]# pip install -r requirements.txt
    	DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
    	//安装过程省略......
    

    //检查sqlite3是否安装

    	[root@mp webvirtmgr]# python
    	Python 2.7.5 (default, Oct 30 2018, 23:45:53) 
    	[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
    	Type "help", "copyright", "credits" or "license" for more information.
    	>>> import sqlite3
    	>>> exit()
    

    //初始化帐号信息

    	[root@kvm webvirtmgr]# python manage.py syncdb
    	WARNING:root:No local_settings file found.
    	Creating tables ...
    	Creating table auth_permission
    	Creating table auth_group_permissions
    	Creating table auth_group
    	Creating table auth_user_groups
    	Creating table auth_user_user_permissions
    	Creating table auth_user
    	Creating table django_content_type
    	Creating table django_session
    	Creating table django_site
    	Creating table servers_compute
    	Creating table instance_instance
    	Creating table create_flavor
    	
    	You just installed Django's auth system, which means you don't have any superusers defined.
    	Would you like to create one now? (yes/no): yes     //问你是否创建超级管理员帐号
    	Username (leave blank to use 'root'):   //指定超级管理员帐号用户名,默认留空为root
    	Email address: bebejo@126.com     //设置超级管理员邮箱
    	Password:1       //设置超级管理员密码
    	Password (again):1       //再次输入超级管理员密码
    	Superuser created successfully.
    	Installing custom SQL ...
    	Installing indexes ...
    	Installed 6 object(s) from 1 fixture(s)
    

    //拷贝web网页至指定目录

    	[root@mp webvirtmgr]# mkdir /var/www
    	[root@mp webvirtmgr]# cp -r /usr/local/src/webvirtmgr/ /var/www/
    	[root@mp webvirtmgr]# chown -R nginx.nginx /var/www/webvirtmgr/
    

    //生成密钥

    	//全部保持默认,回车即可
    	[root@mp ~]# ssh-keygen -t rsa
    	Generating public/private rsa key pair.
    	Enter file in which to save the key (/root/.ssh/id_rsa): 
    	Created directory '/root/.ssh'.
    	Enter passphrase (empty for no passphrase): 
    	Enter same passphrase again: 
    	Your identification has been saved in /root/.ssh/id_rsa.
    	Your public key has been saved in /root/.ssh/id_rsa.pub.
    	The key fingerprint is:
    	SHA256:3/LDSmdcrWbrJxAXtt9HJD13UKlz4lTbYrCqzUNVkWQ root@mp
    	The key's randomart image is:
    	+---[RSA 2048]----+
    	|             .E*o|
    	|            ..*+=|
    	|             =o=*|
    	|            +==+o|
    	|        S  oo+=+o|
    	|         .oo.o .+|
    	|         =+.=.+ .|
    	|        ..+=oo...|
    	|          .o.ooo |
    	+----[SHA256]-----+
    

    //由于这里webvirtmgr和kvm服务部署在同一台机器,所以这里本地信任。如果kvm部署在其他机器,那么这个是它的ip

    	[root@mp ~]# ssh-copy-id 192.168.157.99
    	/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    	The authenticity of host '192.168.157.99 (192.168.157.99)' can't be established.
    	ECDSA key fingerprint is SHA256:I20VCudXLSb+D75FPy0SjjexuAhmPkhN8hO4DZFjaT8.
    	ECDSA key fingerprint is MD5:f2:04:78:0f:b3:30:ae:12:66:05:85:97:e6:ab:80:15.
    	Are you sure you want to continue connecting (yes/no)? yes
    	/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    	/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    	root@192.168.157.99's password: 
    	
    	Number of key(s) added: 1
    	
    	Now try logging into the machine, with:   "ssh '192.168.157.99'"
    	and check to make sure that only the key(s) you wanted were added.
    
    

    //端口转发

    	[root@mp ~]# ssh 192.168.157.99 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:60
    	Last login: Fri Mar 15 02:23:10 2019 from 192.168.157.1
    	[root@mp ~]# ss -antl 
    	State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
    	LISTEN     0      128        *:111                    *:*                  
    	LISTEN     0      5      192.168.122.1:53                     *:*                  
    	LISTEN     0      128        *:22                     *:*                  
    	LISTEN     0      100    127.0.0.1:25                     *:*                  
    	LISTEN     0      128    127.0.0.1:6080                   *:*                  
    	LISTEN     0      128    127.0.0.1:8000                   *:*                  
    	LISTEN     0      128       :::111                   :::*                  
    	LISTEN     0      128       :::22                    :::*                  
    	LISTEN     0      100      ::1:25                    :::*                  
    	LISTEN     0      128      ::1:6080                  :::*                  
    	LISTEN     0      128      ::1:8000                  :::*        
    

    //配置nginx

    	[root@mp ~]# vim /etc/nginx/nginx.conf
    	[root@kvm ~]# vim /etc/nginx/nginx.conf
    	user nginx;
    	worker_processes auto;
    	error_log /var/log/nginx/error.log;
    	pid /run/nginx.pid;
    	
    	include /usr/share/nginx/modules/*.conf;
    	
    	events {
    	    worker_connections 1024;
    	}
    	
    	http {
    	    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    	                      '$status $body_bytes_sent "$http_referer" '
    	                      '"$http_user_agent" "$http_x_forwarded_for"';
    	
    	    access_log  /var/log/nginx/access.log  main;
    	
    	    sendfile            on;
    	    tcp_nopush          on;
    	    tcp_nodelay         on;
    	    keepalive_timeout   65;
    	    types_hash_max_size 2048;
    	
    	    include             /etc/nginx/mime.types;
    	    default_type        application/octet-stream;
    	
    	    include /etc/nginx/conf.d/*.conf;
    	
    	    server {
    	        listen       80;
    	        server_name  localhost;
    	
    	        include /etc/nginx/default.d/*.conf;
    	
    	        location / {
    	            root html;
    	            index index.html index.htm;
    	        }
    	
    	        error_page 404 /404.html;
    	            location = /40x.html {
    	        }
    	
    	        error_page 500 502 503 504 /50x.html;
    	            location = /50x.html {
    	        }
    	    }
    	}
    
    
    	[root@mp ~]# vim /etc/nginx/conf.d/webvirtmgr.conf 
    	server {
        listen 80 default_server;
    
        server_name $hostname;
        #access_log /var/log/nginx/webvirtmgr_access_log;
    
        location /static/ {
            root /var/www/webvirtmgr/webvirtmgr;
            expires max;
        }
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Forwarded-Proto $remote_addr;
            proxy_connect_timeout 600;
            proxy_read_timeout 600;
            proxy_send_timeout 600;
            client_max_body_size 1024M;
        }
    }
    

    //确保bind绑定的是本机的8000端口

    	[root@mp ~]# vim /var/www/webvirtmgr/conf/gunicorn.conf.py
    	.....此处省略N行
    	bind = '0.0.0.0:8000'     //确保此处绑定的是本机的8000端口,这个在nginx配置中定义了,被代理的端口
    	backlog = 2048
    	.....此处省略N

    //重启nginx

    	[root@mp ~]# systemctl start nginx 
    	[root@mp ~]# ss -antl
    	State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
    	LISTEN     0      128        *:111                    *:*                  
    	LISTEN     0      128        *:80                     *:*                  
    	LISTEN     0      5      192.168.122.1:53                     *:*                  
    	LISTEN     0      128        *:22                     *:*                  
    	LISTEN     0      100    127.0.0.1:25                     *:*                  
    	LISTEN     0      128    127.0.0.1:6080                   *:*                  
    	LISTEN     0      128    127.0.0.1:8000                   *:*                  
    	LISTEN     0      128       :::111                   :::*                  
    	LISTEN     0      128       :::22                    :::*                  
    	LISTEN     0      100      ::1:25                    :::*                  
    	LISTEN     0      128      ::1:6080                  :::*                  
    	LISTEN     0      128      ::1:8000                  :::*        
    

    //设置supervisor

    	[root@mp ~]# vim /etc/supervisord.conf 
    	//.....此处省略上面的内容,在文件最后加上以下内容
    	[program:webvirtmgr]
    	command=/usr/bin/python2 /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
    	directory=/var/www/webvirtmgr
    	autostart=true
    	autorestart=true
    	logfile=/var/log/supervisor/webvirtmgr.log
    	log_stderr=true
    	user=nginx
    	
    	[program:webvirtmgr-console]
    	command=/usr/bin/python2 /var/www/webvirtmgr/console/webvirtmgr-console
    	directory=/var/www/webvirtmgr
    	autostart=true
    	autorestart=true
    	stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
    	redirect_stderr=true
    	user=nginx
    

    //启动supervisor并设置开机自动启动

    	[root@mp ~]# systemctl start supervisord
    	[root@mp ~]# systemctl enable supervisord
    	Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.
    	[root@mp ~]# systemctl status supervisord
    	● supervisord.service - Process Monitoring and Control Daemon
    	   Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)
    	   Active: active (running) since 五 2019-03-15 03:06:19 CST; 20s ago
    	 Main PID: 3326 (supervisord)
    	   CGroup: /system.slice/supervisord.service
    	           └─3326 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor...
    	
    	315 03:06:18 mp systemd[1]: Starting Process Monitoring and Control.....
    	315 03:06:19 mp systemd[1]: Started Process Monitoring and Control ...n.
    	Hint: Some lines were ellipsized, use -l to show in full.
    
    
    
    	[root@mp ~]# ss -antl 
    	State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
    	LISTEN     0      128        *:111                    *:*                  
    	LISTEN     0      128        *:80                     *:*                  
    	LISTEN     0      5      192.168.122.1:53                     *:*                  
    	LISTEN     0      128        *:22                     *:*                  
    	LISTEN     0      100    127.0.0.1:25                     *:*                  
    	LISTEN     0      128    127.0.0.1:6080                   *:*                  
    	LISTEN     0      128    127.0.0.1:8000                   *:*                  
    	LISTEN     0      128       :::111                   :::*                  
    	LISTEN     0      128       :::22                    :::*                  
    	LISTEN     0      100      ::1:25                    :::*                  
    	LISTEN     0      128      ::1:6080                  :::*                  
    	LISTEN     0      128      ::1:8000                  :::*     
    

    //配置nginx用户

    	//未创建nginx用户,所以用su命令赋予它交互式登录的权限
    	[root@mp ~]# su - nginx -s /bin/bash
    	-bash-4.2$ ssh-keygen -t rsa
    	//全部保持默认,回车即可,密码除外。
    	Generating public/private rsa key pair.
    	Enter file in which to save the key (/var/lib/nginx/.ssh/id_rsa): 
    	Created directory '/var/lib/nginx/.ssh'.
    	
    	Enter passphrase (empty for no passphrase): 
    	
    	Enter same passphrase again: 
    	
    	Your identification has been saved in /var/lib/nginx/.ssh/id_rsa.
    	Your public key has been saved in /var/lib/nginx/.ssh/id_rsa.pub.
    	The key fingerprint is:
    	SHA256:86tvVfX2z7hqCHz/rqVUKMQPReWO26hNWlpZaZOTOgg nginx@mp
    	The key's randomart image is:
    	+---[RSA 2048]----+
    	|           .o..  |
    	|         . . .  .|
    	|          +   ...|
    	|         . o +.+o|
    	|       .E . +.@..|
    	|        o+.o.X o.|
    	|         oo+@ oo.|
    	|          o@o+. o|
    	|        .+*.==+. |
    	+----[SHA256]-----+
    	-bash-4.2$ touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
    	-bash-4.2$ chmod 0600 ~/.ssh/config
    	-bash-4.2$ ssh-copy-id root@192.168.157.99
    	/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/var/lib/nginx/.ssh/id_rsa.pub"
    	/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    	/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    	Warning: Permanently added '192.168.157.99' (ECDSA) to the list of known hosts.
    	root@192.168.157.99's password: 
    	
    	Number of key(s) added: 1
    	
    	Now try logging into the machine, with:   "ssh 'root@192.168.157.99'"
    	and check to make sure that only the key(s) you wanted were added.
    	
    	-bash-4.2$ exit
    	登出
    
    
    
    	[root@mp ~]#  vim /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
    	[Remote libvirt SSH access]
    	Identity=unix-user:root
    	Action=org.libvirt.unix.manage
    	ResultAny=yes
    	ResultInactive=yes
    	ResultActive=yes
    
    	[root@mp ~]# chown -R root.root /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
    	[root@mp ~]# systemctl restart nginx
    	[root@mp ~]# systemctl restart libvirtd
    

    3.3 kvm web界面管理

    通过ip地址在浏览器上访问kvm,例如我这里就是:http://192.168.157.99

    在这里插入图片描述此处的用户为:root
    密码为:执行python manage syncdb时设置的超级管理员密码


    在这里插入图片描述此处的Label要与下面的FQDN / IP一致!


    在这里插入图片描述点击上方的IP地址,不是点击Host:192.168.157.99

    3.3.2 kvm存储管理

    //创建存储

    在这里插入图片描述点击New Storage


    在这里插入图片描述****

    进入存储
    在这里插入图片描述点击default


    在这里插入图片描述池路径 /var/lib/libvirt/images:磁盘镜像ISO文件存储的位置


    //通过远程连接软件上传ISO镜像文件至存储目录/var/lib/libvirt/images/

    [root@mp ~]# cd /var/lib/libvirt/images/
    [root@mp images]# ll
    总用量 3963904
    -rw-r--r-- 1 root root 4059037696 3月  15 03:50 rhel-server-7.4-x86_64-dvd.iso
    

    //在web界面查看ISO镜像文件是否存在
    在这里插入图片描述


    //创建系统安装镜像
    在这里插入图片描述


    //添加成功如下图
    在这里插入图片描述

    3.3.3 kvm网络管理

    在这里插入图片描述点击New Network


    在这里插入图片描述


    3.3.4 实例管理

    实例(虚拟机的创建)
    在这里插入图片描述


    //虚拟机插入光盘

    在这里插入图片描述


    //设置在web上访问虚拟机的密码

    在这里插入图片描述


    //启动虚拟机

    在这里插入图片描述在这里插入图片描述


    //虚拟机安装

    在这里插入图片描述此步骤为虚拟机的安装步骤,不再阐述

    4. 所遇问题

    4.1 故障一

    第一次通过web访问kvm时可能会一直访问不了,一直转圈,而命令行界面一直报错(too many open files)

    
    	永久生效方法:
    		修改/etc/security/limits.conf,在文件底部添加:
    		* soft nofile 655360
    		* hard nofile 655360
    		星号代表全局, soft为软件,hard为硬件,nofile为这里指可打开文件数。
    	 
    	另外,要使limits.conf文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。
    	查看 /etc/pam.d/login 文件中有:
    	session required /lib/security/pam_limits.so
    

    4.2 故障二

    web界面配置完成后可能会出现以下错误界面
    在这里插入图片描述
    解决方法是安装novnc并通过novnc_server启动一个vnc

    	[root@mp ~]# ll /etc/rc.local
    	lrwxrwxrwx. 1 root root 13 Aug  6  2018 /etc/rc.local -> rc.d/rc.local
    	[root@mp ~]# ll /etc/rc.d/rc.local
    	-rw-r--r-- 1 root root 513 Mar 11 22:35 /etc/rc.d/rc.local
    	[root@mp ~]# chmod +x /etc/rc.d/rc.local
    	[root@mp ~]# ll /etc/rc.d/rc.local
    	-rwxr-xr-x 1 root root 513 Mar 11 22:35 /etc/rc.d/rc.local
    	
    	[root@mp ~]# vim /etc/rc.d/rc.local
    	......此处省略N行
    	# that this script will be executed during boot.
    	
    	touch /var/lock/subsys/local
    	nohup novnc_server 172.16.12.128:5920 &
    	
    	[root@mp ~]# . /etc/rc.d/rc.local
    
    展开全文
  • 基于KVM的虚拟机自检。 目录 概述 该项目将虚拟机自检添加到KVM虚拟机管理程序。 虚拟机自检是一种旨在仅基于VM的硬件状态来了解来宾的执行上下文的技术,其用途如下: 调试 恶意软件分析 实时内存分析 操作系统...
  • kvm 备份脚本

    2018-05-24 14:47:06
    kvm 备份脚本,用于备份kvm 虚拟机,kvm 备份脚本,用于备份kvm 虚拟机。
  • 文章目录前言一:理论概述1.1:Glusterfs 简介1.2:Glusterfs 特点二:KVM高可用构建实操2.1:环境2.2:实验目的2.3:实验过程2.3.1:构建GFS集群2.3.2:安装KVM虚拟机2.3.3:GFS集群节点服务器添加磁盘2.3.4:KVM宿...
  • 主讲朱晓彦;qemu-kvm 编译;qemu-kvm 编译;qemu-kvm 编译;qemu-kvm 编译;qemu-kvm 编译;qemu-kvm 编译
  • kvm install.txt

    2021-05-20 10:46:38
    kvm 桥接br0 并安装kvm 脚本

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,762
精华内容 27,504
关键字:

kvm