1、講在前面(玩這個的心歷路程)
最近一段時間想玩一些叢集之類的東西,學習搞一下K8s,叢集啥的,但是我沒有多臺伺服器,如果購買雲伺服器成本太高,後來想到了買臺桌上型電腦弄點虛擬機器來玩,於是我就在某魚上淘了臺二手桌上型電腦(24核+32G+512G+4G顯示卡),價格1280。後來想到要裝虛擬機器,我就想到了現在經常用到的雲平臺,於是在網上找了一些開源雲平臺,於是找了一些開源雲平臺
2、最終選擇KVM的原因
最開始選擇的是FreeVM,純國產化安全虛擬化平臺,直接有一體包安裝簡單,純中文介面,對於國人相對友好,另外看了介紹操作比較簡單並且開源(企業版功能基本上用不到),所以我就使用了這個,官網有一體包,直接下載ISO映象,像裝作業系統一樣的,根據官網流程安裝很簡單。最終捨棄的原因是,不穩定,短短一個星期我雲平臺重灌了兩次(可能是我的硬體也太垃圾,或者搭建好之後我總是能精確命中系統bug,總之我的感覺就是不穩定),果斷捨棄。
捨棄FreeVM我又查了一下最穩定和歷史悠久的要屬於OpenStack,一個開源的雲端計算管理平臺專案。OpenStack為私有云和公有云提供可擴充套件的彈性的雲端計算服務。專案目標是提供實施簡單、可大規模擴充套件、豐富、標準統一的雲端計算管理平臺。當時追求穩定性,沒有考慮安裝複雜度和配置問題,直接開始找各種教程開始幹,趁週末從早上搞到晚上才搞好,最終發現不適用於我這種情況,OpenStack相對來說較重,裡面各種元件有十幾個,整個服務啟動起來,直接把我記憶體吃完了。於是我果斷放棄了
後來想通了,如果想搭建一個即穩定又實用的雲平臺靠這一臺機器這點資源很難實現,於是我就考慮到了最笨的方式,使用虛擬機器(類似於VMware)。因為我的原系統定位就是Centos,經過查詢之後找到了KVM(一個開源的系統虛擬化模組)。虛擬化需要硬體支援(如Intel VT技術或者AMD V技術)。是基於硬體的完全虛擬化
3、說幹就幹,開始安裝(Centos系統)
我是直接用yum裝的,現在因為Centos已經停止維護,yum源可以用阿里源或者騰訊源,阿里源有個問題,使用在虛擬機器上時間久了容易被封掉IP,導致你的IP無法再用(當時因為這個讓我排查了好久)。如果遇到yum源的問題,可以直接換源解決問題。畢竟都不是慈善家,免費的東西咱也不好說啥。
安裝命令步驟直接在下面:
# 構建虛擬機器的命令列工具
yum -y install virt-install
# 網路支援工具, 預設已安裝
yum -y install bridge-utils
# 安裝虛擬機器管理工具
yum -y install libvirt libvirt-devel libvirt-daemon-kvm libvirt-client
yum -y install virt-manager
# 開啟 libvirtd KVM服務,以開啟相關支援:
systemctl start libvirtd
systemctl enable libvirtd --now
# 安裝其它工具包:
yum install libvirt-python python-virtinst virt-install virt-viewer –y
yum install libguestfs-tools -y
截止上面最後一步,KVM已經安裝好了
這些都是相關的一些命令,看著很多實際上用到的也就兩三個(因為我目前只用了兩三個)。virsh、virt-install、virt-manager
4、使用kvm建立虛機,virt-install命令
上面已經安裝好了KVM,接下來要開始用KVM建立虛機,虛機需要有映象,這裡用還是用Centos來做例子,我是在阿里雲的下載的:https://mirrors.aliyun.com/centos/7/isos/x86_64
# 下載映象
wget https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
# 把映象放到你的自定義位置
mv CentOS-7-x86_64-DVD-2009.iso /data/iso/
# 建立一個名稱為master 記憶體8196M 8個C 的虛機 儲存卷在/var/lib/libvirt/images/master.qcow2
virt-install --name=master --memory=8196 --vcpus=8 --os-type=linux --location=/data/iso/CentOS-7-x86_64-DVD-2009.iso --disk /data/vmdisk/images/master.qcow2,device=disk,bus=virtio,size=80 --network network=default --network bridge=virbr0 --nographics --extra-args='console=tty0 console=ttyS0,115200n8 serial'
virt-install命令相關
#虛擬機器映象檔案預設路徑:/var/lib/libvirt/images/
磁碟映象檔案以qcow2、img、raw等格式字尾
磁碟映象檔案格式:
虛擬機器磁碟檔案有raw、qcow2格式和qed(這種已經不用了)。qcow2格式是kvm支援的標準格式,raw格式為虛擬磁碟檔案通用格式。raw格式效能最好,速度最快,其缺點是不支援一些新的功能,如映象,Zlib磁碟壓縮、AES加密、快照等,另外raw格式檔案比qcow2格式檔案大很多,將近15倍吧。而qcow2格式是支援快照模式,做快照要把它轉換成qcow2格式。
#命令建立虛擬機器示例
virt-install \ #建立命令
-n kvm1 \ #虛擬機器顯示名(非虛擬機器主機名)
-r 4096 \ #虛擬機器記憶體大小
--vcpus 2 \ #虛擬機器cpu個數
--disk path=/var/lib/libvirt/images/kvm1.qcow2,size=50,format=qcow2,bus=virtio \ #指定硬碟路徑,大小,格式為qcow2,匯流排型別為virtio
--location /root/iso/CentOS-7-x86_64-Minimal-2009.iso \ #系統安裝iso路徑
--nographics \ #不呼叫圖形化介面
--network network=default \ #網路卡1指定網橋
--network bridge=br0 \ #網路卡2指定網橋
--console pty,target_type=serial \ #console控制通道
--extra-args 'console=ttyS0,115200n8 serial' #文字輸出
或者vnc方式連線安裝
virt-install \
--name=kvm001 --ram 1024 --vcpus=1 \
--disk path=/home/raw/kvm001.raw,size=10,format=raw,bus=virtio \
--cdrom=/mnt/CentOS-7-x86_64-Minimal-1810.iso --network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0 --noautoconsole
引數說明:
--name #虛擬機器名稱
--ram #分配給虛擬機器的記憶體,單位MB
--vcpus #分配給虛擬機器的cpu個數
--cdrom #指定CentOS映象ISO檔案路徑
--disk #指定虛擬機器raw檔案路徑
size #虛擬機器檔案大小,單位GB
bus #虛擬機器磁碟使用的匯流排型別,為了使虛擬機器達到好的效能,這裡使用virtio
cache #虛擬機器磁碟的cache型別
--network bridge #指定橋接網路卡
model #網路卡模式,這裡也是使用效能更好的virtio
--graphics #圖形引數
5、虛機管理 virsh
虛擬機器狀態維護
virsh list --all #檢視所有虛擬機器
virsh dominfo 虛擬機器名或虛擬機器ID #檢視虛擬機器資訊概覽
virsh console 虛擬機器名或虛擬機器ID #進入虛擬機器
快捷鍵: ctrl+] #退出虛擬機器
virsh shutdown 虛擬機器名或虛擬機器ID #關閉虛擬機器
virsh destroy 虛擬機器名或虛擬機器ID #強制關閉虛擬機器
virsh start 虛擬機器名或虛擬機器ID #開機虛擬機器
virsh suspend 虛擬機器名或虛擬機器ID #掛起虛擬機器
virsh resume 虛擬機器名或虛擬機器ID #恢復虛擬機器
virsh reset 虛擬機器名或虛擬機器ID #重置虛擬機器
virsh undefine 虛擬機器名或虛擬機器ID #刪除虛擬機器
virsh autostart 虛擬機器名或虛擬機器ID #設定虛擬機器自動啟動
virsh autostart --disable 虛擬機器名 #關閉虛擬機器自動啟動
virsh dumpxml 虛擬機器名或虛擬機器ID #檢視虛擬機器配置檔案
virsh edit 虛擬機器名或虛擬機器ID #修改虛擬機器配置,必須關機
virsh snapshot-create-as 虛擬機器名 快照名 #建立虛擬機器快照
virsh snapshot-list 虛擬機器名 #檢視虛擬機器快照列表
virsh snapshot-revert 虛擬機器名 虛擬機器快照名 #恢復虛擬機器快照
virt-clone -o 源虛擬機器名 -n 新虛擬機器名 -f 儲存新虛擬機器的檔案路徑 #克隆虛擬機器
KVM儲存池管理
virsh pool-list --all #檢視當前儲存池列表
virsh pool-info 儲存池名 #檢視儲存池資訊
virsh pool-dumpxml 儲存池名 #檢視儲存池資訊 注:儲存池的配置資訊也是xml的格式,存放在/etc/libvirt/storage中
virsh pool-destroy vmdisk #取消啟用儲存池
virsh pool-undefine vmdisk #取消定義儲存池
virsh pool-delete vmdisk #刪除儲存池定義的目錄
#建立本地儲存池,儲存池所在的目錄
mkdir -p /data/vmfs # 儲存池所在的目錄
virsh pool-define-as vmdisk --type dir --target /data/vmfs/ #定義儲存池
virsh pool-build vmdisk #建立已定義的儲存池
virsh pool-start vmdisk #啟用並啟動已定義的儲存池,儲存池不啟用是無法使用的
virsh pool-autostart vmdisk #啟用並自動啟動已定義的儲存池,儲存池不啟用是無法使用的
儲存卷管理
#建立儲存卷,在vmdisk儲存池中,建立一個容量為80G、格式為qcow2的虛擬機器儲存卷,名稱為master.qcow2
virsh vol-create-as vmdisk master.qcow2 80G --format qcow2
#刪除儲存卷
virsh vol-delete --pool vmdisk kvm2_2.qcow2