KVM

作者: 酷酷的伟 | 来源:发表于2019-10-06 06:38 被阅读0次

    云计算服务类型

    IAAS
    PAAS
    SAAS
    
    
    image

    为什么用云计算

    image

    什么是虚拟化

    image

    环境准备

    环境介绍

    vmware: 支持嵌套虚拟化 (虚拟机中装虚拟机)
    kvm:   不支持嵌套虚拟化 
    
    vmware: 4G 宿主机 物理服务器(没有真实条件只用作测试)
    kvm:   虚拟机
    
    

    环境要求:

    克隆纯净环境:
    CentOS 7.4 7.6   (7.5版本有BUG,建议不要使用)
    关闭firewalld
    关闭selinux
    关闭NetworkManager
    安装常用软件  vim tree wget lrzsz bash-complete
    
    
    image

    lsmod|grep -i kvm

    image

    这里做了一个本地解析下载需要的环境

    echo '192.168.37.202 mirrors.aliyun.com' >>/etc/hosts
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    安装需要的软件和下载镜像:
    yum install libvirt virt-install qemu-kvm -y 
    wget http://192.168.37.202/linux59/CentOS-7-x86_64-Minimal-1511.iso
    
    将镜像移动到/opt下
    mv CentOS-7-x86_64-Minimal-1511.iso /opt/
    
    

    把VNC软件 下载到电脑上

    http://192.168.37.202/linux59/VNC-Viewer-6.19.325-Windows-64bit.exe
    
    
    image

    安装一台kvm虚拟机

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

    宿主机
    建议虚拟机内存不要低于1024M,否则安装系统特别慢!
    [root@kvm01 /opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole 
    
    vnc:10.0.0.11:5900
    --virt-type kvm 虚拟化的类型(qemu)
    --os-type=linux 系统类型
    --os-variant rhel7 系统版本
    --name centos7 虚拟机的名字
    --memory 1024 虚拟机的内存
    --vcpus 1 虚拟cpu的核数
    --disk /opt/centos2.raw,format=raw,size=10
    --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso 
    --network network=default 使用默认NAT的网络
    --graphics vnc,listen=0.0.0.0 
    --noautoconsole
    
    

    用VNC连接

    [root@kvm01 ~]# systemctl start libvirtd.service
    [root@kvm01 ~]# systemctl status libvirtd.service
    [root@kvm01 /opt]#  netstat -lntup|grep 5900
    tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      7961/qemu-kvm 
    
    
    image image image image image image
    virsh destroy centos7  #强制关机
    virsh start centos7  #开机
    
    virsh list    #查看运行或暂停中的虚拟机
    
    

    安装完成后reboot后,手动重启kvm

    virsh start centos7  #开机
    
    
    image

    连接成功

    image

    kvm虚拟机的virsh日常管理命令和配置

    列表list(--all)
    开机start
    关机shutdown
    拔电源关机destroy
    重启reboot
    
    导出配置dumpxml 例子:virsh dumpxml centos7 >centos7-off.xml
    删除undefine 推荐:先destroy,在undefine
    导入配置define 
    修改配置edit(自带语法检查)
    
    重命名domrename (低版本不支持)
    挂起suspend
    恢复resume
    查询vnc端口号vncdisplay
    
    kvm虚拟机开机启动
    
    console 控制台 登录
    kvm运行业务程序
    autostart
    
    开机启动autostart,前提:systemctl enable libvirtd;
    取消开机启动autostart --disable
    centos7的kvm虚拟机:
    grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
    
    

    迁移虚拟机

    mkdir -p /data
    virsh list 
    virsh destroy centos7 
    virsh list --all
    mv /opt/centos2.raw /data/
    virsh start centos7 
    virsh edit centos7  ---> <source file='/data/centos2.raw'/>
    virsh start centos7 
    virsh list --all
    [root@kvm01 /opt]# virsh dumpxml centos7 |grep raw
          <driver name='qemu' type='raw'/>
          <source file='/data/centos2.raw'/>
    
    

    修改kvm虚拟机名字

    centos7改为centos2:
    
    [root@kvm01 /opt]# virsh list 
     Id    Name                           State
    ----------------------------------------------------
     6     centos7                        running
    
    [root@kvm01 /opt]# ls /data/
    centos2.raw
    [root@kvm01 /opt]# virsh destroy centos7 
    Domain centos7 destroyed
    
    [root@kvm01 /opt]# virsh domrename centos7 centos2
    Domain successfully renamed
    
    [root@kvm01 /opt]# virsh start centos2 
    Domain centos2 started
    
    [root@kvm01 /opt]# virsh list --all 
     Id    Name                           State
    ----------------------------------------------------
     7     centos2                        running
    
    

    挂起与恢复kvm虚拟机

    image
    挂起:
    [root@kvm01 /opt]# virsh suspend centos2 
    Domain centos2 suspended
    
    [root@kvm01 /opt]# virsh list --all 
     Id    Name                           State
    ----------------------------------------------------
     7     centos2                        paused
    
    恢复:
    [root@kvm01 /opt]# virsh resume centos2 
    Domain centos2 resumed
    
    [root@kvm01 /opt]# virsh list --all 
     Id    Name                           State
    ----------------------------------------------------
     7     centos2                        running
    
    

    挂起的影响导致时间不同步了

    image

    利用ntpdate同步时间
    ntpdate ntp1.aliyun.com

    快速查看vnc端口

    有了vncdisplay后,一次就能连接到想要的虚拟机,不用从5900一直尝试一台一台的找。

    vncdisplay
    
    [root@kvm01 /opt]# virsh vncdisplay centos2 
    :0
    
    
    image

    用xshell连接kvm虚拟机

    image

    kvm虚拟机上不了网

    在宿主机上:
    [root@kvm01 /opt]# sysctl -a|grep ipv4|grep ip_forward
    net.ipv4.ip_forward = 1
    
    sysctl -p
    
    

    kvm虚拟机开机自启动

    autostart
    
    [root@kvm01 /opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     7     centos2                        running
    
    [root@kvm01 /opt]# virsh destroy centos2 
    Domain centos2 destroyed
    
    [root@kvm01 /opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     -     centos2                        shut off
    
    [root@kvm01 /opt]# virsh autostart centos2 
    Domain centos2 marked as autostarted
    
    [root@kvm01 /opt]# systemctl restart libvirtd.service
    [root@kvm01 /opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     1     centos2                        running
    
    其实是创建了软链接:
    [root@kvm01 /opt]# ll -h /etc/libvirt/qemu/autostart/
    total 0
    lrwxrwxrwx 1 root root 29 Sep  2 15:55 centos2.xml -> /etc/libvirt/qemu/centos2.xml
    
    

    console登录

    纯文字版的控制台

    [root@kvm01 /opt]# virsh console centos2 
    Connected to domain centos2
    Escape character is ^]
    
    # crtl + ] 退出
    
    

    kvm虚拟机改内核参数命令

    [root@localhost ~]# cp /boot/grub2/grub.cfg  /tmp/
    [root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
    [root@localhost ~]# vim /boot/grub2/grub.cfg   #自动添加了内核参数
    
    
    image

    在宿主机上利用console登录kvm虚拟机

    重启kvm虚拟机:
    virsh destroy centos2   关闭kvm虚拟机
    virsh start centos2    开启kvm虚拟机
    virsh console centos2   在宿主机上用console登录
    
    
    image

    kvm虚拟机虚拟磁盘格式转换和快照管理

    raw: 裸格式,占用空间比较大,不支持快照功能,不方便传输,性能较好,不方便传输 总50G 占用50G

    qcow2: cow(copy on write)占用空间小,支持快照,性能比raw差一点,方便传输 总50G 占用2G

    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --
    vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso
    --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --
    vcpus 1 --disk /data/oldboy.qcow2,format=qcow2,size=10 --cdrom /data/CentOS-7.2-x86_64-DVD-
    1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    

    磁盘工具的常用命令

    qemu -img info,create,resize,convert
    
    查看虚拟磁盘信息
    qemu-img info test.qcow2
    
    创建一块qcow2格式的虚拟硬盘:
    qemu-img create -f qcow2 test.qcow2 2G
    
    调整磁盘磁盘容量 只能扩容不能缩,数据会丢失,17楼见~
    qemu-img resize test.qcow2 +20G
    
    raw转qcow2:qemu-img convert -f raw -O qcow2 oldboy.raw oldboy.qcow2
    
     convert [-f fmt] [-O output_fmt] filename output_filename
    -c 压缩
    virsh edit web01
    virsh destroy web01
    virsh start web01
    
    

    把磁盘格式改为qcow2格式

    原格式是raw格式,远程复制的时候不方便,为了提高传输效率,可以转换为qcow2格式

    [root@kvm01 /opt]# time qemu-img convert -f raw -O qcow2 /data/centos2.raw /data/centos2.qcow2
    
    real    0m9.885s
    user    0m0.780s
    sys 0m8.982s
    
    virsh destroy centos2   
    virsh edit centos2 
      <driver name='qemu' type='qcow2'/>
      <source file='/data/centos2.qcow2'/>
    virsh start centos2 
    [root@kvm01 /opt]# virsh dumpxml centos2 |grep qcow2
          <driver name='qemu' type='qcow2'/>
          <source file='/data/centos2.qcow2'/>
    
    [root@kvm01 /opt]# ll -h /data/
    total 2.2G
    -rw-r--r-- 1 qemu qemu 1.1G Sep  2 17:19 centos2.qcow2
    -rw------- 1 root root  10G Sep  2 17:08 centos2.raw
    
    
    image

    快照管理

    创建快照 virsh snapshot-create-as centos7 --name install_ok
    查看快照 virsh snapshot-list centos7
    还原快照 virsh snapshot-revert centos7 --snapshotname 1516574134
    删除快照 virsh snapshot-delete centos7 --snapshotname 1516636570
    
    raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中
    
    快照存储的位置在虚拟磁盘中
    qemu-img info /data/centos2.qcow2
    
    
    创建快照
    [root@kvm01 ~]# virsh snapshot-create-as centos2  --name --name install_nginx
    Domain snapshot 1567416293 created
    
    查看快照
    [root@kvm01 /opt]# virsh snapshot-list centos2 
     Name                 Creation Time             State
    ------------------------------------------------------------
     1567416293           2019-09-02 17:24:53 +0800 running
     install_nginx        2019-09-02 17:40:43 +0800 running
    
    还原快照
    virsh snapshot-revert centos2 --snapshotname install_nginx
    
    删除快照
    virsh snapshot-revert centos2 --snapshotname install_nginx
    
    

    kvm虚拟机克隆

    完整克隆

    自动挡:
    virt-clone --auto-clone -o web01 -n web02 (完整克隆)
    
    

    手动挡:

    cp centos2-clone.qcow2 web02.qcow2 
    virsh dumpxml web01 >web02.xml 
    vim web02.xml #修改虚拟机的名字 
    #删除虚拟机uuid 
    #删除mac地址 
    #修改磁盘路径 
    virsh define web02.xml 
    virsh start web02
    
    
    image

    链接克隆

    a:生成虚拟机磁盘文件

    [root@kvm01 /data]# qemu-img create -f qcow2 -b web01.qcow2 web03.qcow2
    
    

    b:生成虚拟机的配置文件

    virsh dumpxml web01 >web03.xml 
    vim web03.xml 
    #修改虚拟机的名字 
    <name>web03</name> 
    #删除虚拟机uuid 
    <uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid> 
    #删除mac地址 
    <mac address='52:54:00:4e:5b:89'/> 
    #修改磁盘路径 
    <source file='/opt/web03.qcow2'/>
    
    

    c:导入虚拟机并进行启动测试

    virsh define web03.xml 
    virsh start web03
    
    

    全自动链接克隆脚本

    [root@kvm01 scripts]# cat link_clone.sh 
    #!/bin/bash 
    old_vm=$1 
    链接克隆: 
    qemu-img create -f qcow2 -b 49-web03.qcow2 49-web04.qcow2 
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 
    1 --disk /opt/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 -- 
    noautoconsole 
    4.8:kvm虚拟机的桥接网络 
    默认的虚拟机网络是NAT模式,网段192.168.122.0/24 
    4.8.1:创建桥接网卡 
    创建桥接网卡命令 
    virsh iface-bridge eth0 br0 
    取消桥接网卡命令 
    virsh iface-unbridge br0 
    4.8.2 新虚拟机使用桥接模式 
    默认NAT模式 
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 
    1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 -- 
    noautoconsole 
    桥接模式 
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 
    1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 -- 
    noautoconsole 
    问题1: 
    如果虚拟机获取不到ip地址: 
    new_vm=$2 
    #a:生成虚拟机磁盘文件 
    old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'` 
    disk_tmp=`dirname $old_disk` 
    qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2 
    #b:生成虚拟机的配置文件 
    virsh dumpxml $old_vm >/tmp/${new_vm}.xml 
    #修改虚拟机的名字 
    sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml 
    #删除虚拟机uuid 
    sed -i '/<uuid>/d' /tmp/${new_vm}.xml 
    #删除mac地址 
    sed -i '/<mac address/d' /tmp/${new_vm}.xml 
    #修改磁盘路径 
    sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" 
    /tmp/${new_vm}.xml 
    #c:导入虚拟机并进行启动测试 
    virsh define /tmp/${new_vm}.xml 
    virsh start ${new_vm}
    

    kvm虚拟机的桥接网络

    默认的虚拟机网络是NAT模式,网段192.168.122.0/24

    创建桥接网卡

    创建桥接网卡命令

    virsh iface-bridge eth0 br0
    
    

    取消桥接网卡命令

    virsh iface-unbridge br0
    
    

    新虚拟机使用桥接模式

    默认NAT模式
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    桥接模式
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    
    创建链接克隆生成虚拟机磁盘文件
    qemu-img  create  -f qcow2  -b 49-web01.qcow2 49-web04.qcow2
    
    创建桥接网卡命令
    virsh iface-bridge eth0 br0
    
    新虚拟机使用桥接模式
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web05 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network  bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    
    image image

    桥接和NAT原理图

    image

    将已有虚拟机网络修改为桥接模式

    a:关机状态下修改虚拟机配置文件:
    例如:virsh edit centos7
    <interface type='bridge'> 
    <source bridge='br0'/>
    
    b:启动虚拟机,测试虚拟机网络
    
    
    <interface type='network'>
      <mac address='52:54:00:6e:d2:c9'/>
      <source network='default'/>
    
    

    热添加技术

    热添加硬盘、网卡、内存、cpu

    kvm热添加硬盘

    临时生效

    virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2
    
    

    永久生效 --config

    virsh attach-disk web01 /data/web01-add.qcow2 vdb --subdriver qcow2 --config
    
    

    临时剥离硬盘

    virsh detach-disk web01 vdb
    
    

    永久剥离硬盘

    virsh detach-disk web01 vdb --config
    
    

    扩容:

    virsh shutdown web05
    qemu-img resize web05.qcow2 100G
    qemu-img info web05.qcow2 
    virsh console web05
    
    进入到kvm虚拟机
    [root@localhost ~]# fdisk -l
    [root@localhost ~]# mkfs.xfs  /dev/vdb
    [root@localhost ~]# mount /dev/vdb /mnt/
    /dev/vdb        100G   33M  100G   1% /mnt
    
    

    kvm虚拟机硬盘扩容规范

    1.在kvm虚拟机里把扩容盘的挂载目录,卸载掉
    [root@localhost ~]# umount /mnt
    
    2.在宿主机上剥离硬盘
    [root@kvm01 /data]# virsh detach-disk web05 vdb
    Disk detached successfully
    
    3.在宿主机上调整容量
    [root@kvm01 /data]# qemu-img resize web05.qcow2 200G
    Image resized.
    
    4.在宿主机上再次附加硬盘
    [root@kvm01 /data]# virsh attach-disk web05 /data/web05.qcow2 vdb --subdriver qcow2
    Disk attached successfully
    
    5.在虚拟机里再次挂载扩容盘
    [root@localhost ~]# mount /dev/vdb /mnt
    [root@localhost ~]# df -h
    /dev/vdb        100G   33M  100G   1% /mnt
    
    6.在虚拟机里用xfs_growfs更新扩容盘超级块信息
    [root@localhost ~]# xfs_growfs /dev/vdb 
    data blocks changed from 26214400 to 52428800
    [root@localhost ~]# df -h
    /dev/vdb        200G   33M  200G   1% /m    扩容为200G
    
    

    练习扩容kvm虚拟机的根分区

    链接

    关闭虚拟机
    shutdown -h now
    
    在宿主机上执行操作
    [root@kvm01 /data]# qemu-img resize web04.qcow2 50G
    [root@kvm02 /data]# qemu-img info web04.qcow2
    image: web04.qcow2
    file format: qcow2
    virtual size: 50G (53687091200 bytes)
    disk size: 439M
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    
    [root@kvm02 /data]# virsh start web04
    [root@kvm02 /data]# virsh console web04 
    Connected to domain web04
    Escape character is ^]
    ...
    [root@localhost ~]#  df -h
    [root@localhost ~]#  fdisk -l 
    [root@localhost ~]# fdisk /dev/vda
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Command (m for help): d
    Selected partition 1
    Partition 1 is deleted
    
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    Partition number (1-4, default 1): 
    First sector (2048-104857599, default 2048): 
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599): 
    Using default value 104857599
    Partition 1 of type Linux and of size 50 GiB is set
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
    The kernel still uses the old table. The new table will be used at
    the next reboot or after you run partprobe(8) or kpartx(8)
    Syncing disks.
    
    [root@localhost ~]# reboot      重新添加分区后重启
    [root@localhost ~]# xfs_growfs /dev/vda1    更新超级块
    [root@localhost ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1        50G  915M   50G   2% /
    
    

    kvm虚拟机在线热添加和删除网卡

    创建虚拟机:
    [root@kvm01 /data]# virsh destroy web04
    [root@kvm01 /data]# virsh undefine web04
    [root@kvm01 /data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    在宿主机上添加网卡:
    virsh attach-interface web04 bridge br0
    virsh attach-interface web04 bridge br0 --model  virtio
    # --model virtio    此产参数可以修改网卡名称为eth*
    
    在宿主机上删除网卡:删除虚拟机每张网卡的mca地址
    virsh detach-interface web04 bridge --mac 52:54:00:68:68:40
    virsh detach-interface web04 bridge --mac 52:54:00:a8:72:44
    # 只剩下一块网卡时不需要加mac地址,直接删除即可
    
    上面的操作临时生效,下次重启后恢复,可以添加--config参数使永久生效
    virsh attach-interface web04 bridge br0 --model  virtio --config
    
    
    image image

    kvm虚拟机在线热添加内存

    临时热添加内存
    virsh setmem web03 1024M 
    永久增大内存
    virsh setmem web03 1024M --config
    
    
    删除web03这台虚拟机:
    [root@kvm02 /data]# virsh destroy web03
    [root@kvm02 /data]# virsh undefine web03 
    
    再次创建web03虚拟机 设置最大内存maxmemory=2048:
    [root@kvm02 /data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    [root@kvm02 /data]# virsh list
     Id    Name                           State
    ----------------------------------------------------
     2     web04                          running
     4     web03                          running
    
    连接web03查看内存情况
    [root@kvm02 /data]# virsh console web03 
    ...
    [root@localhost ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:            465          63         297           8         104         280
    Swap:             0           0           0
    
    在宿主机上修改内存大小为1024M
    [root@kvm02 /data]# virsh setmem web03 1024M
    
    在web03虚拟机上查看内存已经变大了
    [root@localhost ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:            977          63         808           8         104         791
    Swap:             0           0           0
    
    再增加为2048M
    [root@kvm02 /data]# virsh setmem web03 2048M
    
    再次查看虚拟机内存变大了
    [root@localhost ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           2001          63        1832           8         104        1816
    Swap:             0           0           0
    
    1.如果修改的内存超过了设置的最大值,则报错
    [root@kvm02 /data]# virsh setmem web03 4096M
    error: invalid argument: cannot set memory higher than max memory
    
    2.如果将虚拟机关机后增加内存是可以调整的,但是超过宿主机的最大内存的话,会导致不能启动
    3.如果修改的内存过小,则会让虚拟机奔溃掉
    
    

    kvm虚拟机在线热添加cpu

    setvcpus    核心数
    setvcpu     特性
    
    热添加cpu核数
    virsh setvcpus web04 4 
    永久添加cpu核数
    virsh setvcpus web04 4 --config
    
    
    image
    先把虚拟机web03删除掉:
    virsh destroy web03 
    virsh undefine web03 
    
    创建web03虚拟机:
    [root@kvm02 /data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    登录到虚拟机web03查看cpu核心数
    [root@kvm02 /data]# virsh console web03 
    ...
    [root@localhost ~]# lscpu |head -5
    Architecture:          x86_64
    CPU op-mode(s):        32-bit, 64-bit
    Byte Order:            Little Endian
    CPU(s):                1    #当前为1核心
    On-line CPU(s) list:   0
    
    在宿主机上增加web03虚拟机的cpu核心数为2核
    [root@kvm02 /data]# virsh setvcpus web03 2
    
    查看虚拟机web03的cpu核心数
    [root@localhost ~]# lscpu |head -5
    Architecture:          x86_64
    CPU op-mode(s):        32-bit, 64-bit
    Byte Order:            Little Endian
    CPU(s):                2        #改为2核心
    On-line CPU(s) list:   0,1
    
    修改虚拟机的cpu核心数为4核
    [root@kvm02 /data]# virsh setvcpus web03 4
    
    再次查看虚拟机cpu
    [root@localhost ~]# lscpu |head -5
    Architecture:          x86_64
    CPU op-mode(s):        32-bit, 64-bit
    Byte Order:            Little Endian
    CPU(s):                4
    On-line CPU(s) list:   0-3
    
    
    image.png

    热迁移 (共享的网络文件系统)

    kvm虚拟机热迁移资料—强哥
    web04.qcow2 的环境下载链接: 提取码: sw23

    冷迁移
    1.关机
    2.备份配置文件
    3.scp传输配置文件和磁盘文件,传输到新的宿主机
    4.virsh define web04.xml
    5.启动

    热迁移
    kvm虚拟机:配置文件,nfs共享


    详细步骤

    环境要求:
    主机名 ip 内存 网络 软件需求 虚拟化
    kvm01 10.0.0.11 2G 创建br0桥接网卡 kvm和nfs 开启虚拟化
    kvm02 10.0.0.12 2G 创建br0桥接网卡 kvm和nfs 开启虚拟化
    nfs01 10.0.0.31 1G nfs

    kvm虚拟机热迁移大体步骤规划

    • 两边的环境(桥接网卡)
    • 实现共享存储(nfs)
    • 虚拟机桥接网络
    • 在线热迁移

    注意:需要互相做好host解析 ↓

    不然后面可能有报错,会因为主机名重复吗,
    修改主机名:
    hostnamectl set-hostname kvm01 或 kvm02
    
    kvm01和kvm02宿主机都添加host解析:
    [root@kvm01 ~]# cat /etc/hosts
    192.168.37.202 mirrors.aliyun.com
    10.0.0.11 kvm01
    10.0.0.12 kvm02
    
    scp -rp /etc/hosts 10.0.0.12:/etc/
    
    

    清理当前的宿主机环境,保证一个干净的环境测试

    保留一个配置文件web04.qcow2,将/opt/下和/data/下的其余全部删除掉
    
    [root@kvm01 ~]# rm -rf /opt/*
    [root@kvm01 ~]# mv /data/web04.qcow2 /opt/
    [root@kvm01 ~]# rm -rf  /data/*
    [root@kvm01 ~]# mv /opt/web04.qcow2 /data/
    [root@kvm01 ~]# ll /data/
    total 450688
    -rw-r--r-- 1 qemu qemu 459800576 Sep  3 17:08 web04.qcow2
    
    删除所有的配置文件:
    [root@kvm01 /data]# rm -rf /etc/libvirt/qemu/*.xml
    [root@kvm01 /data]# systemctl restart libvirtd
    [root@kvm01 /data]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
    \\没有虚拟机了
    
    #想kvm01宿主机关机
    [root@kvm01 /data]# shutdown -h now
    
    

    调整宿主机 并克隆第二台kvm02宿主机和nfs01共享主机

    调整内存大小后,克隆两台主机,分别为kvm02和nfs01

    image image

    开机后修改IP地址并重启网卡

    因为是桥接网卡,索引网卡修改路径是
    vim /etc/sysconfig/network-scripts/ifcfg-br0
    systemctl restark network
    
    

    kvm01 默认 10.0.0.11
    kvm02 修改为10.0.0.12
    nfs01 修改为10.0.0.31

    给三台主机同时安装nfs环境

    yum install nfs-utils rpcbind 
    
    

    如果没有网络可能是dhcp的原因,暂时关掉

    image

    配置nfs服务端(nfs01上)

    添加配置文件(async异步同步,性能更高)
    [root@nfs01 ~]# vim /etc/exports
    /data  10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
    
    重启
    [root@nfs01 ~]# systemctl restart rpcbind
    [root@nfs01 ~]# systemctl restart nfs
    
    创建/data目录
    [root@nfs01 ~]# mkdir /data
    
    去kvm01和02上检查是否连接nfs
    [root@kvm01 /data]#  showmount -e 10.0.0.31
    Export list for 10.0.0.31:
    /data 10.0.0.0/24
    
    [root@kvm02 /data]#  showmount -e 10.0.0.31
    Export list for 10.0.0.31:
    /data 10.0.0.0/24
    
    

    挂载并测试

    kvm01上:
    [root@kvm01 ~]# mount -t nfs 10.0.0.31:/data/ /data/
    [root@kvm01 ~]# df -h
    10.0.0.31:/data   48G  2.2G   46G   5% /data
    
    kvm02上:
    [root@kvm02 /data]# mount -t nfs 10.0.0.31:/data/ /data/
    [root@kvm02 /data]# df -h
    10.0.0.31:/data   48G  2.2G   46G   5% /data
    
    查看nfs01的/data目录是否同步之前的文件:
    [root@nfs01 ~]# ll -h /data/
    total 446M
    -rw-r--r-- 1 107 107 6.3M Sep  3 22:14 web03.qcow2
    -rw-r--r-- 1 107 107 439M Sep  3 22:24 web04.qcow2
    
    

    将虚拟机从kvm02宿主机迁移到kvm01宿主机上

    虚拟机都在kvm02上:
    [root@kvm02 /data]# virsh list 
     Id    Name                           State
    ----------------------------------------------------
     2     web04                          running
     6     web03                          running
    
    当前的kvm01上没有虚拟机:
    [root@kvm01 ~]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
    
    执行迁移的命令 (将kvm02上的web03迁移到10.0.0.11宿主机上)
    [root@kvm02 /data]# virsh migrate --live --verbose web03 qemu+ssh://10.0.0.11/system --unsafe
    root@10.0.0.11's password: 
    Migration: [100 %]
    
    在kvm01上查看web03虚拟机已迁移过来了
    [root@kvm01 ~]# virsh list
     Id    Name                           State
    ----------------------------------------------------
     3     web03                          running
    
    登录web03上修改网卡配置文件
    [root@kvm01 ~]# virsh console web03 
    [root@localhost ~]# sed -i 's#dhcp#static#' /etc/sysconfig/network-scripts/ifcfg-eth0
    
    添加下面的内容到网卡配置中
    IPADDR=10.0.0.129
    GATEWAY=10.0.0.254
    NETMASK=255.255.255.0
    DNS1=223.5.5.5
    
    重启网卡
    systemctl restart network
    
    

    再次将迁移过到kvm01上的web03虚拟机迁移回kvm02上

    迁移到10.0.0.12的kvm02宿主机上:
    [root@kvm01 ~]# virsh migrate --live --verbose web03 qemu+ssh://10.0.0.12/system --unsafe
    root@10.0.0.12's password: 
    Migration: [100 %]
    [root@kvm01 ~]# virsh list
     Id    Name                           State
    ----------------------------------------------------
    
    在kvm02宿主机上查看已经迁移回来了:
    [root@kvm02 /data]# virsh list 
     Id    Name                           State
    ----------------------------------------------------
     2     web04                          running
     7     web03                          running
    
    

    迁移过程中会丢包

    image

    安装ESXI并安装一台虚拟机

    安装ESXI

    新建虚拟机

    image

    添加镜像
    镜像网盘提取码: mhtx
    VMware-viclient网盘下载链接 提取码: jfcr

    image image image image image image image image image image image image image image image image image

    用VMware vSphere软件连接

    image image image image image image image image image image image image image image image image

    ESXI的常用配置

    开启ssh功能

    image image image

    点击启动后去控制台操作

    image

    下面是按照centos6的步骤

    image image image image image image image image image image image image image image

    等待安装好后就可以操作使用了

    练习

    将kvm虚拟机迁移到esxi上

    qemu-img convert -f qcow2 oldimage.qcow2 -O vmdk newimage.vmdk
    #可能不需要
    vmkfstools -i oldimage.vmdk newimage.vmdk -d thin
    
    

    将ESXI虚拟机迁移到kvm上

    将虚拟机导出ova文件
    virt-v2v -i ova centos-dev-test01-v2v.ova -o local -os /opt/test -of qcow2
    
    

    问题与需求总结

    kvm宿主机 2000台
    查看每一个宿主机有多少台虚拟机?
    查看每一个宿主机还剩多少资源?
    查看每一台宿主机,每一个虚拟机的ip地址? excel 资产管理
    kvm管理平台,数据库工具
    信息:宿主机,总配置,剩余的总配置
    虚拟机的信息,配置信息,ip地址,操作系统
    带计费功能的kvm管理平台,openstack ceilometer计费 ecs IAAS层
    自动化管理kvm宿主机,云主机定制化操作
    服务器, 20核心 1T内存 96T
    资源浪费,linux环境特别乱,,kvm虚拟机
    

    相关文章

      网友评论

        本文标题:KVM

        本文链接:https://www.haomeiwen.com/subject/xphmuctx.html