虚拟化技术的概述及使用
目錄
云計算基礎
一.虛擬化技術
1.虛擬化與云技算的概述
2.虛擬化的開啟
3.虛擬化的架構
4.linux虛擬化平臺安裝
5.虛擬機的構成
二.虛擬化管理
1.虛擬化網絡管理
2.虛擬機配置管理
3.寫一個腳本以后就可以直接創建
4.安裝會總:
一.虛擬化技術
1.虛擬化與云技算的概述
1)虛擬化:
虛擬化是一種技術,顧名思義,就是將不可拆分的實體資源變成可以自由劃分的邏輯資源,從而實現資源的整合、隔離、在分配, 云計算就是利用了虛擬化技術的這個特點。
2)云計算:
云計算是一種服務模式(IAAS) , 其思想就是把各種資源整合起 來, 然后租給有需要的用戶, 其中的資源包括處理器(CPU) 、內 存、存儲、網絡和其它基本的計算資源。通常我們通過虛擬化手 段把這些資源分割打包提供給用戶使用。
2.虛擬化的開啟
1)虛擬化主要廠商
| VMware | VMware Workstation,vSphere |
| Microsoft | Virtual PC,Hyper-V |
| RedHat | KVM,RHEV |
| Citrix | Xen |
| Oracle | Oracle VM VirtualBox |
2)開啟虛擬化
當在windows平臺的VMware中安裝系統時,如果電腦沒有開啟虛擬化,在安裝過程中,會發生錯誤。
查看電腦是否開啟虛擬化,【任務管理器】
windows如未開啟則:
intel CPU開啟虛擬化
開機進入BIOS,在coufiguration選項中,將【 Intel Virtual Technology】選項由【disable】調整為【enable】。
AMD CPU開啟虛擬化
開機進入BIOS,在coufiguration選項中,將【 AMD SVM Technology】選項由【disable】調整為【enable】。
linux查看支持虛擬化
# 查看CPU是否支持虛擬化 ~]# grep -P "vmx|svm" /proc/cpuinfoflags : ... ... vmx # 查看kernel(內核)是否有虛擬化內核 ~]# lsmod |grep kvm kvm_intel 294912 8 kvm ? ? ? 786432 1 kvm_intel irqbypass ?16384 7 kvm ? #如沒有模塊則添加 ~]# modprobe kvm ~]# modprobe kvm-intel3.虛擬化的架構
虛擬層,仿真層,管理層
-KVM是linux內核模塊, 它需要CPU指令集(Intel-VT/AMD-V) 的支持,是一種硬件輔助虛擬化技術
-QEMU是一個虛擬化的仿真工具, 通過ioctI與內核模塊交互 完成對硬件的虛擬化支持
-Libvirt是一個對虛擬化管理的接口和工具, 提供客戶端程 序,例如: virsh,virt-manager
4.linux虛擬化平臺安裝
虛擬化平臺必須的四個軟件包
qemu-kvm -為kvm提供底層系統設備仿真支撐
libvirt-daemon -libvirtd守護進程,管理虛擬機
libvirt-client -客戶端軟件,提供客戶端管理命令
libvirt-daemon-driver-qemu -libvirtd連接qemu的驅動
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.虛擬機的構成
1)配置文件與儲存文件
虛擬配置文件(*.xml)(擴展標記語言)
? ? ? -文件默認路徑:/etc/libvirt/qemu
? ? ? -用途:配置虛擬機資源參數
存儲文件(*.img)
? ? ? ?-文件默認路徑:/var/lib/libvirt/images/
? ? ? ?-用途:仿真虛擬磁盤,儲存所有數據信息
2)cow技術的原理
Copy On Write 寫實復制技術
????????-直接映射原始盤的數據內容
????????-當數據有寫入需求時,在寫入之前自動將數據塊拷貝存入前端盤后,對前端盤進行修改
????????-原始盤始終是只讀的
3)linux使用后端磁盤的命令
注:每一個虛擬機應該有單獨的磁盤
qemu-img 是虛擬機的磁盤管理命令,支持非常多的磁盤
格式,例如 raw, qcow2,vdi,vmdk等等
qemu-img命令格式
-qemu-img子命令 子命令參數 塊文件名稱 大小-常用子命令有:-create 創建一個磁盤-convert 專換磁盤格式-info 查看磁盤信息-f 磁盤格式-b 原始盤 #創建后端盤 ~]# 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 ? # 創建鏈接盤 ~]# qemu-img create -f qcow2 -b master.img node.img 30G二.虛擬化管理
1.虛擬化網絡管理
1)網橋的概述
早期的網橋就是將兩個計算機連接起來的網絡通信設備,但是在現在很多虛擬化技術,無論是虛擬機還是容器技術想要進行網絡通信所以提出了個虛擬網橋的概念。虛擬網橋的概念的提出含義就是使用網橋搭建一個局域網而虛擬機和容器和宿主機是局域網內同等級別節點。用一句話總結就是現在虛擬化技術就是通過網橋技術將宿主機和虛擬機和容器搭建成局域網,是虛擬機和宿主機之間可以通信。
所以一般創建虛擬機想要上外網一般有兩種方式一種是通過橋接借助宿主機的物理連接,然后和宿主機配上相同的上網環境的就可以上網,還有一種是用橋接的方式是虛擬機和宿主機之間能夠通信,然后借助NAT(網絡地址轉換)使用宿主機代理上網。而docker就是使用的這種技術。
2)網絡管理命令
| virsh tnet-list [--all] | 列出虛擬網絡 |
| virsh net-start | 啟動虛擬交換機 |
| virsh net -destroy | 強制停止虛擬交換機 |
| virsh net-define | 根據xml文件創建虛擬網絡 |
| virsh net- rundefine | 刪除一個虛擬網絡設備 |
| virsh net-edit | 修改虛擬交換機的配置 |
| virsh net-autostart | 設置開機自啟動 |
3)虛擬網橋創建(xml擴展標記語言)
注:官網手冊 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設備名 # 網橋的模式 mode='nat'可以上網 # bridge name='vbr':ifconfig可以看到的名字 # address,netmask:網橋的IP地址與子網掩碼 # range start=開始ip,end=結束ip ? ## 創建網橋設備 ~]# virsh net-define /etc/libvirt/qemu/networks/vbr.xml Network vbr defined from /etc/libvirt/qemu/networks/vbr.xml ? # 查看網橋設備 ~]# virsh net-list --all Name ? ? ? ? ? ? ? ? State ? ? Autostart ? ? Persistent ---------------------------------------------------------- vbr ? ? ? ? ? ? ? ? inactive ? no ? ? ? ? ? ?yes ? --all ? 顯示所有網橋因為沒有設置開啟 # Name 網橋名;State 啟動狀態(inactive【沒有啟動】);Autostart 是否開機自啟 ## 設置開啟自啟 ~]# virsh net-autostart vbr Network vbr marked as autostarted ? ~]# virsh net-list --all Name ? ? ? ? ? ? ? ? State ? ? Autostart ? ? Persistent ---------------------------------------------------------- vbr ? ? ? ? ? ? ? ? inactive ? yes ? ? ? ? ? yes ## 啟動網橋 ~]# virsh net-start vbr Network vbr started ? ## 查看是否啟動 ~]# 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 啟動 ## 修改網橋設備 ~]# virsh net-edit vbr Network vbr XML configuration not changed. ? ## 重啟生效 ~]# virsh net-destroy vbr Network vbr destroyed ~]# virsh net-start vbr Network vbr started2.虛擬機配置管理
1)創建虛擬機配置文件
官網文件參拷 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 ...>證明是一個kvm的虛擬機 # <name....>虛擬機的名字 # <memory..>虛擬最大內存;<currentMemory...>虛擬機有效內存;一般生產環境當兩個內存相同時最合適(測試環境可不同;如該服務最少幾個G能起來【8:2】) # <vcpu...> 幾CPU # <os...> 系統啟動引導配置;32位的64位的系統的區別;32位代表2的32次冪的字長(4G),最大只能識別4G;64位就是2的64次冪的字長(16E);所以arch='x86_64';machine=類型;boot dev=硬盤驅動(hd)【cdrom光驅啟動{可裝windows}】,<bootmenu 菜單管理;<bios bios管理; # <features> 電源(配置休眠策略); # <cpu mode=cpu類型(host-passthrough表示使用真機的cpu) # <clock offset='localtime'>使用本機的時間 # <on_poweroff...><on_reboot...><on_crash..>重置,重啟,電源(相當于服務器上的電源) ? ##<devices>定義硬件設備 #<emulator>仿真程序的路徑; # <disk...>定義虛擬機硬盤路徑<source...>;<target...> 設備的識別名,設備的種線與驅動; #<interface ..>網卡配置;<source bridge=默認vbr可寫多個不同的設備 # <channel..>虛擬機的管理程序 # <console>;<memballoon>連接設備2)創建虛擬機
~]# 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 # 開啟虛擬機 ~]# virsh start vmhost Domain vmhost started ~]# virsh list --allId ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State ----------------------------------------------------- ? ? vmhost ? ? ? ? ? ? ? ? ? ? ? ? running# 進入虛擬機~]# virsh console vmhost注:多拍幾次回車密碼與用戶會顯示在屏幕上3)虛擬機管理命令
| virsh list --all | 列出虛擬機 |
| virsh start/shutdown | 啟動/關閉虛擬機 |
| virsh destroy | 強制停止虛擬機 |
| virsh define/undefine | 創建/刪除虛擬機 |
| virsh ttyconsole | 顯示終端設備 |
| virsh console | 連接虛擬機console |
| virsh edit | 修改虛擬機配置 |
| virsh autostart | 設置虛擬機自啟動 |
| virsh dominfo | 查看虛擬機摘要信息 |
| virsh domiflist | 查看虛擬機網卡信息 |
| virsh domblklist | 查看虛擬機硬盤信息 |
# 查看虛擬機網卡信息 ~]# 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 ? # 查看虛擬機硬盤信息 ~]# virsh domblklist vmhost Target ? ? Source ------------------------------------------------ vda ? ? ? /var/lib/libvirt/images/node.img ? # 修改虛擬機配置 ~]# virsh edit vmhost Domain vmhost XML configuration not changed. ? # 刪除虛擬機~]# virsh undefine vmhost Domain vmhost has been undefined ~]# virsh list --allId ? Name ? ? ? ? ? ? ? ? ? ? ? ? ? State ----------------------------------------------------
3.寫一個腳本以后就可以直接創建
~]# 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 # 執行測試 ~]# 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 "請輸入要創建的名字:" 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 輸入錯誤 fi ~]# mv clone.sh /usr/sbin/clone ? ## 測試 ~]# clone 請輸入要創建的名字: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.安裝會總:
1)裝包,與測試是否支持虛擬化
2)創建后端盤并連接一個
文件位置 :/var/lib/libvirt/images
3)創建虛擬機配置文件
文件位置 :/etc/libvirt/qemu/
4)使用方法
總結
以上是生活随笔為你收集整理的虚拟化技术的概述及使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rz与sz命令
- 下一篇: 私有云Opetstack的创建与运用