雲計算與虛擬化KVM深度實踐

徐亮偉, 江湖人稱標杆徐。多年互聯網運維工做經驗,曾負責過大規模集羣架構自動化運維管理工做。擅長Web集羣架構與自動化運維,曾負責國內某大型電商運維工做。
我的博客"徐亮偉架構師之路"累計受益數萬人。
筆者Q:55240892五、572891887
架構師羣:471443208html

該博客文章同步視頻在51cto上線了,想詳細瞭解的朋友能夠點擊下方視頻連接地址
[51cto視頻地址傳送門](http://edu.51cto.com/course/13208.html)node

雲計算基本概述

雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問,進入可配置的計算資源共享池(資源包括網絡,服務器,存儲,應用程序,服務),這些資源可以被快速提供,只需投入不多的管理工做,或與服務供應商進行不多的交互。python

在使用雲計算以前的模式和技術linux

一、IDC託管
二、IDC租用
三、虛擬主機(賣空間)
四、VPS:虛擬專用主機 openvz(經過超賣技術坑人) xen(不支持超賣)nginx

雲計算以前,傳統數據中心面臨的問題git

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

雲計算是什麼web

一、雲計算是一個概念, 不是任何技術(指的是資源使用和交付模式)
二、雲計算使用方法必須經過網絡來訪問
三、雲計算的優點(彈性付費、按需付費、快速擴展)
四、雲計算不用關係底層基礎設施架構shell

雲計算優點vim

一、海量動態資源池,靈活的調配和綁定
二、無處不在的網絡訪問
三、隨需應變的自助服務
四、服務應用的可用性
五、快速的彈性伸縮

雲計算服務模型

雲計算分層

IDC 全部都得自行管理
IAAS 基礎設施及服務
PAAS 平臺及服務
SAAS 軟件及服務

雲計算部署模型

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

公有云(阿里雲、騰訊雲)只有使用權,按需付費(技術層面:數據不安全 道德層面)
私有云(自建機房,本身搭建,全部自行管理 (侷限:資源固定))
混合雲(主要業務放私有云、當有臨時需求的時候使用公有云,使用結束不用)

虛擬化技術概述


什麼是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

相關文章
相關標籤/搜索