虛擬化之KVM(上)
一:傳統的物理機部署方案、虛擬化與雲端計算定義:
伺服器選型及採購—IDC選擇及上架-系統選擇及安裝–應用規劃及部署–域名選擇及註冊–DNS對映–外網訪問:
工信部備案-公安部備案–ICP備案(電子商務網站–>ICP證經營性ICP備案),遊戲公司文化部(文網文)備案等,在備案沒有成功之前網站是不能上線訪問的,論壇BBS有BBS公告備案是備案的前置審批,沒有的話備案不成功,還要在公安局系統備案,另外域名接入到一個地方比如機房還要做接入備案,備案在個人名下的備案不能直接轉公司,個人登出後網站屬於未備案狀態隨時可能會被封,域名備案一般可以找代理,因為過程比較複雜:
傳統資料中心面臨的問題:
伺服器資源利用率低下,CPU、記憶體等不能共享
資源分配不合理
初始化成本高
自動化能力差
叢集環境需要大量的伺服器主機
1.1:雲端計算的定義
雲端計算是一種交付模式
雲端計算必須通過網路使用
支援彈性橫向擴充套件、按需付費和快速擴充套件
無需關心基礎設定,伺服器硬體、儲存、機房安全、硬體監控、底層資料安全等無需考慮
1.2:雲端計算的概念與分類:
雲端計算是概念最早是由Google 前執行長埃裡克•施密特(Eric Schmidt)在2006 年8 月9 日的搜尋引擎大會上首次提出的一種構想,而“雲端計算”就是這種構想的代名詞,雲端計算以虛擬化為基礎,以網路為中心,為使用者提供安全、快速、便捷的資料儲存和網路計算服務,包括所需要的硬體、平臺、軟體及服務等資源,而提供資源的網路就被稱為“雲”。
公有云:比如aws、阿里雲以及azure、金山雲、騰訊雲等都屬於公有云,每個人都可以付費使用,不需要自己關心底層硬體,但是資料安全需要考利。
私有云:在自己公司內部或IDC自建Openstack、VMware等環境
混合雲:臨時需求使用公有云,但是主要業務放在自己的私有云,即自己的私有云的部分業務和公有云有交接,這部分稱為混合雲
1.3:雲端計算的分層:
1.4:虛擬化的分類:
伺服器虛擬化-虛擬伺服器
桌面虛擬化-瘦客戶機連線win7 實現普通辦公
儲存虛擬化-SAN(基於磁碟)/NAS(NFS/Samba)/GlusterFS
應用虛擬化-將辦公軟體虛擬化,最典型的就是office
網路虛擬化-SDN
1.5:KVM
kmv是一種技術,雲端計算是一種模式,虛擬化是利用相應的技術方法在一臺物理機器上將其按照不同的需求劃分成多個相同或者不同的虛擬作業系統,並且各個虛擬系統可以同時執行,互不干擾,其中任何一個虛擬系統的損壞都不影響同一物理伺服器上的其他虛擬系統。
二:虛擬化技術之KVM:
Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模組,自Linux 2.6.20之後整合在Linux的各個主要發行版本中。它使用Linux自身的排程器進行管理,所以相對於Xen,其核心原始碼很少。KVM目前已成為學術界的主流VMM之一。
KVM的虛擬化需要硬體支援(如Intel VT技術或者AMD V技術)。是基於硬體的完全虛擬化。而Xen早期則是基於軟體模擬的Para-Virtualization,新版本則是基於硬體支援的完全虛擬化。但Xen本身有自己的程序排程器,儲存管理模組等,所以程式碼較為龐大。廣為流傳的商業系統虛擬化軟體VMware ESX系列是基於軟體模擬的Full-Virtualization。
IBM,文件:http://www.ibm.com/developerworks/cn/linux/l-using-kvm/
lxd容器虛擬化: https://linuxcontainers.org/lxd/introduction/
qume是軟體虛擬化,即使用軟體完全模擬出一個具備CPU/記憶體/和硬碟的等裝置的伺服器,KVM是全虛擬化,Xen是半虛擬化,KVM在部分裝置也支援半虛擬化
2.1:環境準備:
2:2.1:確認CPU已經支援虛擬化,intel的CPU虛擬化技術交vmx,AMD的CPU交svm:
[[email protected] ~]# 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 ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase tsc_adjust smep
2.2.3:啟動libvirtsd並設定為開機啟動,librirtd會建立一個橋接的網絡卡virbr0而且IP地址是192.168.122.1:
[[email protected] ~]# systemctl start libvirtd [[email protected] ~]# systemctl enable libvirtd [[email protected] ~]# ifconfig virbr0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:cb:ca:b0 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2.2.4:為虛擬機器分配IP地址的服務:
[[email protected] ~]# ps -aux | grep dns nobody 2877 0.0 0.0 15552 888 ? S 13:06 0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper root 2878 0.0 0.0 15524 180 ? S 13:06 0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper root 4546 0.0 0.0 112664 980 pts/0 S+ 13:29 0:00 grep --color=auto dns
2.2.5:建立磁碟(虛擬機器映像檔案):
[[email protected] ~]# qemu-img create -f qcow2 /opt/CentOS-7-x86_64.qcow2 10G #建立一個格式為qcow2大小為10G的裸磁碟 Formatting '/opt/CentOS-7-x86_64.qcow2', fmt=qcow2 size=10737418240
2.2.6:開始安裝:
[[email protected] ~]# virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/opt/CentOS-7-x86_64-DVD-1511.iso --disk path=/opt/CentOS-7-x86_64.qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole 開始安裝...... 建立域...... | 0 B 00:00:01 域安裝仍在進行。您可以重新連線 到控制檯以便完成安裝程序。 #virsh-install命令幫助: [[email protected]-node1 ~]# virt-install --help usage: virt-install --name NAME --ram RAM STORAGE INSTALL [options] 使用指定安裝介質新建虛擬機器。 optional arguments: -h, --help show this help message and exit --version show program's version number and exit --connect URI 使用 libvirt URI 連線到 hypervisor 通用選項: -n NAME, --name NAME 客戶端事件名稱 --memory MEMORY 配置虛擬機器記憶體分配。例如: --memory 1024 (in MiB) --memory 512,maxmemory=1024 --vcpus VCPUS 為虛擬機器配置的 vcpus 數。例如: --vcpus 5 --vcpus 5,maxcpus=10,cpuset=1-4,6,8 --vcpus sockets=2,cores=4,threads=2, --cpu CPU CPU 型號及功能。例如: --cpu coreduo,+x2apic --cpu host --metadata METADATA 配置虛擬機器元資料。例如: --metadata name=foo,title="My pretty title",uuid=... --metadata description="My nice long description" 安裝方法選項: --cdrom CDROM 光碟機安裝介質 -l LOCATION, --location LOCATION 安裝源(例如:nfs:host:/path、http://host/path ftp://host/path) --pxe 使用 PXE 協議從網路引導 --import 在磁碟映像中構建虛擬機器 --livecd 將光碟機介質視為 Live CD -x EXTRA_ARGS, --extra-args EXTRA_ARGS 附加到使用 --location 引導的核心的引數 --initrd-inject INITRD_INJECT 使用 --location 為 initrd 的 root 新增給定檔案 --os-variant DISTRO_VARIANT 在其中安裝 OS 變體的虛擬機器,比如 'fedora18'、'rhel6'、'winxp' 等等。 --boot BOOT 配置虛擬機器引導設定。例如: --boot hd,cdrom,menu=on --boot init=/sbin/init (for containers) --idmap IDMAP 為 LXC 容器啟用使用者名稱稱空間。例如: --idmap uid_start=0,uid_target=1000,uid_count=10 裝置選項: --disk DISK 使用不同選項指定儲存。例如: --disk size=10 (new 10GiB image in default location) --disk /my/existing/disk,cache=none --disk device=cdrom,bus=scsi --disk=? -w NETWORK, --network NETWORK 配置虛擬機器網路介面。例如: --network bridge=mybr0 --network network=my_libvirt_virtual_net --network network=mynet,model=virtio,mac=00:11... --network none --network help --graphics GRAPHICS 配置虛擬機器顯示設定。例如: --graphics vnc --graphics spice,port=5901,tlsport=5902 --graphics none --graphics vnc,password=foobar,port=5910,keymap=ja --controller CONTROLLER 配置虛擬機器控制程式裝置。例如: --controller type=usb,model=ich9-ehci1 --input INPUT 配置虛擬機器輸入裝置。例如: --input tablet --input keyboard,bus=usb --serial SERIAL 配置虛擬機器串列埠裝置 --parallel PARALLEL 配置虛擬機器並口裝置 --channel CHANNEL 配置虛擬機器溝通頻道 --console CONSOLE 配置虛擬機器與主機之間的文字控制檯連線 --hostdev HOSTDEV 將物理 USB/PCI/etc 主機裝置配置為與虛擬機器共享 --filesystem FILESYSTEM 將主機目錄傳遞給虛擬機器。例如: --filesystem /my/source/dir,/dir/in/guest --filesystem template_name,/,type=template --sound [SOUND] 配置虛擬機器聲音裝置模擬 --watchdog WATCHDOG 配置虛擬機器 watchdog 裝置 --video VIDEO 配置虛擬機器視訊硬體。 --smartcard SMARTCARD 配置虛擬機器智慧卡裝置。例如: --smartcard mode=passthrough --redirdev REDIRDEV 配置虛擬機器重定向裝置。例如: --redirdev usb,type=tcp,server=192.168.1.1:4000 --memballoon MEMBALLOON 配置虛擬機器 memballoon 裝置。例如: --memballoon model=virtio --tpm TPM 配置虛擬機器 TPM 裝置。例如: --tpm /dev/tpm --rng RNG 配置虛擬機器 RNG 裝置。例如: --rng /dev/random --panic PANIC 配置虛擬機器 panic 裝置。例如: --panic default 虛擬機器配置選項: --security SECURITY 設定域安全驅動器配置。 --numatune NUMATUNE 為域程序調整 NUMA 策略。 --memtune MEMTUNE 為域程序調整內粗策略。 --blkiotune BLKIOTUNE 為域程序調整 blkio 策略。 --memorybacking MEMORYBACKING 為域程序設定記憶體後備策略。例如: --memorybacking hugepages=on --features FEATURES 設定域 <features> XML。例如: --features acpi=off --features apic=on,eoi=on --clock CLOCK 設定域 <clock> XML。例如: --clock offset=localtime,rtc_tickpolicy=catchup --pm PM 配置 VM 電源管理功能 --events EVENTS 配置 VM 生命週期管理策略 --resource RESOURCE 配置 VM 資源分割槽(cgroups) 虛擬化平臺選項: -v, --hvm 客戶端應該是一個全虛擬客戶端 -p, --paravirt 這個客戶端一個是一個半虛擬客戶端 --container 這臺虛擬機器需要一個容器客戶端 --virt-type HV_TYPE 要使用的管理程式名稱(kvm、qemu、xen 等等) --arch ARCH 模擬的 CPU 構架 --machine MACHINE 要模擬的機器型別 其它選項: --autostart 引導主機時自動啟動域。 --wait WAIT 等待安裝完成的分鐘數。 --noautoconsole 不要自動嘗試連線到客戶端控制檯 --noreboot 完成安裝後不要引導虛擬機器。 --print-xml [XMLONLY] 輸出所生成域 XML,而不是建立虛擬機器。 --dry-run 完成安裝步驟,但不要建立裝置或者定義 虛擬機器。 --check CHECK 啟用或禁用驗證檢查。例如: --check path_in_use=off --check all=off -q, --quiet 禁止無錯誤輸出 -d, --debug 輸入故障排除資訊 使用 '--option=?' 或者 '--option help' 檢視可用子選項 有關示例及完整選項語法,請檢視 man page。
2.2.7:通過vnc客戶端連線到安裝介面,kvm虛擬機器的預設埠從5900開始
2.2.8:選擇安裝centos安裝介面:
2.2.9:開始正常安裝旅程,以下為給核心傳遞net.ifnames=0以及biosdevname=0使網絡卡的命名為eth*,否則為em*:
2.2.10:安裝過程中。。。。。。:
2.2.11:安裝完成:
2.3:檢視正在執行的虛擬機器:
[[email protected] ~]# virsh -help #獲取命令幫助 [[email protected]-node1 ~]# virsh list --all #當前正在執行的所有虛擬機器 Id 名稱 狀態 ---------------------------------------------------- 2 CentOS-7-x86_64 running - CentOS-x86_64 關閉 - CentOS_x86_64 關閉 [[email protected]-node1 ~]# virsh list --help #命令幫助 OPTIONS --inactive 列出不活躍的域 --all 不活躍和活躍的域列表 --transient 列出臨時域 --persistent 列出持久域 --with-snapshot 列出現有快照的域 --without-snapshot 列出沒有快照的域 --state-running 執行狀態的域列表 --state-paused 列出暫停狀態的域 --state-shutoff 列出關閉狀態的域 --state-other 列出其他狀態的域 --autostart 列出啟用 autostart 的域 --no-autostart 列出禁用 autostart 的域 --with-managed-save 列出有管理的儲存狀態的域 --without-managed-save 列出沒有管理的儲存狀態的域 --uuid 只列出 uuid --name 只列出域名 --table 列出表格(預設) --managed-save 標記有管理的儲存狀態的域 --title show domain title [[email protected]-node1 ~]# virsh list --inactive #列出關閉的虛擬機器