云计算与虚拟化KVM深度实践

徐亮伟, 江湖人称标杆徐。多年互联网运维工做经验,曾负责过大规模集群架构自动化运维管理工做。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工做。 我的博客"徐亮伟架构师之路"累计受益数万人。 笔者Q:55240892五、572891887 架构师群:471443208html

该博客文章同步视频在51cto上线了,想详细了解的朋友能够点击下方视频连接地址 [51cto视频地址传送门](http://edu.51cto.com/course/13208.html)node

##云计算基本概述python

云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用程序,服务),这些资源可以被快速提供,只需投入不多的管理工做,或与服务供应商进行不多的交互。linux

在使用云计算以前的模式和技术nginx

一、IDC托管 二、IDC租用 三、虚拟主机(卖空间) 四、VPS:虚拟专用主机 openvz(经过超卖技术坑人) xen(不支持超卖)git

云计算以前,传统数据中心面临的问题github

一、资源利用率低 二、资源分配不合理 三、自动化能力差 四、初始成本高web

云计算是什么shell

一、云计算是一个概念, 不是任何技术(指的是资源使用和交付模式) 二、云计算使用方法必须经过网络来访问 三、云计算的优点(弹性付费、按需付费、快速扩展) 四、云计算不用关系底层基础设施架构vim

云计算优点

一、海量动态资源池,灵活的调配和绑定 二、无处不在的网络访问 三、随需应变的自助服务 四、服务应用的可用性 五、快速的弹性伸缩

##云计算服务模型

云计算分层

IDC 全部都得自行管理 IAAS 基础设施及服务 PAAS 平台及服务 SAAS 软件及服务

##云计算部署模型

<center>![-w300](http://cdn.xuliangwei.com/15235988962356.jpg)</center>

公有云(阿里云、腾讯云)只有使用权,按需付费(技术层面:数据不安全 道德层面) 私有云(自建机房,本身搭建,全部自行管理 (局限:资源固定)) 混合云(主要业务放私有云、当有临时需求的时候使用公有云,使用结束不用)

##虚拟化技术概述

什么是KVM, 内核级虚拟化技术Kernel-based Virtual Machine 虚拟化是一种具体的技术,将物理机虚拟成多个相互独立的虚拟机。 在一台计算机上同时运行多个逻辑计算机,每一个逻辑计算机可运行不一样的操做系统,而且应用程序均可以在相互独立的空间内运行而互不影响,能够实现资源的动态分配、灵活调度、跨域共享,提升资源利用率,服务于各行各业中灵活多变的应用需求。从而显著提升服务器的工做效率。

虚拟化的分类

全虚拟化 半虚拟化(qemu模拟网络以及硬盘) 硬件虚拟化(Inter vt-x/EPT) (AMD AMD-v /RVI) 桌面虚拟化 (银行,操做层面控制-没法复制、没法使用usb、最多手机拍照)) 应用虚拟化 (将应用经过浏览器进行交付,只须要安装插件便可实现"贵")

虚拟化使用场景

1.虚拟化能够虚拟出来多个操做系统,它们之间是相互独立的,因此每一个操做系统上所跑的应用程序是相互不影响的。 2.支持异构,linux系统能够虚拟化windows系统,方便不一样场景系统的使用。 3.支持快照、克隆、迁移、等功能。

企业案例一 公司有一台服务器, 在盘点资产时, 你并不清楚该虚拟机是否能中止, 也不清楚上面运行了什么, 问技术部门没有一我的清楚, 只会告诉你, 有可能有用你放着把。 若是这是一台物理机你看怎么办,真的很无奈、想改个啥你都不敢该,只能让他跑在那里。

企业案例二 公司这台物理机有没有用,全部人告诉你,没事删把确定没有用,而后到店庆的时候,产品经理过来了:咱们去年店庆作了一个积分抽奖的活动,我花钱买的,个人代码哪去了,个人服务器呢?服务器早都格式化多少遍了,产品经理说那没办法,那么赶忙联系提供商把,提供商倒闭了。怎么办,从新作呗。 若是有虚拟机就好办了,我把虚拟机关了放在那,只要不删除,是否是永远都在,哪天用在起来就好了。无非就占点硬盘,分配的时候,可使用多少分配多少。

