KVM虚拟化(KVM的部署及使用)

2018/06/04 KVM

1.虚拟化

1.1概念

将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象 、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。

1.2应用数据化的原因

1)同一台物理机运行多个不同版本应用软件 2)硬件依赖性较低 3)便于数据迁移

1.3虚拟化的优势

1)提高应用兼容性 2)降低运营成本 3)加速应用部署 4)提高服务器可用性 5)提高资源利用率 6)动态调度资源 7)降低能源消耗

2.KVM

2.1KVM

1)KVM是开源软件 2)是x86架构且硬件支持虚拟化技术(如intel VT或AMD-V)的Linux全虚拟化解决方案 3)包含为处理器提供底层虚拟化可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko) 4)需要经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面 5)能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。

2.2Virtual Machine Manager

1)虚拟机管理员,可以让用户管理多个虚拟机 2)创建、编辑、引导或停止虚拟机 3)查看并控制每个虚拟机的控制台 4)查看每部虚拟机的性能及使用率 5)查看每部正在运行中的虚拟机以及主控端的即时性及使用率信息 6)无论在本机或远程,皆可使用KVM、Xen、QEMU

3.KVM的部署

3.1环境准备

[root@KVM ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@KVM ~]# uname -r
3.10.0-693.el7.x86_64
[root@KVM ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.101  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::af24:1fe3:9292:9747  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:2c:94:03  txqueuelen 1000  (Ethernet)
        RX packets 714  bytes 132837 (129.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 247  bytes 35367 (34.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:2c:94:0d  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@KVM ~]# getenforce
Disabled
[root@KVM ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

3.2安装相关软件包

[root@KVM ~]#  yum install qemu-kvm libvirt virt-install virt-manager bridge-utils

说明:qemu-kvm    ----模拟计算机的工具,为KVM虚拟机提供IO设备
           libvirt    ----管理虚拟机
           virt-install    ----命令行的虚拟机创建安装工具
           bridge-utils   ----网桥工具
           ```

3.4启动

[root@KVM ~]# systemctl start libvirtd

方法一:使用命令行安装部署

3.4创建网桥

[root@KVM ~]# nmcli c add type bridge autoconnect yes con-name br0 ifname br0 Connection ‘br0’ (f8cd2a6d-1683-4174-825a-76d79b8cefcd) successfully added. [root@KVM ~]# nmcli c modify br0 ipv4.addresses 10.0.0.101/24 ipv4.method manual [root@KVM ~]# nmcli c modify br0 ipv4.gateway 10.0.0.254 [root@KVM ~]# nmcli c delete eth0 [root@KVM ~]# nmcli c add type bridge-slave autoconnect yes con-name eth0 ifname eth0 master br0


3.5重启

[root@KVM ~]# reboot


3.6创建安装磁盘

[root@KVM ~]# mkdir -p /var/linux/images [root@KVM ~]# qemu-img create -f qcow2 /var/linux/images/centos74.img 20G Formatting ‘/var/linux/images/centos71.img’, fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 lazy_refcounts=off


3.7安装虚拟机

[root@KVM ~]# virt-install –name centos71 –ram 512 –vcpus 2 –disk path=/var/linux43/images/centos71.img,size=10 –os-type linux –os-variant rhel7 –graphics none –console pty,target_type=serial –location=/var/CentOS-7-x86_64-DVD-1708.iso –extra-args ‘console=ttyS0,115200n8 serial’

方法二:VNC

3.4下载VNC(官网:http://www.tightvnc.com)

3.5创建安装磁盘

[root@KVM ~]# qemu-img create -f qcow2 /var/linux/images/centos742.img 20G


3.6安装虚拟机(NAT模式)

virt-install –virt-type=kvm –name=c72 –vcpus=1 -r 1024 -c /var/CentOS-7-x86_64-DVD-1503-01.iso –network bridge=br0 –graphics vnc,listen=0.0.0.0 –noautoconsole –os-type=linux –os-variant=rhel7 –disk path=/var/linux/images/centos742.img,size=20,format=qcow2


3.7Windows下VNC连接


4.KVM的相关命令

4.1退出虚拟机

ctrl + ]

4.2进入虚拟机

virsh console centos74

4.3查看虚拟机的及状态

virsh list virsh list –all

4.4启动虚拟机

virsh start centos74

4.5关闭虚拟机

virsh shutdown centos74

4.6强制关闭虚拟机

virsh destroy centos74

4.7删除虚拟机

virsh shutdown centos74 virsh undefine centos74

5.磁盘管理

5.1查看当前虚拟机硬盘信息

[root@KVM ~]# qemu-img info /var/linux/images/centos74.img image: /var/linux/images/centos74.img file format: qcow2 virtual size: 20G (21474836480 bytes) disk size: 1.2G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false

5.2转换磁盘格式(qcow2转换为raw)

[root@KVM ~]# qemu-img convert -f qcow2 -O raw /var/linux/images/centos74.img /var/linux/images/centos74.img


5.3KVM虚拟机添加硬盘

5.3.1创建一块新的硬盘

[root@KVM ~]# qemu-img create -f qcow2 /var/linux/images/centos74-add.qcow2 2G


5.3.2查看创建的硬盘信息

[root@KVM ~]# qemu-img info /var/linux/images/centos74-add.qcow2 image: /var/linux/images/centos74-add.qcow2 file format: qcow2 virtual size: 2.0G (2147483648 bytes) disk size: 196K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false


5.3.3为虚拟机添加硬盘

[root@KVM ~]# virsh attach-disk centos74 /var/linux/images/centos74-add.qcow2 vdb –live –cache=none –subdriver=qcow2 Disk attached successfully

说明:vdb    第二块硬盘
          --live    热添加
          --sudbriver    驱动类型
          detach-disk    分离磁盘设备
          attach-disk     附加磁盘设备

5.4格式化磁盘(在KVM虚拟机中操作)

[root@centos74 ~]# mkfs.xfs /dev/vdb

6.快照管理

6.1创建快照

[root@KVM ~]# virsh snapshot-create cnetos74

6.2查看主机快照列表

[root@KVM ~]# virsh snapshot-list centos74

6.3查看快照信息

[root@KVM ~]# virsh snapshot-info centos74 –spanshotname 1516607756

6.4还原快照

[root@KVM ~]# virsh snapshot-revert centos74 –spanshotname 1516607756

6.5删除快照

[root@KVM ~]# virsh snapshot-delete centos74 –spanshotname 1516607756

7.KVM虚拟机克隆

[root@KVM ~]# virsh-clone –auto-clone -o centos74

8.KVM虚拟机冷迁移

8.1在KVM02中安装kvm组件

[root@KVM02 ~]# yum install -y libvirt* virt-* qemu-kvm*

8.2配置桥接网络

[root@KVM 02~]# virsh iface-bridge eth0 br0

8.3KVM主机将虚拟机关闭,导出配置文件

[root@KVM ~]# virsh shutdown centos74 [root@KVM ~]# virsh dumpxml centos74 > centos74.xml

8.4将虚拟文件传输到KVM02上

[root@KVM ~]# scp -rp centos74.xml 10.0.0.102:/data

8.5KVM02主机导入文件

[root@KVM02 ~]# virsh define centos74.xml

8.6启动虚拟机

[root@KVM02 ~]# virsh start centos74

9.KVM虚拟机热迁移

9.1KVM虚拟机热迁移的核心
   共享存储。这里使用NFS共享存储(详情参考:http://blog.51cto.com/13520761/2087720)

9.1安装virt-manager所需桌面及vnc-server

[root@KVM ~]# yum groupinstall “GNOME Desktop” -y [root@KVM ~]# yum install -y tigervnc-server [root@KVM ~]# yum install -y opnssh-askpass

9.2复制vnc配置文件

[root@KVM ~]# cp /usr/lib/systemd/system/vncserver@.server /usr/lib/systemd/system/vncserver@:1.server

9.3修改配置文件

[root@KVM ~]# egrep -v “^#|^$” /usr/lib/systemd/system/vncserver@:1.service [Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=forking User=root ExecStartPre=-/usr/bin/vncserver -kill %i ExecStart=/usr/bin/vncserver %i PIDFile=/root/.vnc/%H%i.pid ExecStop=-/usr/bin/vncserver -kill %i [Install] WantedBy=multi-user.target

9.4设置vnc连接时的密码

[root@KVM ~]# vncpasswd

9.5启动vnc服务

[root@KVM ~]# systemctl start vncserver@:1.services

9.6在KVM主机上部署NFS服务

9.7在KVM02主机上挂载目录

[root@KVM02 ~]# mount -t nfs 172.16.1.101:/var/linux/images /var/linux/images

9.8vnc连接KVM宿主机

9.9添加KVM02宿主机
![](/images/posts/kvm/1.png)

9.10主机热迁移

![](/images/posts/kvm/2.png)


9.11在KVM02上查看虚拟主机

[root@KVM02 ~]# virsh list –all `

Search

    欢迎关注我的微信公众号

    晨枫

    alex0227

    Table of Contents