雲計算與虛擬化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

相關文章
相關標籤/搜索