虚拟化与云计算总结

云计算不等于虚拟化,二者并不能相互比较。 云计算是一种资源和使用交互的方式。 虚拟化是一种具体的技术。 云计算要依赖虚拟化技术来实现的一种经过网络访问获取资源,流量,交付的使用模式。(例如:弹性计算)。 虚拟化至关于实干家,而云计算是思想家。

##安装KVM虚拟化

KVM须要硬件支持, 因此须要开启虚拟化支持

1.硬件设备直接在BIOS设置开启CPU虚拟化 2.我的电脑一样进入BIOS开启虚拟化支持 3.VM须要找到对应虚拟机开启对应的VT-EPT虚拟化技术

//没有任何内容则表示服务器没有启用虚拟化
[root@kvm-node1 ~]# egrep '(vmx|svm)' /proc/cpuinfo

1.服务器环境规划

系统 主机名 IP 内存 磁盘
CentOS7 kvm-node1 192.168.56.11 4G 80G
CentOS7 kvm-node2 192.168.56.12 4G 80G

2.基础环境配置

//查看当前系统版本
[root@kvm-node1 ~]# hostnamectl 
   Static hostname: kvm-node1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 6878674c84644fd381a5e3a82d80cf18
           Boot ID: fd8e37aca7e4421fa5674fc0fff147e9
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.el7.x86_64
      Architecture: x86-64

//设定主机名
[root@kvm-node1 ~]# hostnamectl set-hostname kvm-node1

//关闭防火墙
[root@kvm-node1 ~]# systemctl stop firewalld
[root@kvm-node1 ~]# systemctl disable firewalld

//关闭Selinux
[root@kvm-node1 ~]# sed -i '/SELINUX=/cSELINUX=disabled' /etc/selinux/config
[root@kvm-node1 ~]# setenforce 0

//配置hosts解析
[root@kvm-node1 ~]# echo "192.168.56.11 kvm-node1" >> /etc/hosts

3.安装KVM虚拟化工具

//qeum 虚拟化软件,能够虚拟不一样的CPU,以及模拟网卡、声卡、PCI设备等
//libvirt 用于管理KVM的工具
//virt-install 命令行安装虚拟机工具
//virt-manager 图形化管理虚拟机工具
//openssh-askpass 远程链接KVM主机

[root@kvm-node1 ~]# yum install qemu-kvm qemu-kvm-tools \
libvirt virt-manager virt-install  \
openssh-askpass –y

//KVM是linux内核的一个模块,模块不须要安装只须要加载,经过用户态程序来管理便可
[root@kvm-node1 ~]# lsmod|grep kvm
kvm_intel             148081  0
kvm                   461126  1 kvm_intel

4.启动libvirt管理KVM工具

[root@kvm-node1 ~]# systemctl enable libvirtd.service
[root@kvm-node1 ~]# systemctl start libvirtd.service
#注意: 启动后会新增一块virbr0网络

5.KVM会给虚拟机分配NAT模式网络,可是在生产状况,强烈推荐使用网桥模式

//配置KVM虚拟机使用的桥接网络, 添加br0网卡
[root@kvm-node1 ~]# brctl addbr br0

//将eth0加入网桥,使用桥接模式,给br设置ip,添加路由网关,关闭防火墙
[root@kvm-node1 ~]# brctl addif br0 eth0 && \
ip addr del dev eth0 192.168.56.11/24 && \
ifconfig br0 192.168.56.11/24 up && \
route add default gw 192.168.56.2

