企業私有云容器化架構運維實戰
瞭解
什麼是虛擬化:
虛擬化(Virtualization)技術最早出現在 20 世紀 60 年代的 IBM 大型機系統,在70年代的 System 370 系列中逐漸流行起來,這些機器通過一種叫虛擬機監控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成許多可以運行獨立操作系統軟件的虛擬機(Virtual Machine)實例。隨着近年多核系統、集羣、網格甚至雲計算的廣泛部署,虛擬化技術在商業應用上的優勢日益體現,不僅降低了 IT 成本,而且還增強了系統安全性和可靠性。
常用的虛擬化產品有哪些
1.Kvm(redhat)企業級
2.Vmware:
Vmware-workstation(windows和linux)桌面級
Vmware-fusion(mac)
Vmware-esxi(企業級別)本身就是一個操作系統。
3.hyper-v(微軟)
4.Ovm(oracle公司--Windows linux) virtulbox
5.Xen(rhel6之前所有版本默認用的虛擬化產品)
虛擬化技術的分類:
平臺虛擬化(Platform Virtualization),針對計算機和操作系統的虛擬化//針對計算機操作系統。
資源虛擬化(Resource Virtualization),針對特定的系統資源的虛擬化,比如內存、存儲、網絡資源等。
應用程序虛擬化(Application Virtualization),包括仿真、模擬、解釋技術等。把硬件的東西變成了一個應用
我們通常所說的虛擬化主要是指平臺虛擬化技術,通過使用控制程序(Control Program,也被稱爲 Virtual Machine Monitor(虛擬監控器VMM) 或Hypervisor,隱藏特定計算平臺的實際物理特性,爲用戶提供抽象的、統一的、模擬的計算環境(稱爲虛擬機)。
平臺虛擬化類型
全虛擬化(Full Virtualization):
全虛擬化是指虛擬機模擬了完整的底層硬件,包括處理器、物理內存、時鐘、外設等,使得爲原始硬件設計的操作系統或其它系統軟件完全不做任何修改就可以在虛擬機中運行。
現在的kvm與vmware都支持全虛擬化
全虛擬化的運行速度要快於硬件模擬,但是性能方面不如裸機,因爲Hypervisor需要佔用一些資源
半虛擬化(Para Virtualization):
半虛擬化(也叫超虛擬化)是另一種類似於全虛擬化的技術,它使用Hypervisor分享存取底層的硬件,但是它的guest操作系統集成了虛擬化方面的代碼。因爲操作系統自身能夠與虛擬進程進行很好的協作。
半虛擬化需要guest操作系統做一些修改,使guest操作系統意識到自己是處於虛擬化環境的,但是半虛擬化提供了與原操作系統相近的性能。
硬件輔助虛擬化
硬件輔助虛擬化是指藉助硬件(主要是主機處理器)的支持來實現高效的全虛擬化。
企業級虛擬化與桌面級虛擬化的區別
桌面級虛擬化:
App ---在安裝APP,通過App實現各種功能
guestos ---客戶機也叫客戶操作系統
vmware-workstation(hypervisor(虛擬機管理程序)+圖形管理工具)
os
硬件
企業及虛擬化
App(圖形管理工具)
guestos
os+hypervisor:在操作系統級別加上了虛擬機管理程序
硬件
KVM虛擬化技術簡介
KVM 針對運行在 x86 硬件上的、駐留在內核中的虛擬化基礎結構。KVM 是第一個成爲原生 Linux 內核(2.6.20)的一部分的 hypervisor,它是由 Avi Kivity 開發和維護的,現在歸 Red Hat 所有。
KVM 是作爲內核模塊實現的
KVM安裝
kvm虛擬化平臺軟件一般裝在操作系統爲Centos上面
大家不想把電腦裝爲Centos的操作系統,可以用VMware workstations裝一臺配置較高的虛擬機(cpu、內存、磁盤)給的儘可能最大,然後需要在開啓之前做如下操作
然後打開虛擬機,安裝kvm即可
查看cpu是否支持虛擬化
# cat /proc/cpuinfo | grep -E 'vmx|svm'
"關閉防火牆和selinux"
一般企業如果使用kvm虛擬機平臺,都會把物理服務器裝成Centos的操作系統,然後裝上kvm,創建使用虛擬機
1.需求內核(rhel6以上):
[root@kvm-server ~]# uname -r
3.10.0-1062.el7.x86_64
2.如果之前安裝kvm了清理環境:卸載kvm
[root@kvm-server ~]# yum remove `rpm -qa | egrep 'qemu|virt|kvm'` -y
[root@kvm-server ~]# rm -rf /var/lib/libvirt /etc/libvirt/
3.升級系統:(在安裝虛擬機出錯的情況下,一般是操作系統的版本問題)
[root@kvm-server ~]# yum upgrade
4.安裝軟件:
[root@kvm-server ~]# yum install *qemu* *virt* librbd1-devel -y
其實下載的是下面幾款軟件
[root@kvm-server ~]# yum install qemu-kvm libvirt virt-manager librbd1-devel -y
qemu-kvm libvirt virt-manager
在所謂的kvm技術中,應用到的其實有2個東西:qemu+kvm
kvm負責cpu虛擬化+內存虛擬化,實現了cpu和內存的虛擬化,但kvm不能模擬其他設備;
qemu是模擬IO設備(網卡,磁盤),kvm加上qemu之後就能實現真正意義上服務器虛擬化。
因爲用到了上面兩個東西,所以一般都稱之爲qemu-kvm。
libvirt則是調用kvm虛擬化技術的接口用於管理的,用libvirt管理方便,直接用qemu-kvm的接口太繁瑣。
5.啓動服務:
centos7:
[root@kvm-server ~]# systemctl start libvirtd
6.查看kvm模塊加載:
[root@kvm-server ~]# lsmod | grep kvm
kvm_intel 188644 0
kvm 621480 1 kvm_intel
irqbypass 13503 1 kvm
如果看到有這兩行,說明支持kvm模塊
KVM gustos圖形方式部署安裝虛擬機
[root@kvm-server ~]# virt-manager
====================
下面就是點點點
安裝完成一臺虛擬機之後,網絡模式默認是NAT的。
完全文本方式安裝虛擬機
[root@kvm-server ~]# yum install -y vsftpd #安裝ftp,並配置最後將鏡像上傳到ftp中
[root@kvm-server ~]# mkdir /var/ftp/centos7u4
[root@kvm-server IOS]# mount CentOS-7-x86_64-DVD-1708.iso /var/ftp/centos7u4/
[root@kvm-server ~]# virt-install --connect qemu:///system -n vm10 -r 2050 --disk path=/var/lib/libvirt/images/vm10.img,size=5 --os-type=linux --os-variant=centos7.0 --vcpus=1 --location=ftp://10.0.111.182/centos7u4 -x console=ttyS0 --nographics
用這種方式安裝的操作系統有一個毛病:純文本安裝的輸入時大小寫莫名的變換,遠程ssh沒問題。內存不低於2G
注意:
virt-install
bash: virt-install: 未找到命令...
# yum install libguestfs-tools -y
# yum install virt-install.noarch -y
參數解釋:
-n name
-r 以M爲單位指定分配給虛擬機的內存大小
--disk 指定作爲客戶機存儲的媒介 size以G爲單位的存儲
--os-type 系統類型
--os-variant 系統類型版本
--vcpus 指定核數,不能超過物理cpu
--location 客戶虛擬機安裝源下載,必須爲鏡像掛載在ftp目錄下
-x console=ttyS0 執行終端0
--nographics 無圖形,文本模式
注意:命令敲下去,不要誤操作退出安裝
需要等一會了大約20分鐘左右
按空格退出!
下面的操作根據提示點點就可以了
模板鏡像+配置文件 方式安裝虛擬機
1.虛擬機配置文件
[root@kvm-server ~]# ls /etc/libvirt/qemu
networks vm2.xml
2.儲存虛擬機的介質
[root@kvm-server ~]# ls /var/lib/libvirt/images/
vm2.img
==============================
define方式創建好,不會啓動
create方式創建好,會啓動
實戰:
1.拷貝模板鏡像和配置文件
[root@kvm-server ~]# cp /etc/libvirt/qemu/vm2.xml /etc/libvirt/qemu/vm3.xml
[root@kvm-server ~]# cp /var/lib/libvirt/images/vm2.img /var/lib/libvirt/images/vm3.img
2.修改配置文件
生成新的UUID
[root@kvm-server ~]# uuidgen
2e3fa6db-ff7f-41c3-bc8f-0428e81ebb57
[root@kvm-server ~]# vim /etc/libvirt/qemu/vm3.xml
domain type='kvm'>
<name>vm3</name> #名字不能一樣需要修改
<uuid>2e3fa6db-ff7f-41c3-bc8f-0428e81ebb57</uuid> #uuid不能一樣需要修改
<memory unit='KiB'>1024000</memory> #內存,可選
<currentMemory unit='KiB'>1024000</currentMemory> #當前內存與上面定義一樣
<vcpu placement='static'>2</vcpu> #cpu可選
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>SandyBridge-IBRS</model>
<feature policy='require' name='md-clear'/>
<feature policy='require' name='spec-ctrl'/>
<feature policy='require' name='ssbd'/>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/vm3.img'/> #磁盤鏡像需要修改
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>
<interface type='network'>
<mac address='52:54:00:82:d6:3c'/> #mac地址不能一樣需要修改,只能修改後三段。
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
<address type='virtio-serial' controller='0' bus='0' port='2'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' autoport='yes'>
<listen type='address'/>
<image compression='off'/>
</graphics>
<sound model='ich6'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
<model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='2'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='3'/>
</redirdev>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</memballoon>
<rng model='virtio'>
<backend model='random'>/dev/urandom</backend>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</rng>
</devices>
</domain>
必須修改name,uuid,mac地址,其餘可選
用vim修改完之後需要define一下配置文件
[root@kvm-server ~]# virsh define /etc/libvirt/qemu/vm3.xml
重啓一下:
[root@kvm-server ~]# systemctl restart libvirtd
宿主機開啓路由轉發:
[root@kvm-server ~]# vim /etc/sysctl.conf
[root@kvm-server ~]# sysctl -p
net.ipv4.ip_forward = 1
=============
查看虛擬機列表:
[root@kvm-server ~]# virsh list --all
Id 名稱 狀態
----------------------------------------------------
- vm2 關閉
- vm3 關閉
或者如下: