虚拟化进阶管理

Posted 陈乾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟化进阶管理相关的知识,希望对你有一定的参考价值。

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

 

以上是关于虚拟化进阶管理的主要内容,如果未能解决你的问题,请参考以下文章

Web应用的组件化进阶篇

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

云架构师进阶攻略

云架构师进阶攻略

Atom编辑器入门到精通 Atom使用进阶

docker入门到进阶一