1. 程式人生 > >虛擬化之KVM(上)

虛擬化之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  #列出關閉的虛擬機器