虚拟化技术的概述及使用
目錄
云計(jì)算基礎(chǔ)
一.虛擬化技術(shù)
1.虛擬化與云技算的概述
2.虛擬化的開啟
3.虛擬化的架構(gòu)
4.linux虛擬化平臺(tái)安裝
5.虛擬機(jī)的構(gòu)成
二.虛擬化管理
1.虛擬化網(wǎng)絡(luò)管理
2.虛擬機(jī)配置管理
3.寫一個(gè)腳本以后就可以直接創(chuàng)建
4.安裝會(huì)總:
一.虛擬化技術(shù)
1.虛擬化與云技算的概述
1)虛擬化:
虛擬化是一種技術(shù),顧名思義,就是將不可拆分的實(shí)體資源變成可以自由劃分的邏輯資源,從而實(shí)現(xiàn)資源的整合、隔離、在分配, 云計(jì)算就是利用了虛擬化技術(shù)的這個(gè)特點(diǎn)。
2)云計(jì)算:
云計(jì)算是一種服務(wù)模式(IAAS) , 其思想就是把各種資源整合起 來, 然后租給有需要的用戶, 其中的資源包括處理器(CPU) 、內(nèi) 存、存儲(chǔ)、網(wǎng)絡(luò)和其它基本的計(jì)算資源。通常我們通過虛擬化手 段把這些資源分割打包提供給用戶使用。
2.虛擬化的開啟
1)虛擬化主要廠商
| VMware | VMware Workstation,vSphere |
| Microsoft | Virtual PC,Hyper-V |
| RedHat | KVM,RHEV |
| Citrix | Xen |
| Oracle | Oracle VM VirtualBox |
2)開啟虛擬化
當(dāng)在windows平臺(tái)的VMware中安裝系統(tǒng)時(shí),如果電腦沒有開啟虛擬化,在安裝過程中,會(huì)發(fā)生錯(cuò)誤。
查看電腦是否開啟虛擬化,【任務(wù)管理器】
windows如未開啟則:
intel CPU開啟虛擬化
開機(jī)進(jìn)入BIOS,在coufiguration選項(xiàng)中,將【 Intel Virtual Technology】選項(xiàng)由【disable】調(diào)整為【enable】。
AMD CPU開啟虛擬化
開機(jī)進(jìn)入BIOS,在coufiguration選項(xiàng)中,將【 AMD SVM Technology】選項(xiàng)由【disable】調(diào)整為【enable】。
linux查看支持虛擬化
# 查看CPU是否支持虛擬化 ~]# grep -P "vmx|svm" /proc/cpuinfoflags : ... ... vmx # 查看kernel(內(nèi)核)是否有虛擬化內(nèi)核 ~]# lsmod |grep kvm kvm_intel 294912 8 kvm ? ? ? 786432 1 kvm_intel irqbypass ?16384 7 kvm ? #如沒有模塊則添加 ~]# modprobe kvm ~]# modprobe kvm-intel3.虛擬化的架構(gòu)
虛擬層,仿真層,管理層
-KVM是linux內(nèi)核模塊, 它需要CPU指令集(Intel-VT/AMD-V) 的支持,是一種硬件輔助虛擬化技術(shù)
-QEMU是一個(gè)虛擬化的仿真工具, 通過ioctI與內(nèi)核模塊交互 完成對(duì)硬件的虛擬化支持
-Libvirt是一個(gè)對(duì)虛擬化管理的接口和工具, 提供客戶端程 序,例如: virsh,virt-manager
4.linux虛擬化平臺(tái)安裝
虛擬化平臺(tái)必須的四個(gè)軟件包
qemu-kvm -為kvm提供底層系統(tǒng)設(shè)備仿真支撐
libvirt-daemon -libvirtd守護(hù)進(jìn)程,管理虛擬機(jī)
libvirt-client -客戶端軟件,提供客戶端管理命令
libvirt-daemon-driver-qemu -libvirtd連接qemu的驅(qū)動(dòng)
1)安裝軟件
~]# yum -y install qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu ~]# systemctl enable --now libvirtd ~]# virsh version Compiled against library: libvirt 4.5.0 Using library: libvirt 4.5.0 Using API: QEMU 4.5.05.虛擬機(jī)的構(gòu)成
1)配置文件與儲(chǔ)存文件
虛擬配置文件(*.xml)(擴(kuò)展標(biāo)記語言)
? ? ? -文件默認(rèn)路徑:/etc/libvirt/qemu
? ? ? -用途:配置虛擬機(jī)資源參數(shù)
存儲(chǔ)文件(*.img)
? ? ? ?-文件默認(rèn)路徑:/var/lib/libvirt/images/
? ? ? ?-用途:仿真虛擬磁盤,儲(chǔ)存所有數(shù)據(jù)信息
2)cow技術(shù)的原理
Copy On Write 寫實(shí)復(fù)制技術(shù)
????????-直接映射原始盤的數(shù)據(jù)內(nèi)容
????????-當(dāng)數(shù)據(jù)有寫入需求時(shí),在寫入之前自動(dòng)將數(shù)據(jù)塊拷貝存入前端盤后,對(duì)前端盤進(jìn)行修改
????????-原始盤始終是只讀的
3)linux使用后端磁盤的命令
注:每一個(gè)虛擬機(jī)應(yīng)該有單獨(dú)的磁盤
qemu-img 是虛擬機(jī)的磁盤管理命令,支持非常多的磁盤
格式,例如 raw, qcow2,vdi,vmdk等等
qemu-img命令格式
-qemu-img子命令 子命令參數(shù) 塊文件名稱 大小-常用子命令有:-create 創(chuàng)建一個(gè)磁盤-convert 專換磁盤格式-info 查看磁盤信息-f 磁盤格式-b 原始盤 #創(chuàng)建后端盤 ~]# cd /var/lib/libvirt/images ~]# qemu-img create -f qcow2 master.img 10G Formatting 'master.img', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off ~]# ls node.img ~]# qemu-img info master.img image: master.img file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 196K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false ? # 創(chuàng)建鏈接盤 ~]# qemu-img create -f qcow2 -b master.img node.img 30G二.虛擬化管理
1.虛擬化網(wǎng)絡(luò)管理
1)網(wǎng)橋的概述
早期的網(wǎng)橋就是將兩個(gè)計(jì)算機(jī)連接起來的網(wǎng)絡(luò)通信設(shè)備,但是在現(xiàn)在很多虛擬化技術(shù),無論是虛擬機(jī)還是容器技術(shù)想要進(jìn)行網(wǎng)絡(luò)通信所以提出了個(gè)虛擬網(wǎng)橋的概念。虛擬網(wǎng)橋的概念的提出含義就是使用網(wǎng)橋搭建一個(gè)局域網(wǎng)而虛擬機(jī)和容器和宿主機(jī)是局域網(wǎng)內(nèi)同等級(jí)別節(jié)點(diǎn)。用一句話總結(jié)就是現(xiàn)在虛擬化技術(shù)就是通過網(wǎng)橋技術(shù)將宿主機(jī)和虛擬機(jī)和容器搭建成局域網(wǎng),是虛擬機(jī)和宿主機(jī)之間可以通信。
所以一般創(chuàng)建虛擬機(jī)想要上外網(wǎng)一般有兩種方式一種是通過橋接借助宿主機(jī)的物理連接,然后和宿主機(jī)配上相同的上網(wǎng)環(huán)境的就可以上網(wǎng),還有一種是用橋接的方式是虛擬機(jī)和宿主機(jī)之間能夠通信,然后借助NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)使用宿主機(jī)代理上網(wǎng)。而docker就是使用的這種技術(shù)。
2)網(wǎng)絡(luò)管理命令
| virsh tnet-list [--all] | 列出虛擬網(wǎng)絡(luò) |
| virsh net-start | 啟動(dòng)虛擬交換機(jī) |
| virsh net -destroy | 強(qiáng)制停止虛擬交換機(jī) |
| virsh net-define | 根據(jù)xml文件創(chuàng)建虛擬網(wǎng)絡(luò) |
| virsh net- rundefine | 刪除一個(gè)虛擬網(wǎng)絡(luò)設(shè)備 |
| virsh net-edit | 修改虛擬交換機(jī)的配置 |
| virsh net-autostart | 設(shè)置開機(jī)自啟動(dòng) |
3)虛擬網(wǎng)橋創(chuàng)建(xml擴(kuò)展標(biāo)記語言)
注:官網(wǎng)手冊(cè) https://libvirt.org/format.html
直接看network中的nat就行,其他先用直接套用
~]# cd /etc/libvirt/qemu/networks ~]# vim vbr.xml <network> <name>vbr</name> <forward mode='nat'/> <bridge name='vbr' stp='on' delay='0'/> <ip address='192.168.100.254' netmask='255.255.255.0'><dhcp><range start='192.168.100.100' end='192.168.100.200'/></dhcp> </ip> </network> # vbr設(shè)備名 # 網(wǎng)橋的模式 mode='nat'可以上網(wǎng) # bridge name='vbr':ifconfig可以看到的名字 # address,netmask:網(wǎng)橋的IP地址與子網(wǎng)掩碼 # range start=開始ip,end=結(jié)束ip ? ## 創(chuàng)建網(wǎng)橋設(shè)備 ~]# virsh net-define /etc/libvirt/qemu/networks/vbr.xml Network vbr defined from /etc/libvirt/qemu/networks/vbr.xml ? # 查看網(wǎng)橋設(shè)備 ~]# virsh net-list --all Name ? ? ? ? ? ? ? ? State ? ? Autostart ? ? Persistent ---------------------------------------------------------- vbr ? ? ? ? ? ? ? ? inactive ? no ? ? ? ? ? ?yes ? --all ? 顯示所有網(wǎng)橋因?yàn)闆]有設(shè)置開啟 # Name 網(wǎng)橋名;State 啟動(dòng)狀態(tài)(inactive【沒有啟動(dòng)】);Autostart 是否開機(jī)自啟 ## 設(shè)置開啟自啟 ~]# virsh net-autostart vbr Network vbr marked as autostarted ? ~]# virsh net-list --all Name ? ? ? ? ? ? ? ? State ? ? Autostart ? ? Persistent ---------------------------------------------------------- vbr ? ? ? ? ? ? ? ? inactive ? yes ? ? ? ? ? yes ## 啟動(dòng)網(wǎng)橋 ~]# virsh net-start vbr Network vbr started ? ## 查看是否啟動(dòng) ~]# virsh net-list Name ? ? ? ? ? ? ? ? State ? ? Autostart ? ? Persistent ---------------------------------------------------------- vbr ? ? ? ? ? ? ? ? active ? ? yes ? ? ? ? ? yes ~]# ifconfig vbr: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 192.168.100.254 netmask 255.255.255.0 broadcast 192.168.100.255ether 52:54:00:a8:36:ce txqueuelen 1000 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # active 啟動(dòng) ## 修改網(wǎng)橋設(shè)備 ~]# virsh net-edit vbr Network vbr XML configuration not changed. ? ## 重啟生效 ~]# virsh net-destroy vbr Network vbr destroyed ~]# virsh net-start vbr Network vbr started2.虛擬機(jī)配置管理
1)創(chuàng)建虛擬機(jī)配置文件
官網(wǎng)文件參拷 https://libvirt.org/format.html
~]# vim node_bash.xml<name>node_base</name><memory unit='KB'>2248000</memory><currentMemory unit='KB'>2248000</currentMemory><vcpu placement='static'>2</vcpu><os><type arch='x86_64' machine='pc'>hvm</type><boot dev='hd'/><bootmenu enable='yes'/><bios useserial='yes'/></os><features><acpi/><apic/></features><cpu mode='host-passthrough'></cpu><clock offset='localtime'/><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>restart</on_crash><devices><emulator>/usr/libexec/qemu-kvm</emulator><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/node_base.img'/><target dev='vda' bus='virtio'/></disk><interface type='bridge'><source bridge='vbr'/><model type='virtio'/></interface><channel type='unix'><target type='virtio' name='org.qemu.guest_agent.0'/></channel><serial type='pty'></serial><console type='pty'><target type='serial'/></console><memballoon model='virtio'></memballoon></devices> </domain> ? ? # <domain ...>證明是一個(gè)kvm的虛擬機(jī) # <name....>虛擬機(jī)的名字 # <memory..>虛擬最大內(nèi)存;<currentMemory...>虛擬機(jī)有效內(nèi)存;一般生產(chǎn)環(huán)境當(dāng)兩個(gè)內(nèi)存相同時(shí)最合適(測(cè)試環(huán)境可不同;如該服務(wù)最少幾個(gè)G能起來【8:2】) # <vcpu...> 幾CPU # <os...> 系統(tǒng)啟動(dòng)引導(dǎo)配置;32位的64位的系統(tǒng)的區(qū)別;32位代表2的32次冪的字長(zhǎng)(4G),最大只能識(shí)別4G;64位就是2的64次冪的字長(zhǎng)(16E);所以arch='x86_64';machine=類型;boot dev=硬盤驅(qū)動(dòng)(hd)【cdrom光驅(qū)啟動(dòng){可裝windows}】,<bootmenu 菜單管理;<bios bios管理; # <features> 電源(配置休眠策略); # <cpu mode=cpu類型(host-passthrough表示使用真機(jī)的cpu) # <clock offset='localtime'>使用本機(jī)的時(shí)間 # <on_poweroff...><on_reboot...><on_crash..>重置,重啟,電源(相當(dāng)于服務(wù)器上的電源) ? ##<devices>定義硬件設(shè)備 #<emulator>仿真程序的路徑; # <disk...>定義虛擬機(jī)硬盤路徑<source...>;<target...> 設(shè)備的識(shí)別名,設(shè)備的種線與驅(qū)動(dòng); #<interface ..>網(wǎng)卡配置;<source bridge=默認(rèn)vbr可寫多個(gè)不同的設(shè)備 # <channel..>虛擬機(jī)的管理程序 # <console>;<memballoon>連接設(shè)備2)創(chuàng)建虛擬機(jī)
~]# cp node_bash.xml /etc/libvirt/qemu/vmhost.xml ~]# virsh define /etc/libvirt/qemu/node_base.xml Domain vmhost defined from /etc/libvirt/qemu/node_base.xml ? ~]# virsh list --allId ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State ----------------------------------------------------- ? ? vmhost ? ? ? ? ? ? ? ? ? ? ? ? shut off # 開啟虛擬機(jī) ~]# virsh start vmhost Domain vmhost started ~]# virsh list --allId ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State ----------------------------------------------------- ? ? vmhost ? ? ? ? ? ? ? ? ? ? ? ? running# 進(jìn)入虛擬機(jī)~]# virsh console vmhost注:多拍幾次回車密碼與用戶會(huì)顯示在屏幕上3)虛擬機(jī)管理命令
| virsh list --all | 列出虛擬機(jī) |
| virsh start/shutdown | 啟動(dòng)/關(guān)閉虛擬機(jī) |
| virsh destroy | 強(qiáng)制停止虛擬機(jī) |
| virsh define/undefine | 創(chuàng)建/刪除虛擬機(jī) |
| virsh ttyconsole | 顯示終端設(shè)備 |
| virsh console | 連接虛擬機(jī)console |
| virsh edit | 修改虛擬機(jī)配置 |
| virsh autostart | 設(shè)置虛擬機(jī)自啟動(dòng) |
| virsh dominfo | 查看虛擬機(jī)摘要信息 |
| virsh domiflist | 查看虛擬機(jī)網(wǎng)卡信息 |
| virsh domblklist | 查看虛擬機(jī)硬盤信息 |
# 查看虛擬機(jī)網(wǎng)卡信息 ~]# virsh domiflist vmhost Interface Type ? ? ? Source ? ? Model ? ? ? MAC ------------------------------------------------------- vnet0 ? ? ? ? bridge ? ? vbr ? ? ? virtio ? ? ?52:54:00:2e:bc:20 ~]# ifconfig vnet: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500ether 52:54:00:a8:36:ce txqueuelen 1000 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ? # 查看虛擬機(jī)硬盤信息 ~]# virsh domblklist vmhost Target ? ? Source ------------------------------------------------ vda ? ? ? /var/lib/libvirt/images/node.img ? # 修改虛擬機(jī)配置 ~]# virsh edit vmhost Domain vmhost XML configuration not changed. ? # 刪除虛擬機(jī)~]# virsh undefine vmhost Domain vmhost has been undefined ~]# virsh list --allId ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State ----------------------------------------------------
3.寫一個(gè)腳本以后就可以直接創(chuàng)建
~]# vim clone.sh #!/bin/bash cd /var/lib/libvirt/images qemu-img create -f qcow2 -b master.qcow2 ${1}.img 30G sed "s,node_base,${1}," node_bash.xml > /etc/libvirt/qemu/${1}.xml virsh define /etc/libvirt/qemu/${1}.xml # 執(zhí)行測(cè)試 ~]# mv node_bash.xml /var/lib/libvirt/images ~]# ./clone.sh keke Formatting 'keke.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain keke defined from /etc/libvirt/qemu/keke.xml ? ~]# virsh list --allId ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State ----------------------------------------------------- ? ? keke ? ? ? ? ? ? ? ? ? ? ? ? ? shut off修改腳本1
~]# vim clone.sh #!/bin/bash if (( $# == 1 ));thencd /var/lib/libvirt/imagesqemu-img create -f qcow2 -b master.qcow2 ${1}.img 30Gsed "s,node_base,${1}," node_base.xml >/etc/libvirt/qemu/${1}.xmlvirsh define /etc/libvirt/qemu/${1}.xml elseecho $0 vmname fi修改腳本2
~]# vim clone.sh #!/bin/bash read -p "請(qǐng)輸入要?jiǎng)?chuàng)建的名字:" keke if (( $? == 0 ));thenfor i in $(echo $keke)do ?cd /var/lib/libvirt/imagesqemu-img create -f qcow2 -b master.qcow2 ${i}.img 30Gsed "s,node_base,${i}," node_bash.xml > /etc/libvirt/qemu/${i}.xmlvirsh define /etc/libvirt/qemu/${i}.xmldone elseecho $0 輸入錯(cuò)誤 fi ~]# mv clone.sh /usr/sbin/clone ? ## 測(cè)試 ~]# clone 請(qǐng)輸入要?jiǎng)?chuàng)建的名字:node1 node2 node3 node4 Formatting 'node1.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain node1 defined from /etc/libvirt/qemu/node1.xml ? Formatting 'node2.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain node2 defined from /etc/libvirt/qemu/node2.xml ? Formatting 'node3.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain node3 defined from /etc/libvirt/qemu/node3.xml ? Formatting 'node4.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain node4 defined from /etc/libvirt/qemu/node4.xml ? ~]# virsh list --allId ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State ----------------------------------------------------- ? ? node1 ? ? ? ? ? ? ? ? ? ? ? ? shut off- ? ? node2 ? ? ? ? ? ? ? ? ? ? ? ? shut off- ? ? node3 ? ? ? ? ? ? ? ? ? ? ? ? shut off- ? ? node4 ? ? ? ? ? ? ? ? ? ? ? ? shut off批量刪除
~]# vim remove.sh #!/bin/bash virsh list --all | ?awk 'NR>2{print $2}' | xargs -i virsh undefine {} ~]# chmod +x remove.sh ~]# ./remove.sh ? Domain node1 has been undefined ? Domain node2 has been undefined ? Domain node3 has been undefined ? Domain node4 has been undefined ? Domain node_base has been undefined ? [root@VM-0-98-centos ~]# virsh list --allId ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State ----------------------------------------------------4.安裝會(huì)總:
1)裝包,與測(cè)試是否支持虛擬化
2)創(chuàng)建后端盤并連接一個(gè)
文件位置 :/var/lib/libvirt/images
3)創(chuàng)建虛擬機(jī)配置文件
文件位置 :/etc/libvirt/qemu/
4)使用方法
總結(jié)
以上是生活随笔為你收集整理的虚拟化技术的概述及使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rz与sz命令
- 下一篇: 私有云Opetstack的创建与运用