[root@kvm-node1 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c29726a96       no              eth0
virbr0          8000.525400e6a3a3       yes             virbr0-nic

##建立KVM虚拟机

1.在建立虚拟机以前, 咱们须要添加一块磁盘来存放咱们的虚拟机, VM->关机->设置->添加磁盘

//直接使用整块磁盘
[root@kvm-node1 ~]# mkdir -p /data 
[root@kvm-node1 ~]# mkfs.xfs /dev/sdb
[root@kvm-node1 ~]# mount /dev/sdb /data
#强烈建议加入开机自启动

2.使用virsh-install建立命令模式建立虚拟机

//挂载系统光盘, 创建ISO镜像文件
[root@kvm-node1 ~]# dd if=/dev/cdrom of=/data/centos7u4_x86_64.iso

//建立虚拟机磁盘
[root@kvm-node1 ~]# qemu-img create -f qcow2 /data/centos7u4-node1.qcow2 10G

//建立虚拟机实例
virt-install --name centos7u4-node1 \
--virt-type kvm \
--ram 1024 \
--cdrom=/data/centos7u4_x86_64.iso \
--disk path=/data/centos7u4-node1.qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
 
//参数概述
--virt-type:指定虚拟机类型(kvm、qemu、xen)
--name:指定虚拟机名称
--raw:指定虚拟机使用内存大小
--cpu:指定cpu的核数(默认为1)
--cdrom:指定虚拟机安装的ISO镜像
--disk:指定虚拟机数据存储磁盘qcow2
--network:指定虚拟机网络类型, 默认nat,经常使用bridge
--graphics:指定虚拟机可链接方式, 好比VNC
--noautoconsole:不链接虚拟机图形界面控制台

3.使用vnc客户端链接KVM虚拟机,进行操做系统安装

4.安装CentOS7在启动前修改内核让网卡为eth0

5.安装系统步骤忽略, 但必定要记得配置好对应的地址

##建立WIN7虚拟机

1.准备Win7 ISO镜像

2.建立虚拟机磁盘

[root@kvm-node1 ~]# qemu-img create -f qcow2 win7-node1.qcow2

3.virt-install命令建立Win7虚拟机, 也可使用virt-manager建立Win7虚拟机

[root@kvm-node1 ~]# virt-install --name win7-node1 \
--virt-type kvm \
--ram 2048 \
--cdrom=/data/win7.iso \
--disk path=/data/win7-node1.qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole

4.Win7安装过程, 内存与磁盘不够会致使安装慢或失败

##管理KVM虚拟机

//虚拟机随着系统启动
virsh autostart Name
//关闭虚拟机随系统启动
virsh autostart —disable Name

//查看正在运行的KVM虚拟机
[root@kvm-node1 ~]# virsh list
//查看全部KVM虚拟机
[root@kvm-node1 ~]# virsh list --all

//启动KVM虚拟机
[root@kvm-node1 ~]# virsh start name
//关闭KVM虚拟机
[root@kvm-node1 ~]# virsh shutdown name
//强制关闭KVM虚拟机
[root@kvm-node1 ~]# virsh destroy name

//挂起KVM虚拟机
[root@kvm-node1 ~]# virsh suspend name
//恢复挂起的虚拟机
[root@kvm-node1 ~]# virsh resume name

//编辑KVM虚拟机的xml配置文件
[root@kvm-node1 ~]# virsh edit name
//删除建立的KVM虚拟机
[root@kvm-node1 ~]# virsh undefine name

##KVM虚拟机扩容

KVM虚拟机中有两种磁盘格式:

raw格式: 直接占用物理磁盘, 写入快, 性能优, 但占用空间 Qcow2格式: 使用多少占多少磁盘, 支持压缩、快照、镜像 注意:raw不支持快照, Qcow2支持快照, 但二者文件类型是能够相互间转换

不管磁盘是raw qcow2格式, 扩展思路以下

1.新添加一块磁盘加入至须要扩容的虚拟主机 2.使用lvm逻辑卷管理方式进行扩展

1.查看当前KVM虚拟机所使用的虚拟磁盘

[root@kvm-node1 ~]# virsh domblklist centos7u4-node1
Target     Source
------------------------------------------------
vda        /data/centos7u4-node1.qcow2

2.建立一块qcow2虚拟磁盘

[root@kvm-node1 ~]# qemu-img create -f qcow2 /data/centos7u4-node1-disk2.qcow2 10G

3.在线添加虚拟磁盘

//在线添加
[root@kvm-node1 ~]# virsh attach-disk centos7u4-node1 /data/centos7u4-node1-disk2.qcow2 vdb --cache=none --subdriver=qcow2
Disk attached successfully

//查看新增磁盘状态
[root@kvm-node1 ~]# virsh domblklist centos7u4-node1
Target     Source
------------------------------------------------
vda        /data/centos7u4-node1.qcow2
vdb        /data/centos7u4-node1-disk2.qcow2


//第二种扩容方式方式, 新增以下配置
[root@kvm-node1 ~]# virsh edit centos7u4-node1
<disk type='file' device='disk'>     
  <driver name='qemu' type='qcow2' cache='none'/>      
  <source file='/data/centos7u4-node1-disk2.qcow2'/>      
  <target dev='vdb' bus='virtio'/>      
 </disk>

4.经过vnc链接KVM虚拟机进行磁盘扩容

5.扩容步骤以下

[root@localhost ~]# pvcreate /dev/vdb
[root@localhost ~]# vgextend /dev/vdb centos
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root
[root@localhost ~]# xfs_growfs /dev/centos/root

##KVM虚拟机快照

1.查看磁盘格式raw格式须要转换成qcow2

[root@kvm-node1 ~]# qemu-img info /data/centos7u4-node1.raw 
image: /data/centos7u4-node1.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.2G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

2.必须关闭虚拟机进行磁盘转换

[root@kvm-node1 ~]# virsh shutdown centos7u4-node1
[root@kvm-node1 ~]# qemu-img convert -f raw /data/centos7u4-node1.raw -O qcow2 /data/centos7u4-node1.qcow2
//convert 将磁盘文件转换为指定格式的文件
//-f 指定须要转换文件的文件格式
//-O 指定要转换的目标格式
//转换完成后,将新生产一个目标映像文件,原文件保存

3.修改KVM虚拟机配置文件配置文件

[root@kvm-node1 ~]# virsh edit centos7u4-node1
      <driver name='qemu' type='qcow2'/>
      <source file='/data/centos7u4-node1.qcow2'/>

4.对虚拟机当前进行快照拍摄

[root@kvm-node1 ~]# virsh snapshot-create centos7u4-node1    
Domain snapshot 1523494907 created

5.查看虚拟机快照

[root@kvm-node1 ~]# virsh snapshot-list  centos7u4-node1
 Name                 Creation Time             State
------------------------------------------------------------
 1523494907           2018-04-11 21:01:47 -0400 running
 
 //检查当前虚拟机最新快照版本
[root@kvm-node1 ~]# virsh snapshot-current centos7u4-node1|less

//快照xml文件存放路径
[root@kvm-node1 ~]# ls /var/lib/libvirt/qemu/snapshot/centos7u4-node1/
1523494907.xml  1523495036.xml

6.恢复快照

[root@kvm-node1 ~]# virsh snapshot-revert centos7u4-node1 1523494907

//确认恢复版本正确
[root@kvm-node1 ~]# virsh snapshot-current centos7u4-node1|grep "1523494907"
  <name>1523494907</name>
  <creationTime>1523494907</creationTime>

7.删除快照

[root@kvm-node1 ~]# qemu-img info /data/centos7u4-node1.qcow2 
image: /data/centos7u4-node1.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.8G
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         1523494907             282M 2018-04-11 21:01:48   00:16:25.489
2         1523495036             282M 2018-04-11 21:03:56   00:18:29.210
Format specific information:
    compat: 1.1
    lazy refcounts: false

//删除最近一个快照
[root@kvm-node1 ~]# virsh snapshot-delete centos7u4-node1 1523495036
Domain snapshot 1523495036 deleted

##KVM图形化管理

1.服务端安装x11图形界面工具

[root@kvm-node1 ~]# yum install -y xorg-x11-font-utils xorg-x11-server-utils xorg-x11-utils xorg-x11-xauth xorg-x11-xinit

2.服务端开启SSH隧道转发X11

[root@kvm-node1 ~]# vim /etc/ssh/sshd_config
X11Forwarding yes
[root@kvm-node1 ~]# systemctl restart sshd

3.Windows客户端使用Xshell链接KVM宿主机

第一步: 链接KVM宿主机, 修改其属性

第二步: 使用xming接受SSH X11图形转发

注意: 须要下载对应工具Xming, 而后启动

第三步:从新链接KVM宿主机, 执行virt-manager

第四步:安装中文字符,解决界面乱码问题

[root@kevin ~]# yum install -y dejavu-lgc-sans-fonts
[root@kevin ~]# yum groupinstall -y "Fonts"

//调整字体为中文
[root@kvm-node1 ~]# export LANG=zh_CN.UTF-8

注意:

1.若是使用GUI界面Linux则无需安装便可使用virt-manager 2.若是是MAC笔记本, 仅能使用Crt开启X11图形转发, 同时必须下载XQuartz支持转发

##KVM虚拟机克隆

##KVM虚拟机迁移

##KVM可视化管理

1.安装 WebVirtMgrWebVirtMgr官方参考手册

[root@kvm-node1 ~]# yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
[root@kvm-node1 ~]# yum -y install gcc python-devel git python-pip libvirt-python libxml2-python python-websockify supervisor nginx novnc
[root@kvm-node1 ~]# pip install numpy

2.安装要求和安装PythonDjango环境

[root@kvm-node1 ~]# git clone git://github.com/retspen/webvirtmgr.git
[root@kvm-node1 ~]# cd webvirtmgr
[root@kvm-node1 webvirtmgr]# pip install -r requirements.txt
[root@kvm-node1 webvirtmgr]# ./manage.py syncdb

//用户信息,回车
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'):
Email address: 552408925@qq.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)

