KVM之管理工具

1.  安装libvirt工具

    1.  编译安装

        需要在libvirt官网上下载源码

    2.  yum安装

        yum install -y libvirt

2.  libvirt和libvirtd的配置  

    1.  libvirt的配置文件

        1.  /etc/libvirt/libvirt.conf  用来配置一些常用libvirt连接的别名

uri_aliases = [
  "hail=qemu+ssh://root@hail.cloud.example.com/system",
  "sleet=qemu+ssh://root@sleet.cloud.example.com/system",
]
service libvirtd reload    重新加载服务
virsh -c hail
在代码中调用libvirt API时也可以使用这个别名来建立连接,如python
conn = libvirt.openReadOnly('hail')

        2.  /etc/libvirt/libvirtd.conf  libvirt守护进程的配置文件

        3.  /etc/libvirt/qemu.conf  libvirt对QEMU的驱动的配置文件    

        4.  /etc/libvirt/qemu  使用QEMU驱动的域的配置文件      

    2.  libvirtd的使用

        使用service或者systemctl命令管理

    3.  libvirt域的XML配置文件

        1.  例子

<domain type='kvm'>
  <name>cento7new</name>
  <uuid>07540a94-4637-46ea-bf40-b409712517b2</uuid>
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact' check='partial'>
    <model fallback='allow'>core2duo</model>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/kvm/vfs/vm1.raw'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:8e:b0:58'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'>
      <listen type='address'/>
      <image compression='off'/>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='2'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
    <rng model='virtio'>
      <backend model='random'>/dev/urandom</backend>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </rng>
  </devices>
</domain>

        2.  CPU的配置

            <vcpu placement='static'>2</vcpu>  指定客户机vCPU的个数

        3.  内存的配置

            <memory unit='KiB'>1048576</memory>  最大可用内存   
            <currentMemory unit='KiB'>1048576</currentMemory>  表示启动时分配给客户机使用的内存

        4.  客户机系统类型和启动顺序            

            <os>
            <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
            <boot dev='hd'/>
            </os>

        5.  网络的配置

            1.  桥接方式

                <interface type='bridge'>
                  <mac address='52:54:00:8e:b0:58'/>
                  <source bridge='br0'/>  使用宿主机的br0网络接口来建立网桥
                  <model type='virtio'/>
                  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
                </interface>                

            2.  NAT方式

                <interface type='network'>
                  <mac address='52:54:00:8e:b0:58'/>
                  <source network='default'/>  使用默认的网络配置,客户机将会分配到192.168.122.0/24网段中的一个IP地址
                  <model type='virtio'/>
                  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
                </interface>                

                NAT方式的默认配置文件  /usr/share/libvirt/networks/default.xml 

                查看网桥的使用情况  brctl show

        6.  存储的配置

            <disk type='file' device='disk'>
              <driver name='qemu' type='raw'/>
              <source file='/kvm/vfs/vm1.raw'/>
              <target dev='vda' bus='virtio'/>
              <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
            </disk>

3.  virsh客户端                                  

    virsh这个命令行工具使用libvirt API实现了很多命令来管理Hypervisor,节点和域

    1.  域管理的命令

        list  列出当前节点上所有域的列表

        domstate <ID或Name或UUID>  获取一个域的运行状态

        dominfo <ID>  获取一个域的基本信息

        dommemstat <ID>  获取一个域的内存使用情况的统计信息

        setmem <ID>  设置一个域的内存大小(不能超过最大内存)

        vcpuinfo <ID>  获取一个域的vCPU的基本信息

        vcpupin <ID> <vCPU> <pCPU>  将一个域的vCPU绑定到某个物理CPU上运行

        setvcpus <ID> <vCPU-num>  设置一个域的vCPU的个数

        vncdisplay <ID>  获取一个域的VNC连接IP地址和端口

        create <dom.xml>  根据域的XML配置文件创建一个域

        suspend <ID>  暂停一个域名

        resume <ID>  唤醒一个域名

        shutdown <ID>  让一个域执行关机操作

        reboot <ID>  让一个域重启

        destroy <ID>  立刻摧毁一个域

        save <ID> <file.img>  保存一个运行中的域的状态到一个文件中

        restore <file.img>  从一个被保存的文件中恢复一个域的运行

        migrate <ID> <dest_url>  将一个域迁移到另外一个目的地址

        dumpxml <ID>  以XML格式转存出一个域的信息到标准输出中

        attach-device <ID> <device.xml>  向一个域添加XML文件中的设备(热插拔)

        detach-device <ID> <device.xml>  将XML文件中的设备从一个域中删除

        console <ID>  连接到一个域的控制台          

    2.  宿主机和Hypervisor的管理命令

        version  显示libvirt和Hypervisor的版本信息

        sysinfo  以XML格式打印宿主机系统的信息

        nodeinfo  显示该节点的基本信息

        uri  显示当前连接的URI

        hostname  显示当前节点的主机名

        capabilities  显示该节点宿主机和客户机的架构和特性

        freecell  显示当前MUMA单元的可用空闲内存

        nodememstats  显示该节点的某个内存单元使用情况的统计

        connect <URI>  连接到URI表示的Hypervisor

        nodecpustats <cpu-num>  显示该节点的某个CPU使用情况的统计

        qemu-attach <pid>  根据PID添加一个QEMU进程到libvirt中

    3.  网络的管理命令

        iface-list  显示物理主机的网络接口列表

        iface-mac <if-name>  根据网络接口名称查询其对应的MAC地址

        iface-name <MAC>  根据MAC地址查询对应的网络接口名称

        iface-edit <if-name or uuid>  编辑一个物理主机的网络接口XML配置文件

        iface-destroy <if-name or uuid>  关闭宿主机上一个物理网络接口

        net-list  列出libvirt管理的虚拟网络

        net-info <net-name or uuid>  根据名称查询一个虚拟网络的基本信息

        net-uuid <net-name>  根据名称查询一个虚拟网络的UUID

        net-name <net-UUID>  根据UUID查询一个虚拟网络的名称

        net-create  <net.xml>  根据一个网络XML配置文件创建一个虚拟网络

        net-edit <net-name or uuid>  编辑一个虚拟网络的XML配置文件

        net-destroy <net-name or uuid>  销毁一个虚拟网络

    4.  存储池和存储卷的管理命令

        pool-list  显示出libvirt管理的存储池

        pool-info <pool-name>  根据一个存储池名称查询其基本信息

        pool-uuid <pool-name>  根据存储池名称查询其UUID

        pool-create <pool.xml>  根据XML配置文件的信息创建一个存储池

        pool-edit <pool-name or uuid>  编辑一个存储池的XML配置文件

        pool-destroy <pool-name or uuid>  关闭一个存储池

        pool-delete <pool-name or uuid>  删除一个存储池

        vol-list <pool-name or uuid>  查询一个存储池中的存储卷的信息

        vol-name <vol-key or path>  查询一个存储卷的名称

        vol-info --pool <pool> <vol-name or key>  查询一个存储卷的信息

        vol-path --pool <pool> <vol-name or key>  查询一个存储卷的路径

        vol-create <vol.xml>  根据XML配置文件创建一个存储池

        vol-clone <vol-name-path> <name>  克隆一个存储卷

        vol-delete <vol-name or key or path>  删除一个存储卷                                                        

