• KVM虚拟化


    KVM虚拟化

    虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术.

    虚拟化:提高了资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖

    kvm虚拟化管理软件安装

    [root@lb01 ~]# yum install libvirt* virt-* qemu-kvm* -y
    #安装软件说明内容:
    libvirt:作用:虚拟机的管理软件
    virt  virt-install virt-clone:作用:虚拟机的安装工具和克隆工具
    qemu-kvm  qemu-img(qcow2,raw)作用:管理虚拟机的虚拟磁盘
    
    [root@lb01 ~]# lsmod |grep -i kvm
    kvm_intel             170086  0 
    kvm                   566340  1 kvm_intel
    irqbypass              13503  1 kvm
    
    #启动kvm
    [root@lb01 ~]# systemctl start libvirtd.service 
    [root@lb01 ~]# systemctl enable libvirtd.service 
    
    安装VNC软件:
      下载vnc软件方法,tightvnc官网:http://www.tightvnc.com
    VNC软件,用于VNC(Virtual Network Computing),为一种使用RFB协议的显示屏画面分享及远程操作软件。此软件借由网络,可发送键盘与鼠标的动作及即时的显示屏画面。
    VNC与操作系统无关,因此可跨平台使用,例如可用Windows连接到某Linux的电脑,反之亦同。甚至在没有安装客户端程序的电脑中,只要有支持JAVA的浏览器,也可使用。
    安装VNC时,使用默认安装即可,无需安装server端。
    

    配置第一台KVM虚拟机

    [root@lb01 ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.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-type		虚拟化的类型
    --os-type=		系统类型
    --os-variant	系统版本
    --name			虚拟机的名字
    --memory		虚拟机的内存
    --vcpus			虚拟机的CPU
    --disk			存储的路径
    format=			存储磁盘的类型:raw(不支持快照,性能好)、qcow2(支持快照)
    
    qcow2
    size=			磁盘的大小
    --cdrom			镜像的路径
    --network		网络类型
    

    使用参数说明:

    参数 参数说明
    --virt-type HV_TYPE 要使用的管理程序名称 (kvm, qemu, xen, ...)
    --os-type 系统类型
    --os-variant DISTRO_VARIANT 在客户机上安装的操作系统,例如:'fedora18'、'rhel6'、'winxp' 等。
    -n NAME, --name NAME 客户机实例名称
    --memory MEMORY 配置客户机虚拟内存大小
    --vcpus VCPUS 配置客户机虚拟 CPU(vcpu) 数量。
    --disk DISK 指定存储的各种选项。
    -cdrom CDROM 光驱安装介质
    -w NETWORK, --network NETWORK 配置客户机网络接口。
    --graphics GRAPHICS 配置客户机显示设置。
    虚拟化平台选项:
    -v, --hvm 这个客户机应该是一个全虚拟化客户机
    -p, --paravirt 这个客户机应该是一个半虚拟化客户机
    --container 这个客户机应该是一个容器客户机
    --virt-type HV_TYPE 要使用的管理程序名称 (kvm, qemu, xen, ...)
    --arch ARCH 模拟 CPU 架构
    --machine MACHINE 机器类型为仿真类型
    其它选项:
    --noautoconsole 不要自动尝试连接到客户端控制台
    --autostart 主机启动时自动启动域。
    --noreboot 安装完成后不启动客户机。
    以上信息通过 " virt-install --help " 获得。

    kvm的管理操作

    参数 参数说明
    基础操作
    list 查看虚拟机列表,列出域
    start 启动虚拟机,开始一个(以前定义的)非活跃的域
    shutdown 关闭虚拟机,关闭一个域
    destroy (危险) 强制关闭虚拟机,销毁(停止)域
    vncdisplay 查询虚拟机vnc端口号
    配置管理操作
    dumpxml 导出主机配置信息
    undefine 删除主机
    define 导入主机配置
    domrename 对虚拟机进行重命名
    挂起与恢复
    suspend 挂起虚拟机
    resume 恢复虚拟机
    自启动管理
    autostart 虚拟机开机启动
    autostart --disable 取消虚拟机开机启动
    以上参数通过 “virsh --help****” 获得。
    #列出所有虚拟机
    [root@lb01 ~]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     1     centos7                        running
    #开机
    [root@lb01 ~]# virsh start centos7 
    Domain centos7 started
    #关机
    [root@lb01 ~]# virsh shutdown centos7 
    Domain centos7 is being shutdown
    #强制关机
    [root@lb01 ~]# virsh destroy centos7 
    Domain centos7 destroyed
    
    #导出配置
    [root@lb01 ~]# virsh dumpxml centos7 >/opt/centos7.xml
    #删除虚拟机
    [root@lb01 ~]# virsh undefine centos7 
    Domain centos7 has been undefined
    [root@lb01 ~]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
    
    [root@lb01 ~]# 
    #导入配置
    [root@lb01 ~]# virsh define /opt/centos7.xml 
    Domain centos7 defined from /opt/centos7.xml
    [root@lb01 ~]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     -     centos7                        shut off
    
    [root@lb01 ~]# 
    
    #配置文件路径
    /etc/libvirt/qemu/
    
    #修改KVM虚拟机配置的方法
    [root@lb01 ~]# virsh edit centos7
    使用该命令修改可以对文件进行语法校验。
    
    #修改虚拟机名称
    [root@lb01 ~]# virsh domrename centos7 opesn
    Domain successfully renamed
    
    #虚拟机挂起
    [root@lb01 ~]# virsh suspend opesn 
    Domain opesn suspended
    #虚拟机挂起恢复
    [root@lb01 ~]# virsh resume opesn 
    Domain opesn resumed
    #查看vnc端口号
    [root@lb01 ~]# virsh vncdisplay opesn 
    :0
    
    [root@lb01 ~]# 
    
    #开机自启动设置
    # 设置 libvirtd 服务开机自启动。
    [root@lb01 ~]# systemctl enable libvirtd
    [root@lb01 ~]# virsh autostart opesn 
    Domain opesn marked as autostarted
    
    opesn 标记为自动开始
    # 实质为创建软连接
    [root@lb01 ~]# ll /etc/libvirt/qemu/autostart/
    total 0
    lrwxrwxrwx 1 root root 27 Jan  4 22:45 opesn.xml -> /etc/libvirt/qemu/opesn.xml
    [root@lb01 ~]# 
    取消开机自启动
    [root@lb01 ~]# virsh autostart --disable opesn 
    Domain opesn unmarked as autostarted
    
    [root@lb01 ~]# ll /etc/libvirt/qemu/autostart/
    total 0
    [root@lb01 ~]# 
    

    console控制台登录

    在虚拟机内操作(该操作仅限centos7):
    
    [root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
    [root@localhost ~]# reboot
    # 115200n8:能显示虚拟机的启动过程
    重启完成后,使用virsh console 连接虚拟机。
    [root@lb01 ~]# virsh console opesn 
    Connected to domain opesn
    Escape character is ^]
    
    CentOS Linux 7 (Core)
    Kernel 3.10.0-693.el7.x86_64 on an x86_64
    
    localhost login: root
    Password: 
    Last login: Sat Jan  4 22:33:18 from 192.168.122.1
    [root@localhost ~]# 
    

    kvm磁盘格式

    raw:裸格式,占用空间大小,不支持快照功能,性能较好,不方便传输
    qcow2:占用空间小,支持快照,性能比raw差一点方便传输
    
    #查看当前虚拟机硬盘信息
    [root@lb01 ~]# qemu-img info /data/centos7.raw 
    image: /data/centos7.raw
    file format: raw
    virtual size: 10G (10737418240 bytes)
    disk size: 1.7G
    [root@lb01 ~]# 
    
    #创建一块qcow2的虚拟硬盘
    [root@lb01 ~]# qemu-img create -f qcow2 /opt/opesn.qcow2 10G
    Formatting '/opt/opesn.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
    #调整磁盘容量
    [root@lb01 ~]# qemu-img resize /data/opesn.qcow2 +20G
    Image resized.
    [root@lb01 ~]# qemu-img info /data/opesn.qcow2
    image: /data/opesn.qcow2
    file format: qcow2
    virtual size: 30G (32212254720 bytes)
    disk size: 260K
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    [root@lb01 ~]# 
    
    #raw转qcow2格式:
    # 参数说明
    [root@lb01 data]# qemu-img  --help |grep convert 
    qemu-img convert [-f fmt] [-O output_fmt] filename  output_filename
    [root@lb01 data]# qemu-img convert -f raw -O qcow2 centos7.raw opesn.qcow2 
    #修改虚拟机配置文件
    [root@lb01 data]# virsh shutdown opesn 
    [root@lb01 data]# virsh edit opesn
    修改前:
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>
          <source file='/data/clsn.raw'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </disk>
    修改后:
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/data/opesn.qcow2'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </disk>
    #删除原磁盘文件
    [root@lb01 data]# rm -rf centos7.raw 
    #启动虚拟机
    [root@lb01 data]# virsh start opesn 
    
    #压缩磁盘空间
    [root@lb01 data]# qemu-img convert -c -f qcow2 -O qcow2 opesn.qcow2 centos7.qcow2
    

    快照管理

    #创建快照
    [root@lb01 data]# virsh snapshot-create opesn 
    
    #查看快照列表
    [root@lb01 data]# virsh snapshot-list opesn 
     Name                 Creation Time             State
    ------------------------------------------------------------
     1578153030           2020-01-04 23:50:30 +0800 running
    
    [root@lb01 data]# 
    
    #指定快照别名
    [root@lb01 data]# virsh snapshot-create-as --name v1 opesn 
    [root@lb01 data]# virsh snapshot-list opesn 
     Name                 Creation Time             State
    ------------------------------------------------------------
     1578153030           2020-01-04 23:50:30 +0800 running
     v1                   2020-01-04 23:51:57 +0800 running
    
    [root@lb01 data]# 
    
    #查看快照信息
    [root@lb01 data]# virsh snapshot-info opesn --snapshotname v1
    Name:           v1
    Domain:         opesn
    Current:        yes
    State:          running
    Location:       internal
    Parent:         -
    Children:       0
    Descendants:    0
    Metadata:       yes
    
    [root@lb01 data]# 
    
    #删除快照
    [root@lb01 data]# virsh snapshot-delete opesn --snapshotname 1578153030 
    Domain snapshot 1578153030 deleted
    
    [root@lb01 data]# 
    
    #还原快照
    [root@lb01 data]# virsh snapshot-revert opesn --snapshotname v1 
    
    [root@lb01 data]# 
    
    
    

    虚拟机的克隆

    #完整克隆
    [root@lb01 ~]# virt-clone -o opesn -n centos7 --auto-clone
    
    
    
    #链接克隆
    [root@lb01 data]# qemu-img create -f qcow2 -b centos7.qcow2 web03.qcow2
    Formatting 'web03.qcow2', fmt=qcow2 size=64424509440 backing_file='centos7.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
    [root@lb01 data]# qemu-img info web03.qcow2 
    image: web03.qcow2
    file format: qcow2
    virtual size: 60G (64424509440 bytes)
    disk size: 196K
    cluster_size: 65536
    backing file: centos7.qcow2
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    [root@lb01 data]# 
    第一步:复制虚拟磁盘文件
    第二步:修改xml配置文件
      1)name
      2)uuid
      3)虚拟磁盘存储路径
      4)mac地址 
    cat /etc/libvirt/qemu/web01.xml |grep 'qcow2'|grep -oP "(?<=file=')[^']+"
    
    

    kvm网络模式

    #默认NAT模式
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.qcow2,format=qcow2,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 /opt/centos7.qcow2,format=qcow2,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    #创建桥接网卡
    [root@lb01 data]# virsh iface-bridge eth0 br0
    [root@lb01 data]# brctl show 
    bridge name	bridge id		STP enabled	interfaces
    br0		8000.000c29e6cf2e	yes		eth0
    							vnet0
    							vnet1
    virbr0		8000.525400c52020	yes		virbr0-nic
    [root@lb01 data]# 
    #新建虚拟机为桥接模式
    [root@lb01 data]# qemu-img convert -f qcow2 -O qcow2 opesn.qcow2 centos7.qcow2
    [root@lb01 data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /data/centos7.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    #取消桥接网卡
    [root@lb01 data]# virsh iface-unbridge br0
    
    #将虚拟机的nat模式改为桥接模式
    [root@lb01 data]# virt-clone -o opesn -n web01 --auto-clone
    [root@lb01 data]# virsh edit web01
        <interface type='bridge'>
          <mac address='52:54:00:54:40:48'/>
          <source bridge='br0'/>
          <model type='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
    #修改kvm虚拟机网卡配置文件
    [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=none
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    IPADDR=10.0.1.3
    NETMASK=255.255.255.0
    GATEWAY=10.0.1.254
    DNS1=8.8.8.8
    [root@localhost ~]# 
    #测试网络连通性
    [root@lb01 data]# ping 10.0.1.3
    PING 10.0.1.3 (10.0.1.3) 56(84) bytes of data.
    64 bytes from 10.0.1.3: icmp_seq=1 ttl=64 time=0.610 ms
    64 bytes from 10.0.1.3: icmp_seq=2 ttl=64 time=0.754 ms
    ^C
    --- 10.0.1.3 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 0.610/0.682/0.754/0.072 ms
    [root@lb01 data]# 
    

    kvm热添加硬盘和扩容

    #宿主机操作
    #创建一块硬盘
    [root@lb01 data]# qemu-img create -f qcow2 web01-add01.qcow2 10G
    Formatting 'web01-add01.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off 
    #为虚拟机添加硬盘
    [root@lb01 data]# virsh attach-disk web01 --source /data/web01-add01.qcow2 --target vdb --live --cache none --subdriver qcow2
    Disk attached successfully
    
    #虚拟机操作
    #虚拟机内挂载磁盘
    [root@localhost ~]# mkfs.xfs /dev/vdb 
    [root@localhost ~]# 
    [root@localhost ~]# mount /dev/vdb /mnt/
    [root@localhost ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1        10G  1.8G  8.3G  18% /
    devtmpfs        487M     0  487M   0% /dev
    tmpfs           497M     0  497M   0% /dev/shm
    tmpfs           497M  6.5M  490M   2% /run
    tmpfs           497M     0  497M   0% /sys/fs/cgroup
    tmpfs           100M     0  100M   0% /run/user/0
    /dev/vdb         20G   33M   20G   1% /mnt
    [root@localhost ~]# 
    
    
    #虚拟机磁盘扩容
    #虚拟机操作
    [root@localhost ~]# umount /mnt/
    
    #宿主机操作
    #剥离硬盘
    [root@lb01 data]# virsh detach-disk web01 --target vdb
    #扩容
    [root@lb01 data]#  qemu-img resize /data/web01-add01.qcow2 +10G
    [root@lb01 data]# virsh attach-disk web01 --source /data/web01-add01.qcow2 --target vdb --live --cache none --subdriver qcow2
    
    #虚拟机操作
    [root@localhost ~]# mount /dev/vdb /mnt/
    [root@localhost ~]# xfs_growfs /dev/vdb 
    [root@localhost ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1        10G  1.8G  8.3G  18% /
    devtmpfs        487M     0  487M   0% /dev
    tmpfs           497M     0  497M   0% /dev/shm
    tmpfs           497M  6.5M  490M   2% /run
    tmpfs           497M     0  497M   0% /sys/fs/cgroup
    tmpfs           100M     0  100M   0% /run/user/0
    /dev/vdb         30G   33M   30G   1% /mnt
    [root@localhost ~]# 
    
    
    #挂载磁盘文件
    [root@lb01 data]# mount -o loop web01-add01.qcow2 /mnt/
    
    #如果磁盘文件系统是ext4
    [root@localhost ~]# resize2fs /dev/vdb
    

    kvm热添加网卡

    #添加桥接模式网卡
    [root@lb01 data]# virsh attach-interface web01 --type bridge --source br0 --model virtio
    Interface attached successfully
    
    [root@lb01 data]# 
    
    #添加nat模式网卡
    [root@lb01 data]# virsh attach-interface web01 --type network --source default --model virtio
    Interface attached successfully
    
    [root@lb01 data]# 
    
    #永久添加nat网卡
    [root@lb01 data]# virsh attach-interface web01 --type network --source default --model virtio
    [root@lb01 data]# virsh attach-interface web01 --type network --source default --model virtio --config 
    
    #剥离网卡
    [root@lb01 data]# virsh detach-interface web01 --type network --mac  52:54:00:74:8d:c6
    Interface detached successfully
    
    [root@lb01 data]# 
    

    kvm热添加内存

    #新建虚拟机
    [root@lb01 data]# qemu-img convert -f qcow2 -O qcow2 opesn.qcow2 web02.qcow2
    [root@lb01 data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web02.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    #临时热添加内存
    [root@lb01 data]# virsh setmem web02 2048M --live
    #永久增大内存
    [root@lb01 data]# virsh setmem web02 2048M --live --config   
    
    
    

    kvm热添加cpu

    #新建虚拟机
    [root@lb01 data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=2 --disk /data/web03.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    #临时热添加CPU
    [root@lb01 data]# virsh setvcpus web03 2
    #永久增大CPU
    [root@lb01 data]# virsh setvcpus web03 2 --config 
    
    

    kvm热迁移

    #注意:需要互相做好host解析
    
    #操作步骤:
    #一:在lb01和m01上安装kvm和nfs,配置桥接网卡
    [root@lb01 ~]# yum install libvirt* virt-* qemu-kvm* nfs-utils openssh-askpass -y
    [root@lb01 ~]# systemctl start libvirtd.service
    [root@lb01 ~]# virsh iface-bridge eth0 br0
    #二:在lb01上安装配置nfs
    [root@lb01 ~]# yum install nfs-utils -y
    [root@lb01 ~]# mkdir /data
    [root@lb01 ~]# vim /etc/exports
    /data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
    [root@lb01 ~]# systemctl restart rpcbind
    [root@lb01 ~]# systemctl restart nfs
    
    #三:m01挂载共享目录/data
    [root@m01 ~]# showmount -e 10.0.1.5
    Export list for 10.0.1.5:
    /data 10.0.1.0/24
    [root@m01 ~]# mkdir /data
    [root@m01 ~]# mount -t nfs 10.0.1.5:/data /data
    [root@m01 ~]# 
    
    #四:安装一台基于桥接模式的虚拟机
    [root@lb01 data]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name opesn --memory 1024 --vcpus 1 --disk /data/opesn.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    #热迁移的命令:
    root@lb01 ~]# virsh migrate --live --verbose opesn qemu+ssh://10.0.1.61/system --unsafe
    root@10.0.1.61's password: 
    Migration: [100 %]
    [root@lb01 ~]# 
    
    #将宿主机10.0.1.5上的kvm虚拟机opesn迁移到10.0.1.61
    
  • 相关阅读:
    node js 修改js代码自动发布到服务器
    NodeJS创建 HTTP 服务器
    node.js安装环境的检查和配置
    JQuery中extend使用
    DataTable 转换为List
    sql 修改表结构 schema
    iOS自动处理键盘事件的第三方库:IQKeyboardManager
    IOS8下的远程推送(转载)
    OC中运行出错( Unknown class <XXX> in InterfaceBuilder file.) 解决办法
    UISegmentedControl
  • 原文地址:https://www.cnblogs.com/opesn/p/12994212.html
Copyright © 2020-2023  润新知