//添加额外的超级用户
[root@kvm-node1 webvirtmgr]# ./manage.py collectstatic

3.配置Nginx

[root@kvm-node1 webvirtmgr]# cd ..
[root@kvm-node1 ~]#  mv webvirtmgr /var/www/

//在/etc/nginx/conf.d目录中添加webvirtmgr.conf
[root@kvm-node1 ~]# vim /etc/nginx/conf.d/webvirtmgr.conf
server {
    listen 80 default_server;
    server_name $hostname;
    #access_log /var/log/nginx/webvirtmgr_access_log; 

    location /static/ {
        root /var/www/webvirtmgr/webvirtmgr;
        expires max;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        client_max_body_size 1024M;
    }
}

//注意: 注释/etc/nginx/conf/nginx.conf文件中Server段

//设定目录权限
[root@kvm-node1 ~]# chown -R nginx:nginx /var/www/webvirtmgr

//启动nginx,并将其加入开机自启
[root@kvm-node1 ~]# systemctl start nginx
[root@kvm-node1 ~]# systemctl enable nginx

4.安装配置Supervisor

//建立文件/etc/supervisord.d/webvirtmgr.ini如下内容
[root@kvm-node1 ~]# vim /etc/supervisord.d/webvirtmgr.ini
[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx

[program:webvirtmgr-console]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=nginx

5.启动supervisord并加入开机自启

[root@kvm-node1 ~]# systemctl start supervisord.service 
[root@kvm-node1 ~]# systemctl enable supervisord.service

6.配置ssh认证SSH官方参考资料

[root@kvm-node1 ~]# su - nginx -s /bin/bash
-bash-4.2$ ssh-keygen 
-bash-4.2$ touch ~/.ssh/config
-bash-4.2$ echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
-bash-4.2$ chmod 0600 ~/.ssh/config
-bash-4.2$ ssh-copy-id root@localhost

-w500

-w500

-w500

相关文章
相关标签/搜索