4.  virt-manager

    使用Python语言开发的,用于管理虚拟机的图形化的软件。

    1.  安装virt-manager

        yum install virt-manager -y  

    2.  其他操作看另外一篇文章  

5.  virt-install命令工具

    1.  通用选项

        -n NAME, --name=NAME  虚拟机名称

        -r MEMORY, --ram=MEMORY  以MB为单位为客户端事件分配的内存

        --vcpus=VCPUS       配置虚拟机的虚拟CPU(vcpu)数量,如:

          --vcpus 5

          --vcpus 5, maxcpus=10

          --vcpus socket=2,cores=4,threads=2

        --cpuset=CPUSET     Set which physical CPUs domain can use.

        --cpu=CPU           CPU型号及功能,如:--cpu coreduo,+x2apic

        --description=DESCRIPTION  在生成的XML中保存的可读VM描述。

        --security=SECURITY      设定域安全驱动器配置。

        --numatune=NUMATUNE       为域进程调整NUMA策略。

    2.  安装方法选项

        -c CDROM, --cdrom=CDROM   光驱安装介质

        -l LOCATION, --location=LOCATION

          安装源(例如:nfs:host:/path、http://host/path、ftp://host/path)

        --pxe              使用 PXE 协议从网络引导

        --import            在磁盘映像中构建客户机

        --livecd            将光驱介质视为 Live CD

        -x EXTRA, --extra-args=EXTRA

          附加到使用--location引导的内核的参数

        --os-type=DISTRO_TYPE

          操作系统类型,'linux'、'unix'、'windows'

        --os-variant=DISTRO_VARIANT

          操作系统版本,如: 'fedora6','rhel5', 'solaris10', 'win2k'

        --boot=BOOTOPTS     自选配置后安装引导顺序、菜单、永久kernel引导,等等。

    3.  存储配置

        --disk=DISKOPTS     用各种选项指定存储。 Ex.

        --disk path=/my/existing/disk

        --disk path=/my/new/disk,format=qcow2,size=5,sparse (单位GB)

        --disk vol=poolname:volname,device=cdrom,bus=scsi,...

        --nodisks           不要为该客户端设置任何磁盘。

        --filesystem=FILESYSTEMS

          将主机目录传递给虚拟机。例如:

        --filesystem /my/source/dir,/dir/in/guest

        --filesystem template_name,/,type=template

    4.  网络配置

        -w NETWORK, --network=NETWORK

        配置客户网络接口。 Ex:

          --network bridge=mybr0

          --network network=my_libvirt_virtual_net

          --network network=mynet,model=virtio,mac=00:11...

          --nonetworks    不要为该客体创建网络接口。

    5.  图形配置

        --graphics=GRAPHICS

        配置虚拟机显示设置。例如:

          --graphics vnc

          --graphics spice,port=5901,tlsport=5902

          --graphics none

          --graphics vnc,password=foobar,port=5910,keymap=ja

          --noautoconsole     不要自动尝试连接到客户端控制台

    6.  其他设备

        --serial=SERIALS    配置虚拟机串口设备

        --parallel=PARALLELS   配置虚拟机并口设备

        --channel=CHANNELS    配置虚拟机沟通频道

        --console=CONSOLES    配置虚拟机与主机之间的文本控制台连接

        --host-device=HOSTDEVS    配置与客户相连的物理主机设备

        --soundhw=SOUNDHW      配置客户声音设备仿真

        --watchdog=WATCHDOG  配置虚拟机 watchdog 设备

        --video=VIDEO        配置虚拟机视频硬件。

        --smartcard=SMARTCARD   配置虚拟机智能卡设备。

        例如:--smartcard mode=passthrough

          --redirdev=REDIRDEV Configure a guest redirection device.

        例如:--redirdev usb,type=tcp,server=192.168.1.1:4000

                              

                                      

 

posted @ 2024-01-08 16:07  奋斗史  阅读(70)  评论(0)    收藏  举报