zoukankan      html  css  js  c++  java
  • 虚拟化进阶管理

    libvirt工具栈详解

    支持的虚拟化技术

      KVM

      Xen

      LXC

      VMware

      Qemu

      OpenVZ

    libvirt组件

    常用libvirt工具

    virsh-manager 
    
        虚拟机图形化管理工具
    
    virsh-install
    
        能实现虚拟机的创建、安装
    
    virsh
    
        丰富的管理命令管理虚拟机
    
    guestfish
    
        磁盘映像文件API接口,在不挂载磁盘映像文件的前提的,修改文件内容
    
    guestmount
    
        无须挂载映像为即可使用
    
    virt-builder 
    
        快速构建、定制虚拟机
    
    virt-cat
    
        快速查看磁盘映像文件中的内容
    
    virt-customize
    
        定制磁盘映像文件
    
    virt-df
    
        磁盘映像文件空间查看
    
    virt-diff
    
        比较两个磁盘映像文件差异
    
    virt-edit
    
        编辑磁盘映像文件
    
    virt-filesystems
    
        发现文件系统、分区、管理卷等
    
    virt-log
    
        虚拟机日志
    
    virt-make-fs
    
        创建文件系统
    
    virt-rescue
    
        进入磁盘映像救援模式
    
    virt-resize
    
        修改磁盘映像文件大小,存储模式
    
    virt-top
    
        查看各虚拟机资源利用率情况
    
    virt-viewer
    
        虚拟机图形化管理功能
    
    wirt-what
    
        探测某程序是否运行在虚拟化环境中
    
    virt-xml-validate
    
        判断xml文件语法

    libvirt工具安装

    # CentOS6
    
    yum install -y libvirt libvirt-client python-virtinst virt-manager
    
    # CentOS7
    
    yum install -y libvirt libvirt-client virt-manager virt-install

    启动libvirtd服务

    1 systemctl start libvirtd

    libvirt和libvirtd配置文件

    # 库文件, master and agent all need
    
    libvirt配置文件     /etc/libvirt/libvirt.conf 
    
    守护进程配置文件    /etc/libvirt/libvirtd.conf

    virt-install

    简介

      它是一个命令行管理工具,它能够为KVM、Xen、或其他支持libvirt API的hypervisor创建虚拟机并完成GuestOS安装

      它能够基于串行控制台、VNC或SDL支持文件或图形化安装界面

    安装介质

      本地介质

        如CDROM

      通过网络方式,如NFS、HTTP或FTP服务实现

        virt-install可以自动加载必要文件以启动安装过程而无须额外提供引导工具

        也支持PXE安装

        还可以使用现有磁盘映像文件直接启动安装过程

    virt-install命令选项

    一般选项    指定虚拟机名称、内存大小、VCPU个数及其它特性等

    -n NAME, --name=NAME    虚拟名称,需要全局唯一
    
    -r MEMORY, --ram=MEMORY 虚拟机内存大小,单位为MB
    
    --vcpus=VCPUS[,maxvcpus=MAX][,socket=#][,cores=#][,threads=#]   VCPU个数
    
    --cpu=CPU   CPU模式及特性,如coreduo等
    
        可以使用qemu-kvm -cpu ? 来获取支持的CPU模式

    安装选项    指定安装方法、GuestOS类型

    -c CDROM, --cdrom=CDROM 指定光盘安装介质
    
    -l LOCATION, --location=LOCATION    安装源URL,支持FTP、HTTP及NFS等
    
        ftp://x.x.x.x/path
    
    --pxe 基于PXE完成安装
    
    --livecd    把光盘当作LiveCD
    
    --os-type = DISTRO_TYPE 操作系统类型,如linux、unix或windows等
    
    --os-variant = DISTRO_VARIANT   某类型操作系统的发行版本,如rhel5、fedora8等
    
    -x EXTRA, --extra-args = EXTRA  根据--location指定的方式安装GuestOS时,用于传递给内核的额外参数
    
        例如指定kickstart文件的位置, --extra-args "ks=http://x.x.x.x/file_path"
    
    --boot=BOOTOPTS 指定安装过程完成后的配置选项
    
        指定引导设备次序
        
        使用指定的而非安装的kernel/initrd来引导系统启动
    
        --boot cdrom,hd,network         指定引导次序
    
        --boot kernel = KERNEL,initr=INITRD,kernel_args="console=/dev/ttyS0"    指定启动系统的内核及initrd文件

    存储配置    指定存储类型、位置及属性等

    --disk = DISKOPTS   指定存储设备及其属性
    
        --disk /some/storage/path,opt1=var1,opt2=var2
    
        常用选项有
    
            device  设备类型,如cdrom、disk、floppy等,默认disk
    
            bus 磁盘总线类型,其值可以为ide、scsi、usb、virtio、或xen
    
            perms   访问权限,如rw、ro、sh(共享可读写),默认为rw
    
            size    新建磁盘映像文件大小、单位为GB
    
            cache   缓存类型、其值有none、writethrough、及writeback
    
            format  磁盘映像格式,例如raw、qcow2、vmdk等
    
            sparse  磁盘映像使用稀疏格式,即不立即分配指定大小的空间
    
    --nodisks   不使用本地磁盘,在LiveCD模式中使用

    网络配置    指定网络接口的网络类型及接口属性如MAC地址、驱动模式等

    -w  NETWORK, --network=NETWORK,opt1=var1,opt2=var2  将虚拟机连入宿主机的网络中
    
        其中NETWORK可以为
    
            bridge=BRIDGE   连接至名为BRIDGE的桥设备
    
            network=NAME    连接至名为NAME的网络
    
        其它常用的选项有
    
            model   GuestOS中看到网络设备型号,如e1000、rtl8139或virtio等
    
            mac     固定mac地址,省略此选项将使用随机地址,但无论哪种方式、对KVM来说,其产商标识符为52:54:00
    
    --nonetwork 虚拟机不使用网络功能

    图形配置    定义虚拟机显示功能相关的配置,如VNC相关配置

    --graphics  TYPE,opt1=var1,opt2=var2    指定图形显示相关的配置
    
        此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口
    
        TYPE 指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc
    
        port    TYPE为vnc或spice时,所监听的端口
    
        listen  TYPE为vnc或spice是,所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值
    
        password    TYPE为vnc或spice时,为远程访问监听的服务进行指定认证密码
    
    --noautoconsole 禁止自动连接至虚拟机的控制台

    设备选项    指定文本控制台、声音设备、串行接口、并行接口、显示接口等

    --serial=CHAROPTS   附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项
    
        --serial=TYPE,opt1=var1,opt2=var2
    
        --serial pty 创建伪终端
    
        --serial dev,path=HOSTPATH  附加主机设备至此虚拟机
    
        --video=VIDEO   指定显卡设备模型,可用取值为cirrus、vag、qxl或vmvga

    虚拟化平台   虚拟化模型(hvm或paravirt)、模拟的CPU平台类型、模拟的主机类型、hypervisor类型(如kvm、xen或qemu等)以及当前虚拟机的UUID等

    -v, --hvm   当物理机同时支持完全虚拟化和半虚拟化时,指定使用完全虚拟化
    
    -p, --paravirt  指定使用半虚拟化
    
    --virt-type 使用的hypervisor,如kvm、qemu、xen等
    
        所有可用值可以使用 virsh capabilities 命令获取

    其它

    --autostart 指定虚拟机是否在物理机启动后自动启动
    
    --print-xml 如果虚拟机不需要安装过程(--import、--boot)
    
        显示生成的XML而不是创建此虚拟机,默认情况下,此选项仍会创建磁盘映像
    
    --force 禁止进入交互模式,如果有需要回答yes or no,自动回答yes
    
    --dry-run   执行整个创建虚拟机的过程,并不真正创建虚拟机、改变主机上的设备配置信息及将其创建的需求通知给libvirt
    
    -d, --debug 显示debug信息

    PS

      尽管virt-install命令有着众多选项,但实际中,必须提供的选项仅包括

      --name、--ram、--disk及安装过程相关选项

      有时还需要使用--connect=CONNECT选项来指定连接至一个非默认的hypervisor

    virt-install使用实例

    实例一

    # 基本安装
    
    virt-install -n "centos6" -r 512 --vcpus=2 -l http://192.168.180.128/yum/centos6 
    
        -x "ks=http://192.168.168.180.128/centos6.x86_64.cfg" --disk path=/images/kvm/centos6.img,size=50G,sparse=yes 
    
        --force -w bridge=br0,model=virtio

    实例二

    # 下面这个实例创建一个名为rhel5的虚拟机,其hypervisor为KVM,内存大小为512MB,磁盘为8G的映像文件/var/lib/libvirt/images/rhel5.img,通过boot.iso光盘镜像来引导启动安装过程
    
    virt-install --connect qemu:///system --virt-type kvm --name rhel5 --ram 512 
    
        --disk path=/var/lib/libvirt/images/rhel5.img,size=8G 
    
        --graphics vnc --cdrom /tmp/boot.iso --os-variant rhel5

    实例三

    # 创建一个名为rhel6的虚拟机,其有两个虚拟CPU,安装方法为FTP,并指定了ks文件路径,磁盘映像文件为稀疏格式,连接至物理主机上的名为brnet0的桥接网络
    
                virt-install --connect qemu:///system --virt-type kvm --name rhel6 --ram 1024 
    
                    --vcpus 2 --network bridge=brnet0 --disk path=/iamges/kvm/rhel6.img,size=50G,sparse=yes 
    
                    --location ftp://192.168.180.128/rhel/dvd --extra_args "ks=http://192.168.180.128/rhel6.cfg" 
    
                    --os-variant rhel6 --force 

    实例四

    # 创建一个名为rhel5的虚拟机,磁盘映像文件为稀疏模式,磁盘映像文件格式为qcow2且总线类型为virtio,安装过程不启动图形界面,
    
    # 但会启动一个串行终端将安装过程以字符形式显示在当前文本模式下,虚拟机显卡类型为cirrus
    
    virt-install --connect qemu:///system --virt-type kvm --name rhel5 --ram 512 
    
        --vcpus 2,maxvcpus=4 --disk path=/images/kvm/rhel5.8.img,size=50G,format=qcow2,bus=virtio,sparse=yes 
    
        --network bridge=brnet0,model=virio --nographics --location ftp://192.168.180.128/pub 
    
        --extra-agrs "ks=http://192.168.180.128/rhel5.8.cfg console=ttyS0 serial" 
    
        --os-variant rhel5 --force --video=cirrus

    实例五

    # 利用已经存在的磁盘映像文件(已经安装好的系统)创建一个名为rhel5.8的虚拟机
    
    virt-install --name rhel5.8 --ram 512 --disk /iamges/kvm/rhel5.8.img --import 
    
    # 添加一个物理终端,并添加控制台到终端设备上
    
    virt-install --name rhel5.8 --ram 512 --disk /iamges/kvm/rhel5.8.img --import --serial=pty --console=pty --nographics
    
    # 回到原终端 " Ctrl + ] "
    
    # 重新连接
    
        virsh console Domain_ID

    PS

      每个虚拟机创建后,其配置信息保存在/etc/libvirt/qemu目录中,文件名与虚拟机相同,格式为XML

    virsh工具使用

    帮助

    virsh help
    
    man virsh
    
    virsh help <options>

    命令解析

    Domain Management (help keyword 'domain'):
        * attach-device                从一个XML文件附加装置
        * attach-disk                  附加磁盘设备
        * attach-interface             获得网络界面
        autostart                      自动开始一个域
        blkdeviotune                   设定或者查询块设备 I/O 调节参数。
        blkiotune                      获取或者数值 blkio 参数
        blockcommit                    启动块提交操作。
        blockcopy                      启动块复制操作。
        blockjob                       管理活跃块操作
        blockpull                      使用其后端映像填充磁盘。
        blockresize                    创新定义域块设备大小
        change-media                   更改 CD 介质或者软盘驱动器
        * console                      连接到客户会话
        cpu-baseline                   计算基线 CPU
        cpu-compare                    使用 XML 文件中描述的 CPU 与主机 CPU 进行对比
        * cpu-stats                    显示域 cpu 统计数据
        * create                       从一个 XML 文件创建一个域
        define                         从一个 XML 文件定义(但不开始)一个域
        desc                           显示或者设定域描述或者标题
        * destroy                      销毁(停止)域
        * detach-device                从一个 XML 文件分离设备
        * detach-disk                  分离磁盘设备
        * detach-interface             分离网络界面
        domdisplay                     域显示连接 URI
        domfsfreeze                    Freeze domain's mounted filesystems.
        domfsthaw                      Thaw domain's mounted filesystems.
        domfsinfo                      Get information of domain's mounted filesystems.
        domfstrim                      在域挂载的文件系统中调用 fstrim。
        domhostname                    输出域主机名
        domid                          把一个域名或 UUID 转换为域 id
        domif-setlink                  设定虚拟接口的链接状态
        domiftune                      获取/设定虚拟接口参数
        domjobabort                    忽略活跃域任务
        domjobinfo                     域任务信息
        domname                        将域 id 或 UUID 转换为域名
        domrename                      rename a domain
        dompmsuspend                   使用电源管理功能挂起域
        dompmwakeup                    从 pmsuspended 状态唤醒域
        domuuid                        把一个域名或 id 转换为域 UUID
        domxml-from-native             将原始配置转换为域 XML
        domxml-to-native               将域 XML 转换为原始配置
        dump                           把一个域的内核 dump 到一个文件中以方便分析
        * dumpxml                      XML 中的域信息
        edit                           编辑某个域的 XML 配置
        event                          Domain Events
        inject-nmi                     在虚拟机中输入 NMI
        iothreadinfo                   view domain IOThreads
        iothreadpin                    control domain IOThread affinity
        iothreadadd                    add an IOThread to the guest domain
        iothreaddel                    delete an IOThread from the guest domain
        send-key                       向虚拟机发送序列号
        send-process-signal            向进程发送信号
        lxc-enter-namespace            LXC 虚拟机进入名称空间
        managedsave                    管理域状态的保存
        managedsave-remove             删除域的管理保存
        memtune                        获取或者数值内存参数
        perf                           Get or set perf event
        metadata                       show or set domain's custom XML metadata
        migrate                        将域迁移到另一个主机中
        migrate-setmaxdowntime         设定最大可耐受故障时间
        migrate-compcache              获取/设定压缩缓存大小
        migrate-setspeed               设定迁移带宽的最大值
        migrate-getspeed               获取最长迁移带宽
        migrate-postcopy               Switch running migration from pre-copy to post-copy
        numatune                       获取或者数值 numa 参数
        qemu-attach                    QEMU 附加
        qemu-monitor-command           QEMU 监控程序命令
        qemu-monitor-event             QEMU Monitor Events
        qemu-agent-command             QEMU 虚拟机代理命令
        * reboot                       重新启动一个域
        reset                          重新设定域
        * restore                      从一个存在一个文件中的状态恢复一个域,重新继续运行
        * resume                       重新恢复一个域
        * save                         把一个域的状态保存到一个文件,挂起
        save-image-define              为域的保存状态文件重新定义 XML
        save-image-dumpxml             在 XML 中保存状态域信息
        save-image-edit                为域保存状态文件编辑 XML
        schedinfo                      显示/设置日程安排变量
        screenshot                     提取当前域控制台快照并保存到文件中
        set-user-password              set the user password inside the domain
        * setmaxmem                    改变最大内存限制值
        * setmem                       改变内存的分配
        * setvcpus                     改变虚拟 CPU 的号
        * shutdown                     关闭一个域
        * start                        开始一个(以前定义的)非活跃的域
        * suspend                      挂起一个域
        ttyconsole                     tty 控制台
        undefine                       取消定义一个域
        update-device                  从 XML 文件中关系设备
        * vcpucount                    域 vcpu 计数
        * vcpuinfo                     详细的域 vcpu 信息
        * vcpupin                      控制或者查询域 vcpu 亲和性
        emulatorpin                    控制火车查询域模拟器亲和性
        * vncdisplay                   vnc 显示
        guestvcpus                     query or modify state of vcpu in the guest (via agent)
        setvcpu                        attach/detach vcpu or groups of threads
        domblkthreshold                set the threshold for block-threshold event for a given block device or it's backing chain element
    
    Domain Monitoring (help keyword 'monitor'):
        domblkerror                    在块设备中显示错误
        domblkinfo                     域块设备大小信息
        * domblklist                   列出所有域块
        domblkstat                     获得域设备块状态
        domcontrol                     域控制接口状态
        domif-getlink                  获取虚拟接口链接状态
        domifaddr                      Get network interfaces' addresses for a running domain
        * domiflist                    列出所有域虚拟接口
        domifstat                      获得域网络接口状态
        * dominfo                      域信息
        dommemstat                     获取域的内存统计
        * domstate                     域状态
        * domstats                     get statistics about one or multiple domains
        * domtime                      domain time
        * list                         列出域
    
    Host and Hypervisor (help keyword 'host'):
        allocpages                     Manipulate pages pool size
        * capabilities                 性能
        * cpu-models                   CPU models
        domcapabilities                domain capabilities
        freecell                       NUMA可用内存
        freepages                      NUMA free pages
        hostname                       打印管理程序主机名
        * maxvcpus                     连接 vcpu 最大值
        node-memory-tune               获取或者设定节点内存参数
        nodecpumap                     节点 cpu 映射
        nodecpustats                   输出节点的 cpu 状统计数据。
        * nodeinfo                     节点信息
        nodememstats                   输出节点的内存状统计数据。
        nodesuspend                    在给定时间段挂起主机节点
        * sysinfo                      输出 hypervisor sysinfo
        * uri                          打印管理程序典型的URI
        * version                      显示版本
    
    Interface (help keyword 'interface'):
        iface-begin                    生成当前接口设置快照,可在今后用于提交 (iface-commit) 或者恢复 (iface-rollback)
        * iface-bridge                 生成桥接设备并为其附加一个现有网络设备
        iface-commit                   提交 iface-begin 后的更改并释放恢复点
        * iface-define                 定义(但不启动)XML文件中的物理主机接口
        * iface-destroy                删除物理主机接口(启用它请执行 "if-down"* iface-dumpxml                XML 中的接口信息
        iface-edit                     为物理主机界面编辑 XML 配置
        * iface-list                   物理主机接口列表
        iface-mac                      将接口名称转换为接口 MAC 地址
        iface-name                     将接口 MAC 地址转换为接口名称
        iface-rollback                 恢复到之前保存的使用 iface-begin 生成的更改
        * iface-start                  启动物理主机接口(启用它请执行 "if-up"* iface-unbridge               分离其辅助设备后取消定义桥接设备
        * iface-undefine               取消定义物理主机接口(从配置中删除)
    
    Network Filter (help keyword 'filter'):
        * nwfilter-define              使用 XML 文件定义或者更新网络过滤器
        * nwfilter-dumpxml             XML 中的网络过滤器信息
        * nwfilter-edit                为网络过滤器编辑 XML 配置
        * nwfilter-list                列出网络过滤器
        * nwfilter-undefine            取消定义网络过滤器
    
    Networking (help keyword 'network'):
        net-autostart                  自动开始网络
        net-create                     从一个 XML 文件创建一个网络
        net-define                     define an inactive persistent virtual network or modify an existing persistent one from an XML file
        net-destroy                    销毁(停止)网络
        net-dhcp-leases                print lease info for a given network
        net-dumpxml                    XML 中的网络信息
        net-edit                       为网络编辑 XML 配置
        net-event                      Network Events
        net-info                       网络信息
        * net-list                     列出网络
        net-name                       把一个网络UUID 转换为网络名
        net-start                      开始一个(以前定义的)不活跃的网络
        net-undefine                   undefine a persistent network
        net-update                     更新现有网络配置的部分
        net-uuid                       把一个网络名转换为网络UUID
    
    Node Device (help keyword 'nodedev'):
        nodedev-create                 根据节点中的 XML 文件定义生成设备
        nodedev-destroy                销毁(停止)节点中的设备
        nodedev-detach                 将节点设备与其设备驱动程序分离
        nodedev-dumpxml                XML 中的节点设备详情
        nodedev-list                   这台主机中中的枚举设备
        nodedev-reattach               重新将节点设备附加到他的设备驱动程序中
        nodedev-reset                  重置节点设备
        nodedev-event                  Node Device Events
    
    Secret (help keyword 'secret'):
        secret-define                  定义或者修改 XML 中的 secret
        secret-dumpxml                 XML 中的 secret 属性
        secret-event                   Secret Events
        secret-get-value               secret 值输出
        secret-list                    列出 secret
        secret-set-value               设定 secret 值
        secret-undefine                取消定义 secret
    
    Snapshot (help keyword 'snapshot'):
        * snapshot-create              使用 XML 生成快照
        snapshot-create-as             使用一组参数生成快照
        snapshot-current               获取或者设定当前快照
        * snapshot-delete              删除域快照
        snapshot-dumpxml               为域快照转储 XML
        * snapshot-edit                编辑快照 XML
        * snapshot-info                快照信息
        * snapshot-list                为域列出快照
        snapshot-parent                获取快照的上级快照名称
        snapshot-revert                将域转换为快照
    
    Storage Pool (help keyword 'pool'):
        find-storage-pool-sources-as   找到潜在存储池源
        find-storage-pool-sources      发现潜在存储池源
        pool-autostart                 自动启动某个池
        pool-build                     建立池
        pool-create-as                 从一组变量中创建一个池
        pool-create                    从一个 XML 文件中创建一个池
        pool-define-as                 在一组变量中定义池
        pool-define                    define an inactive persistent storage pool or modify an existing persistent one from an XML file
        pool-delete                    删除池
        pool-destroy                   销毁(删除)池
        pool-dumpxml                   XML 中的池信息
        pool-edit                      为存储池编辑 XML 配置
        pool-info                      存储池信息
        pool-list                      列出池
        pool-name                      将池 UUID 转换为池名称
        pool-refresh                   刷新池
        pool-start                     启动一个(以前定义的)非活跃的池
        pool-undefine                  取消定义一个不活跃的池
        pool-uuid                      把一个池名称转换为池 UUID
        pool-event                     Storage Pool Events
    
    Storage Volume (help keyword 'volume'):
        vol-clone                      克隆卷。
        vol-create-as                  从一组变量中创建卷
        vol-create                     从一个 XML 文件创建一个卷
        vol-create-from                生成卷,使用另一个卷作为输入。
        vol-delete                     删除卷
        vol-download                   将卷内容下载到文件中
        vol-dumpxml                    XML 中的卷信息
        vol-info                       存储卷信息
        vol-key                        为给定密钥或者路径返回卷密钥
        vol-list                       列出卷
        vol-name                       为给定密钥或者路径返回卷名
        vol-path                       为给定密钥或者路径返回卷路径
        vol-pool                       为给定密钥或者路径返回存储池
        vol-resize                     创新定义卷大小
        vol-upload                     将文件内容上传到卷中
        vol-wipe                       擦除卷
    
    Virsh itself (help keyword 'virsh'):
        cd                             更改当前目录
        echo                           echo 参数
        exit                           退出这个非交互式终端
        help                           打印帮助
        pwd                            输出当前目录
        quit                           退出这个非交互式终端
        connect                        连接(重新连接)到 hypervisor

    KVM Managerment Tools

      http://www.linux-kvm.org/page/Management_Tools

    常用

    oVirt   较轻量
    
    ConVirt
    
    Eucalyptus
    
    OpenNebula
    
    openQRM
  • 相关阅读:
    git注册和基本命令
    thinkphp概述2
    thinkphp概述
    PHP基础知识总结
    phpmyadmin教程
    开发环境wamp3.06 + Zend studio 12 调试配置
    PHP标记风格,编码规范
    PHP开发工具 zend studio
    php与ajax技术
    可变参模板template
  • 原文地址:https://www.cnblogs.com/cq146637/p/8947586.html
Copyright © 2011-2022 走看看