背景:linux
前篇在討論完雲計算後,本次咱們來討論實現雲計算的基礎--->虛擬化技術,虛擬化官方解釋,ios
是指經過虛擬化技術將一臺計算機虛擬爲多臺邏輯計算機。在一臺計算機上同時運行多個邏輯計算機,每一個邏輯計算機可運行不一樣的操做系統,而且應用程序均可以在相互獨立的空間內運行而互不影響,從而顯著提升計算機的工做效率。api
虛擬化使用軟件的方法從新定義劃分IT資源,能夠實現IT資源的動態分配、靈活調度、跨域共享,提升IT資源利用率,使IT資源可以真正成爲社會基礎設施,服務於各行各業中靈活多變的應用需求。跨域
分類和業務場景選擇:
服務器
1. 一臺或幾臺少許服務器(物理機)
網絡
a. ESXI (經常使用)
dom
b. XenServer
ssh
2. 多臺服務器(物理機)
ide
a. KVM (linux內核級支持) [本次主要講解]
工具
b. oVirt(開源的RHEV)
c. openstack(開源,火爆)
d. Vmware vshpere (虛擬化中的霸主,收費)
e. RHEV(RedHat收費產品)
KVM優點
1. 嵌入到linux正式kernel(兼容性高) (kernel:linux內核)
2. 代碼(內核)級資源調用,不用上下文切換
3. 虛擬機就是一個進程,能夠經過命令來進行管理虛擬機
4. 直接支持NUMP(Non uniform memory access) 非統一內存方式
5. 社區人員多
6. intel和AMD都支持
7. RedHat6和CentOS6以後都內置
5. 其它(被RedHat收購)
a. 保持開源發展模式
b. 更好的商業支持級服務保障
在開始實戰前,咱們來討論一下虛擬化中常見的一個問題
[一臺主機跑多個相同的應用和一個主機上面多個虛擬主機,每一個虛擬主機一個應用的區別]
最終得出的結論以下:
1. 前者性能好,由於虛擬化管理工具也須要佔用計算資源
2. 前者一個應用故障會影響其它剩餘的應用運行狀態,後者基於虛擬主機上因此每一個應用獨立,故障不會互相影響.
3. 前者不易於管理,後者管理容易
4. 後者快照,備份,回覆容易
介紹了這麼多關於虛擬化方面的優點和常識,那如何實現虛擬化呢
下面正式開始實現虛擬化
1.環境準備
[#1#root@kvm ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[#2#root@kvm ~]# uname -a
Linux kvm 3.10.0-327.22.2.el7.x86_64 #1 SMP Thu Jun 23 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
2. 安裝
[#3#root@kvm ~]#yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install
3. 檢查安裝
[#4#root@kvm ~]#rpm -qa qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install
virt-install-1.2.1-8.el7.noarch
qemu-kvm-1.5.3-105.el7_2.4.x86_64
virt-manager-1.2.1-8.el7.noarch
qemu-kvm-tools-1.5.3-105.el7_2.4.x86_64
libvirt-1.2.17-13.el7_2.5.x86_64
4. 查看是否支持虛擬化
a. 標誌
intel vmx
AMD svm
b. 查看是否支有vmx或svm
[#5#root@kvm ~]# grep -E '(vmx|svm)' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm arat epb pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt
5. 建立虛擬機所需硬盤
硬盤格式分類:
1.全鏡像模式
a. 一次性分配空間,性能高,轉換容易
b. 不支持壓縮,快照,鏡像,佔用空間大
c. 表明有raw
2. 稀疏模式
a. 支持壓縮,快照,鏡像
b. 佔用空間小, 使用多少佔用多少
c. 表明 qcow2 (後面使用此硬盤格式)
[#6#root@kvm ~]#qemu-img create -f qcow2 /opt/CentOS-7.1-x86_64.raw 10G
Formatting '/opt/CentOS-7.1-x86_64.raw', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
qemu-img: 經過qemu來建立模擬外部設置(硬盤,網絡等), KVM只能模擬CPU和內存
-f 支持格式,qcow2 稀疏模式
/opt/CentOS-7.1-x86_64.raw 保存的位置和名稱
10G 指定大小
6. 查看硬盤是否建立成功
[#7#root@kvm ~]#lsmod | grep kvm
kvm_intel 162153 0
kvm 525409 1 kvm_intel
7. libvirt設置啓動並開機自啓
[#8#root@kvm ~]#systemctl enable libvirtd.service
[#9#root@kvm ~]#systemctl start libvirtd.service
8. 建立ISO鏡像
經過Vmware Workstation掛載系統盤
[#10#root@kvm ~]#dd if=/dev/cdrom of=/opt/CentOS-7.1.iso
1234944+0 records in
1234944+0 records out
632291328 bytes (632 MB) copied, 30.9402 s, 20.4 MB/s
9. 建立虛擬機
[#11#root@kvm ~]# virt-install --name CentOS-7.1-x86_64 \
--virt-type kvm --ram 1024 \
--cdrom=/opt/CentOS-7.1.iso \
--disk path=/opt/CentOS-7.1-x86_64.raw \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
Starting install...
Creating domain... | 0 B 00:01
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
--name 指定虛擬機名稱,惟一的
--virt-type 指定虛擬技術類型
--ram 分配內存大小
--cdrom 指定安裝鏡像ISO
--disk 指定硬盤
--network 指定網絡
--graphics 指定vnc(來賓)訪問,並容許全部ip
--noautoconsole 關閉自動屬性
10. 經過VNC鏈接
默認第一個建立的虛擬機端口爲5900, 第二個5901,第三個第四個以此類推
設置網卡名爲eth0
光標移動到Install CentOS 7按Tab鍵,在後面輸入net.ifnames=0 biosdevname=0
修改完成後查看網卡名稱
11. 經過virsh管理虛擬機
查看正式在運行的虛擬機 [不顯示狀態爲中止的虛擬機]
[#12#root@kvm ~]# virsh list
Id Name State
----------------------------------------------------
4 CentOS-7.1-x86_64 running
查所全部虛擬機 [包含狀態爲中止的虛擬機]
[#13#root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
4 CentOS-7.1-x86_64 running
正常關閉虛擬機
[#14#root@kvm ~]# virsh shutdown CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 is being shutdown
[#15#root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
- CentOS-7.1-x86_64 shut off
開啓虛擬機
[#16#root@kvm ~]#virsh start CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 started
[#17#root@kvm ~]#virsh list --all
Id Name State
----------------------------------------------------
5 CentOS-7.1-x86_64 running
掛起虛擬機
[#18#root@kvm ~]#virsh suspend CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 suspended
[#19#root@kvm ~]#virsh list --all
Id Name State
----------------------------------------------------
5 CentOS-7.1-x86_64 paused
恢復掛起的虛擬機
[#19#root@kvm ~]#virsh resume CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 resumed
[#20#root@kvm ~]#virsh list --all
Id Name State
----------------------------------------------------
5 CentOS-7.1-x86_64 running
強制關閉虛擬機(正在運行的數據會丟失)
[#21#root@kvm ~]#virsh destroy CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 destroyed
[#22#root@kvm ~]#virsh list --all
Id Name State
----------------------------------------------------
- CentOS-7.1-x86_64 shut off
刪除虛擬機
[#23#root@kvm ~]#virsh undefine CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 has been undefined
[#24#root@kvm ~]#virsh list --all
Id Name State
----------------------------------------------------
12. 修改kvm虛擬機:
[#25#root@kvm ~]# virsh edit CentOS-7.1-x86_64 #編輯虛擬機文件
<vcpu placement='auto' current="1">4</vcpu> #將cpu設置爲自動調整,最低一個,最大四個
Domain CentOS-7.1-x86_64 XML configuration edited.
改完以後重啓才生效
[#26#root@kvm ~]# virsh shutdown CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 is being shutdown
[#27#root@kvm ~]# virsh start CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 started
設置成2個cpu
[#28#root@kvm ~]# virsh setvcpus CentOS-7.1-x86_64 2 --live
設置成3個cpu
[#29#root@kvm ~]# virsh setvcpus CentOS-7.1-x86_64 4 --live
總結:只支持熱添加,不支持熱刪除
回虛擬機查看:
[#30#root@kvm ~]# cat /proc/cpuinfo ----就能夠看到cpu有4核了
########設置內存的熱添加與熱減小########
[#31#root@kvm ~]# virsh edit CentOS-7.1-x86_64
<memory unit='KiB'>4048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
改完以後重啓才生效
[#32#root@kvm ~]# virsh shutdown CentOS-7.1-x86_64
[#33#root@kvm ~]# virsh start CentOS-7.1-x86_64
更改以後回虛擬機查看,內存從1G變成了721M
KVM以內存管理的氣球模式:
[#34#root@kvm ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon
balloon: actual=1024
[#35#root@kvm ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon 600
回虛擬機查看,內存從721變成了297M
[#36#root@kvm ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon 2000
回虛擬機查看,內存從297變成了1697M
13. 網絡設置
因爲建立虛擬機的時候咱們指定爲--network network=default, 默認使用NAT模式,此時只有建立虛擬的宿主機可以訪問此虛擬機.在實踐環境中這是不容許的,咱們須要將其改成橋接模式,供局域網其它用戶訪問使用.
[#31#root@kvm ~]# brctl addbr br0 &&\
> brctl addif br0 eth0 && \
> ip addr del dev eth0 192.168.56.21/24 && \
> ifconfig br0 192.168.56.21/24 up && \
> route add default gw 192.168.56.2 && \
> iptables -F
brctl addbr br0 建立橋接網上 指定名稱爲br0
brctl addif br0 eth0 綁定eth0到br0網橋上
ip addr del dev eth0 192.168.56.21/24 刪除eth0的ip地址
ifconfig br0 192.168.56.21/24 up 設置橋接br0 ip地址,並開啓
route add default gw 192.168.56.2 設置路由
iptables -F 清理防火牆
[#32#root@kvm ~]# virsh edit CentOS-7.1-x86_64 #編輯虛擬機xml文件
修改網絡配置
修改成網橋
重啓虛擬機
[#33#root@kvm ~]#virsh reboot CentOS-7.1-x86_64
Domain CentOS-7.1-x86_64 is being rebooted
此時虛擬機已與宿主機在同一網段中,能夠使用ssh等工具鏈接.