zoukankan      html  css  js  c++  java
  • kvm的使用(2)

    一、远程管理kvm虚机

    (2)有些情况下,有一个要配置的地方。 因为 KVM(准确说是 Libvirt)默认不接受远程管理,需要按下面的内容配置被管理宿主机中的两个文件:

    vim /etc/default/libvirt-bin
    start_libvirtd="yes"
    libvirtd_opts="-d -l"

    vim /etc/libvirt/libvirtd.conf
    listen_tls = 0
    listen_tcp = 1
    unix_sock_group = "libvirtd"
    unix_sock_ro_perms = "0777"
    unix_sock_rw_perms = "0770"
    auth_unix_ro = "none"
    auth_unix_rw = "none"
    auth_tcp = "none"

    然后重启 Libvirtd 服务就可以远程管理了。
    systemctl restart libvirt-bin

    二、virsh命令行下管理虚拟机

    virsh既有命令行模式,又有交互模式;在命令行直接输入virsh就进入交互模式,virsh后面跟命令参数,则是命令行模式。

      (1)基础命令:

        virsh help:列出命令下的所有参数

        virsh list help : 列出list命令下的所有参数

        virsh list : 列出当前宿主机处于运行状态的虚拟机

        virsh list --all : 列出当前宿主机上所有的虚拟机

        virsh start 虚拟机名 : 开启某一台虚拟机

        virsh shutdown 虚拟机名 : 正常关闭某一台虚拟机

        virsh destroy 虚拟机名 : 强制关闭某一台虚拟机

        virsh autostart 虚拟机名 : 开机自启动虚拟机

        virsh autostart --disable 虚拟机名 : 关闭开机自启动

        virsh edit 虚拟机名 : 编辑某个虚拟机的配置文件

        virsh pool-list : 列出存储池

        virsh define                 从一个 XML 文件定义(但不开始)一个域
        virsh undefine             删除一个虚机域

        


    创建一个大小为9G的,格式为qcow2的磁盘镜像 [root@localhost
    ~]# qemu-img create -f qcow2 -o size=9G /var/lib/libvirt/images/test3.qcow2 Formatting '/var/lib/libvirt/images/test3.qcow2', fmt=qcow2 size=9663676416 encryption=off cluster_size=65536 lazy_refcounts=off 查看磁盘信息 [root@localhost ~]# qemu-img info /var/lib/libvirt/images/test3.qcow2 image: /var/lib/libvirt/images/test3.qcow2 file format: qcow2 格式 virtual size: 9.0G (9663676416 bytes) 大小 disk size: 196K 使用大小 cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false

    【注意】disk size: 196K 这里不是9G的原因是:这里采用了精简置备(主机像磁盘宣告所需空间大小,随着使用慢慢增长,但是不能超过磁盘提供的最大空间,也就是用多少拿多少)
        与之相对应的就是厚置备(给多少就占多少空间),类似与数据库中的char和varchar;厚置备会浪费资源。
    克隆一台虚拟机
    [root@localhost
    ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - 003 关闭 - test1 关闭 [root@localhost ~]# yum install -y virt* [root@localhost ~]# virt-clone -o test1 -n test2 -f /var/lib/libvirt/images/test2.qcow2 正在分配 'test2.qcow2' | 9.0 GB 00:00:15 成功克隆 'test2'。 [root@localhost ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - 003 关闭 - test1 关闭 - test2 关闭

    三、kvm通过 virsh console 进入虚拟机

      开启虚拟机的console功能就可以通过命令在远端进入虚拟机了,这里就不赘述centos7以前的版本了,以下介绍centos7以后版本使用console进入虚拟机。

    ①查看是否可以连接
    [root@localhost ~]# virsh console test1
    连接到域 test1
    换码符为 ^]
    ②在虚拟机上进行以下操作并重启
    [root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0"
    [root@localhost ~]# reboot
    ③在宿主机上进入虚拟机 [root@localhost ~]# virsh console test1 连接到域 test1
    CentOS Linux 7 (Core)
    Kernel 3.10.0-514.el7.x86_64 on an x86_64

    localhost login: root
    密码:
    Last login: Tue May 28 19:04:13 on tty1
    ④退出
    ctrl+]

    四、kvm虚拟化透传

    KVM 虚拟化需要处理器对虚拟化技术的支持,当我们需要进行虚拟机嵌套虚拟机时,我们需要让虚拟机中处理器对 VT 功能的支持达到透传的效果。

    nested 虚拟机嵌套( kvm on kvm ):nested 技术,简单的说,就是在虚拟机上跑虚拟机

    KVM 虚拟机嵌套和 VMWare 原理不同, VMWare第一层是用的硬件虚拟化技术,第二层就是完全软件模拟出来的,所以 VMWare 只能做两层嵌套。 KVM 是将物理 CPU 的特性全部传给虚拟机,所有理论上可以嵌套 N 多层。

    ①查看一层虚拟机是否支持VT
    [root@localhost ~]# egrep "(vmx|svm)" /proc/cpuinfo 
    [root@localhost ~]# 
    ②在宿主机上为嵌套虚拟机做准备---cpu虚拟化透传 [root@localhost
    ~]# cat /etc/modprobe.d/kvm-nested.conf
    options kvm_intel nested=1 #在宿主机上启用kvm_intel的嵌套虚拟化功能,并使透传永久起效
    ③重新加载kvm模块 [root@localhost ~]# modprobe -r kvm_intel modprobe: FATAL: Module kvm_intel is in use. 原因是虚拟机没有关机 [root@localhost ~]# modprobe -r kvm_intel [root@localhost ~]# lsmod | grep kvm [root@localhost ~]# modprobe kvm_intel [root@localhost ~]# lsmod | grep kvm kvm_intel 170181 0 kvm 554609 1 kvm_intel irqbypass 13503 1 kvm
    ④验证是否加载成功 [root@localhost
    ~]# cat /sys/module/kvm_intel/parameters/nested Y #Y表示虚拟化透传功能开启
    ⑤编辑需要做虚拟化透传的虚拟机配置文件 [root@localhost
    ~]# virsh edit 003 <cpu mode='host-passthrough'/>
    ⑥在虚拟机中查看cpu是否透传成功
    [root@localhost ~]# lsmod | grep kvm
    kvm_intel             170181  0
    kvm                   554609  1 kvm_intel
    irqbypass              13503  1 kvm
    ⑦在一层虚拟机中查看是否支持虚拟化
    [root@localhost ~]# grep vmx /proc/cpuinfo
    flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap xsaveopt


    五、kvm存储虚拟化

       1.介绍    

        KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的。

        Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种型;

        Volume 是在 Storage Pool 中划分出的一块空间,宿主机将 Volume 分配给虚拟机,Volume 在虚拟机中看到的就是一块硬盘。

       2.目录类型的storage pool

        文件目录是最常用的 Storage Pool 类型。KVM 将宿主机目录 /var/lib/libvirt/images/ 作为默认的 Storage Pool

        Volume 是该目录下面的文件,一个文件就是一个 Volume。

       3.创建volume卷,

    在虚拟机查看添加的卷

        4.创建存储池pool

     

     kvm默认/var/lib/libvirt/images目录为存储池。

    那 KVM 是怎么知道要把 /var/lib/libvirt/images 这个目录当做默认 Storage Pool 的呢?
    实际上 KVM 所有可以使用的 Storage Pool 都定义在宿主机的 /etc/libvirt/storage 目录下,每个 Pool 一个 xml 文件,

    存储池的配置文件存放的位置
    [root@localhost ~]# cd /etc/libvirt/storage
    [root@localhost storage]# cat default.xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh pool-edit default or other application using the libvirt API. --> <pool type='dir'> <name>default</name> <uuid>623b2eaa-3f05-4c50-b5b8-bdd52f16a936</uuid> <capacity unit='bytes'>0</capacity> <allocation unit='bytes'>0</allocation> <available unit='bytes'>0</available> <source> </source> <target> <path>/var/lib/libvirt/images</path> </target> </pool>
    虚拟机的配置文件存放的位置
    [root@localhost qemu]# ls
    003.xml  networks  test1.xml  test2.xml
    [root@localhost qemu]# pwd
    /etc/libvirt/qemu

    六、虚拟机的删除与恢复

    ①先将虚拟机的配置文件复制下来,以防以后有用到的时候
    [root@localhost qemu]# cp -a test1.xml /root
    ②删除虚拟机 [root@localhost qemu]# virsh undefine test1 域 test1 已经被取消定义 [root@localhost qemu]# virsh list
    --all Id 名称 状态 ---------------------------------------------------- 5 003 running - test2 关闭 [root@localhost ~]# ls test1.xml
    ③磁盘文件还保存在/var/lib/libvirt/images下 [root@localhost
    ~]# vim test1.xml <source file='/var/lib/libvirt/images/test1.qcow2'/>
    ④恢复虚拟机,重新定义虚拟机配置文件即可
    [root@localhost ~]# virsh define test1.xml
    定义域 test1(从 test1.xml)
    ⑤查看已恢复
    [root@localhost ~]# virsh list --all
     Id    名称                         状态
    ----------------------------------------------------
     -     003                            关闭
     -     test1                          关闭
     -     test2                          关闭

    七、冷迁移与热迁移

    冷迁移:机器关机状态进行迁移

    ①将虚拟机的配置文件和磁盘文件发送到远程主机上
    [root@localhost ~]# scp 001.xml 192.168.42.140:/root The authenticity of host '192.168.42.140 (192.168.42.140)' can't be established. ECDSA key fingerprint is a9:9d:91:68:6c:88:bd:b6:10:1d:cf:df:5e:5a:8f:bb. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.42.140' (ECDSA) to the list of known hosts. root@192.168.42.140's password: 001.xml 100% 4439 4.3KB/s 00:00 [root@localhost ~]# vim 001.xml [root@localhost ~]# cd /var/lib/libvirt/images/ [root@localhost images]# ls 001.qcow2 [root@localhost images]# scp 001.qcow2 192.168.42.140:/root root@192.168.42.140's password:
    001.qcow2                                                                              100% 9218MB  27.4MB/s   05:37

    ②在远程主机查看配置文件并重新定义虚拟机,查看即可
    [root@localhost ~]# ls
    001.qcow2 
    001.xml   
    [root@localhost ~]# virsh list --all
     Id    名称                         状态
    ----------------------------------------------------
     -     003                            关闭
     -     test1                          关闭
     -     test2                          关闭

    [root@localhost ~]# virsh define 001.xml
    定义域 001(从 001.xml)

    [root@localhost ~]# virsh list --all
     Id    名称                         状态
    ----------------------------------------------------
     -     001                            关闭
     -     003                            关闭
     -     test1                          关闭
     -     test2                          关闭

    热迁移:机器在开机状态进行迁移

  • 相关阅读:
    PL/SQL 中查询CLOB字段内容
    ubuntu14.04 swap not avalible交换分区不能使用
    ubuntu14.04安装ia32-lib
    rtems资料分享
    NIR相机
    rsync详解
    SublimeText3使用技巧总结
    msm8610 lcd driver code analysis
    Qualcomm Android display架构分析
    LCD framebuffer驱动设计文档
  • 原文地址:https://www.cnblogs.com/daisyyang/p/10941658.html
Copyright © 2011-2022 走看看