zoukankan      html  css  js  c++  java
  • kvm libvirt 虚拟机管理

    http://www.2cto.com/os/201203/123128.html

    kvm虚拟机管理
    一、环境
    role         hostname    ip                  OS
    kvm_server   target      192.168.32.40/24    rhel6.0_x64
    vir_guest1   node4       192.168.32.34/24    rhel5.5_i386
    vir_guest2   node5       192.168.32.35/24    rhel5.5_i386
    manager      manager     192.168.32.33/24    rhel5.5_i386
    ESXi         ESXi        192.168.2.251/24    ESXi 3.5
    二、安裝kvm
    [root@target ~]# yum install -y qemu-kvm.x86_64 qemu-kvm-tools.x86_64  #安装kvm内核
    [root@target ~]# yum install libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch  libvirt-python.x86_64 #安装virt管理工具
    [root@target ~]# modprobe kvm         #加载kvm内核
    [root@target ~]# modprobe kvm-intel   #intel cpu加载kvm-intel内核,要支持全虚拟化,必须开启;要求cpu支持,通过bios可设置。
    [root@target ~]# modprobe kvm-amd     #amd cpu加载kvm-intel

    [root@target ~]# modprobe -ls | grep kvm   #查看内核是否开启
    kernel/arch/x86/kvm/kvm.ko
    kernel/arch/x86/kvm/kvm-intel.ko
    kernel/arch/x86/kvm/kvm-amd.ko
    [root@target ~]# modprobe -ls | grep kvm-intel
    kernel/arch/x86/kvm/kvm-intel.ko

    三、安装guest虚拟机
    1、直接通过virt-manager安装、管理虚拟机(略)

    2、通过命令行安装guest虚拟机
    [root@target ~]# yum install virt-viewer   #开启图形控制台安装虚拟客户机需要,
    [root@target ~]# virt-install             #安装选项可用virt-install --help查看
    --name node4            #虚拟机名
    --ram=1024              #分配内存大小,MB
    --arch=x86_64           #模拟的CPU 构架
    --vcpus=1               #配置虚拟机的vcpu 数目
    --check-cpu             #检查确定vcpu是否超过物理 CPU数目,如果超过则发出警告。
    --os-type=linux         #要安装的操作系统类型,例如:'linux'、'unix'、'windows'
    --os-variant=rhel5      #操作系统版本,如:'fedora6', 'rhel5', 'solaris10', 'win2k'
    --disk path=/virhost/node7.img,device=disk,bus=virtio,size=20,sparse=true    #虚拟机所用磁盘或镜像文件,size大小G
    --bridge=br0            #指定网络,采用透明网桥
    --noautoconsole         #不自动开启控制台
    --pxe                    #网络安装

    四、利用virsh对虚拟机管理
    1、开关机
    [root@target ~]# virsh start node4      #开机
    [root@target ~]# virsh create /etc/libvirt/qemu/node4.xml #直接通过主机配置文档启动主机
    [root@target ~]# virsh shutdown node4   #关机
    [root@target ~]# virsh destroy node4    #强制关闭电源
    [root@target ~]# virsh list --all       #查看虚拟机状态         
     Id 名称               状态
    ----------------------------------
     18 node4                running
      - node5                关闭
      - win8                 关闭

    2、添加删除虚拟机
    [root@target ~]# virsh define /etc/libvirt/qemu/node5.xml   #根据主机配置文档添加虚拟机
    [root@target ~]# virsh list --all        #node5已经添加
     Id 名称               状态
    ----------------------------------
     18 node4                running
      - node5                关闭
      - win8                 关闭
     
    [root@target ~]# virsh undefine node5     #移除虚拟机
    [root@target ~]# ls /etc/libvirt/qemu
    networks  node4.xml  win8.xml
    [root@target ~]# virsh list --all         #node5已经被移除
     Id 名称               状态
    ----------------------------------
     18 node4                running
      - win8                 关闭

    3、远程管理虚拟机(qemu+ssh连接)
    [root@target ~]# yum install virt-viewer
    [root@target ~]# export DISPLAY=192.168.40.18:0.0
    [root@target ~]# virt-viewer -c qemu///system node4                          #本地管理虚拟机,system:获取system权限,注意qemu后是三个/
    [root@manager ~]# virt-viewer -c qemu+ssh://root@192.168.32.40/system node4  #远程linux通过virt-viewer+ssh管理虚拟机
    Xlib:  extension "RANDR" missing on display "192.168.40.18:0.0".
    root@192.168.32.40's password:
    root@192.168.32.40's password:
    #会弹出virt-viwer的gtk管理界面

    4、使用已存在的虚拟机配置文档安裝新的虚拟机
    [root@target ~]# qemu-img create -f qcow2 /virhost/kvm_node/node6.img 20G
    #为新建虚拟机生产磁盘镜像文件

    [root@target ~]# virsh list
     Id 名称               状态
    ----------------------------------
     18 node4                running

    [root@target ~]# virsh dumpxml node4 >/etc/libvirt/qemu/node6.xml
    #导出虚拟机node6的硬件配置信息为/etc/libvirt/qemu/node6.xml

    [root@target ~]# vim /etc/libvirt/qemu/node6.xml 
    <domain type='kvm' id='20'>    #修改node6的id号
      <name>node6</name>           #虚拟机node6的name
      <uuid>4b7e91eb-6521-c2c6-cc64-c1ba72707fc7</uuid>  #uuid必须修改,否则会和node4的冲突
      <memory>524288</memory>
      <currentMemory>524288</currentMemory>
      <vcpu>1</vcpu>
      <os>
        <type arch='x86_64' machine='rhel5.4.0'>hvm</type>
        <boot dev='network'/>
      </os>
      <features>
        <acpi/>
        <apic/>
        <pae/>
      </features>
      <clock offset='utc'/>
      <on_poweroff>destroy</on_poweroff>
      <on_reboot>restart</on_reboot>
      <on_crash>restart</on_crash>
      <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' cache='none'/>
          <source file='/virhost/node4.img'/>         #指定新虚拟机的硬盘文件
          <target dev='vda' bus='virtio'/>
        </disk>
        <interface type='bridge'>
          <mac address='54:52:00:69:d5:c7'/>
          <source bridge='br0'/>
          <target dev='vnet0'/>
          <model type='virtio'/>
        </interface>
        <interface type='bridge'>
          <mac address='54:52:00:69:d5:d7'/>
          <source bridge='br0'/>
          <target dev='vnet1'/>
          <model type='virtio'/>
        </interface>
        <serial type='pty'>
          <source path='/dev/pts/4'/>
          <target port='0'/>
        </serial>
        <console type='pty' tty='/dev/pts/4'>
          <source path='/dev/pts/4'/>
          <target port='0'/>
        </console>
        <input type='mouse' bus='ps2'/>
        <graphics type='vnc' port='5900' autoport='yes' keymap='en-us'/>
      </devices>
    </domain>

    [root@target ~]# virsh define /etc/libvirt/qemu/node6.xml
    #使用虚拟描述文档建立虚拟机,可用virsh edit node6修改node6的配置文件

    [root@target ~]# virsh start node6
    #启动虚拟机

    5 为虚拟机开启vnc
    [root@target ~]# virsh edit node4     #编辑node4的配置文件;不建议直接通过vim node4.xml修改。
    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='en-us'/>
       #port='-1' autoport='yes':port自动分配,监听回环网络(virt-manager管理需要listen='127.0.0.1'),无密码
    改为
    <graphics type='vnc' port='5904' autoport='no' listen='0.0.0.0' keymap='en-us' passwd='xiaobai'/>
       #固定vnc管理端口5904,不自动分配,vnc密码xiaobai,监听所有网络

    2. 远程vnc访问地址:192.168.32.40:5904

    五、存储池和存储卷的管理
    1.创建 KVM主机存储池
    1).创建基于文件夹(目录)的存储池
    [root@target virhost]# virsh pool-define-as vmware_pool --type dir --target /virhost/vmware
    #定义存储池vmware_pool

    [root@target virhost]# virsh pool-create-as --name vmware_pool --type dir --target /virhost/vmware    
    #创建存储池vmware_pool,类型为文件目录,/virhost/vmware,与pool-define-as结果一样

    2).创建基于文件系统的存储池
    [root@target virhost]#virsh pool-define-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware

    [root@target virhost]#virsh pool-create-as --name vmware_pool --type fs --source-dev /dev/vg_target/LogVol02 --source-format ext4 --target /virhost/vmware

    3).查看存储池信息
    [root@target virhost]# virsh pool-info vmware_pool  #查看存储域(池)信息
    名称:       vmware_pool
    UUID:           2e9ff708-241f-fd7b-3b57-25df273a55db
    状态:       running
    Persistent:     no
    自动启动: no
    容量:       98.40 GB
    分配:       18.39 GB
    可用:       80.01 GB
    4).启动存储池
    [root@target virhost]# virsh pool-start vmware_pool   #启动存储池
    [root@target virhost]# virsh pool-list
    名称               状态     自动开始
    -----------------------------------------
    default              活动     yes      
    virhost              活动     yes      
    vmware_pool          活动     no
    5)销毁存储域,取消存储池
    [root@target virhost]# virsh pool-destroy vmware_pool  #销毁存储池
    [root@target virhost]# virsh pool-list --all
    名称               状态     自动开始
    -----------------------------------------
    default              活动     yes      
    virhost              活动     yes      
    vmware_pool          不活跃  no         
    [root@target virhost]# virsh pool-undefine vmware_pool  #取消存储池的定义
    [root@target virhost]# virsh pool-list --all          
    名称               状态     自动开始
    -----------------------------------------
    default              活动     yes      
    virhost              活动     yes 

    2.创建了存储池后,就可以创建一个卷,这个卷是用来做虚拟机的硬盘
    [root@target virhost]# virsh vol-create-as --pool vmware_pool --name node6.img --capacity 10G --allocation 1G --format qcow2
    #创建卷 node6.img,所在存储池为vmware_pool,容量10G,初始分配1G,文件格式类型qcow2

    [root@target virhost]# virsh vol-info /virhost/vmware/node6.img  #查看卷信息
    名称:       node6.img
    类型:       文件
    容量:       10.00 GB
    分配:       136.00 KB

    3.在存储卷上安装虚拟主机
    [root@target virhost]#virt-install --connect qemu:///system
    -n node7
    -r 512
    -f /virhost/vmware/node7.img
    --vnc
    --os-type=linux
    --os-variant=rhel6 
    --vcpus=1
    --network bridge=br0
    -c /mnt/rhel-server-6.0-x86_64-dvd.iso

    六、虚拟机的迁移(vmware 2 kvm)
    1.安装软件
    [root@target ~]# yum install -y virt-v2v.x86_64
    [root@target ~]# rpm -ivh libguestfs-winsupport-1.0-7.el6.x86_64.rpm  virtio-win-1.2.0-1.el6.noarch.rpm 
    #虚拟机为windows时需要libguestfs-winsupport 包来支持 NTFS 文件系统和 virtio-win 包来支持 Windows para-virtualized 存储和网络设备驱动

    2.创建 KVM 主机存储域(略)
    virt-v2v 在迁移虚拟机的过程中,需要拷贝被迁移虚拟机到 KVM 主机预先定义的存储池中。

    3.创建 KVM 主机网络接口(略)
    虚拟机在迁移之后将连接 KVM 主机网络, 因此主机必须有一个与之相匹配的网络接口,比如说网桥。

    4.在 KVM 主机上创建或修改 $HOME/.netrc 文件,添加 VMware ESXi 服务器的用户名和密码。
    [root@target ~]# cat ~/.netrc
    machine 192.168.2.251 login root password xxxxxx
    [root@target ~]# chmod 0600 ~/.netrc

    5.Vmware ESXi到KVM的迁移
    [root@target ~]# virt-v2v -ic esx://192.168.2.251/?no_verify=1 -op virhost -b br0 ipserver  
    ** HEAD https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak%3Astorage1 ==> 401 Unauthorized
    ** HEAD https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak%3Astorage1 ==> 200 OK
    ** GET https://192.168.2.251/folder/tserver21/RHEL4.6-flat.vmdk?dcPath=ha-datacenter&dsName=ESX35-bak%3Astorage1 ==> 200 OK (2084s)
    unknown filesystem /dev/hda
    unknown filesystem /dev/fd0
    virt-v2v: Installation failed because the following files referenced in the configuration file are required, but missing: rhel/4/kernel-smp-2.6.9-89.EL.i686.rpm
    virt-v2v: 非 virtio 驱动程序配置的 tserver21

    #所有选项可通过配置文件/etc/virt-v2v.conf来指定
    #-op:指定用于转换后的存储域(pool),virhost
    #-b:指定网络为网桥br0
    #-ic:指定要转换的源地址

    [root@target kvm_node]# virsh list --all
     Id 名称               状态
    ----------------------------------
      1 node4                running
      - node5                关闭
      - tserver21            关闭
      - win8                 关闭
    [root@target kvm_node]# virsh start tserver21

    6.KVM到KVM迁移
    [root@target kvm_node]# virt-v2v -ic qemu+ssh://192.168.32.179/system -op virhost -b br0 node6
    root@192.168.32.179's password:
    root@192.168.32.179's password:
    unknown filesystem label SWAP-vda3
    virt-v2v: The connected hypervisor does not support a machine type of rhel5.4.0. It will be set to the current default.
    virt-v2v: virtio 驱动程序配置的 node6

    [root@target kvm_node]# virsh list --all
     Id 名称               状态
    ----------------------------------
      1 node4                running
      - node5                关闭
      - node6                关闭
      - tserver21            关闭
      - win8                 关闭

    [root@target kvm_node]# virsh start node6


    本文来自于 netsword 的BLOG

  • 相关阅读:
    Java拾遗补缺
    Spring boot整合shiro权限管理
    Maven项目使用阿里云的Maven库
    Spring Boot设置上传文件大小
    mysql悲观锁中的共享锁和排他锁
    MySQL命令show full processlist
    log4j配置文件中的additivity属性
    每天一个liunx命令2之rz和sz命令
    数据库锁表及阻塞的原因和解决办法
    Java加密技术(一)—— HMACSHA1 加密算法
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5420231.html
Copyright © 2011-2022 走看看