隨著項(xiàng)項(xiàng)目的增多,對測試環(huán)境的需求越來越大,今天研發(fā)要幾臺測試環(huán)境,明天測試也要幾臺測試環(huán)境,連產(chǎn)品都要測試環(huán)境了,咱們運(yùn)維也得有自己的測試環(huán)境,之前搭建的exsi已經(jīng)滿足不了需求了。
剛好內(nèi)網(wǎng)有幾臺閑置的機(jī)器,于是就著手準(zhǔn)備再搭建一套虛擬化平臺,EXSI雖說好用,但畢竟是要錢的(之前用的破解版的),本著尊重版權(quán)的原則,咱們還是用開源的吧,網(wǎng)上找了一圈,發(fā)現(xiàn)目前比較活躍的KVM虛擬化平臺有OpenStack、Proxmox VE、oVirt,內(nèi)部測試用用,OpenStack有點(diǎn)大材小用了,Proxmox VE基本debian定制的,不太喜歡這種模式,而且對debian不是太熟悉,個(gè)人還是比較傾向于oVirt,因?yàn)閛Virt的目標(biāo)就是瞄準(zhǔn)vCenter,而且oVirt和RHEV的關(guān)系,有點(diǎn)像Fedora和RHEL,直接CentOS7+Ovirt+GlusterFS比較好的解決方案,怎奈,淘汰下的機(jī)器實(shí)在是太老了,Ovirt表示硬件不支持,沒辦法,只能試試Proxmox VE了。
手頭資源有限,所以這里先用三臺機(jī)器組集群環(huán)境,用Proxmox VE再配合Ceph存儲組成一個(gè)高可用的虛擬化平臺,Proxmox VE的安裝過程這里就不寫了,實(shí)在是太簡單了,將網(wǎng)上下載的proxmox-ve_5.2-1.iso制作成U盤啟動(dòng)盤,U盤啟動(dòng),一路下一步就可以了,設(shè)置好root密碼、IP、hostname等信息就好了,ostname要求寫成FQDN格式。
#hosts文件配置
root@proxmox233:~# cat >> /etc/hosts << EOF 192.168.5.232 proxmox232.blufly.com proxmox232 192.168.5.231 proxmox231.blufly.com proxmox231 EOF root@proxmox232:~# cat >> /etc/hosts << EOF 192.168.5.233 proxmox233.blufly.com proxmox233 192.168.5.231 proxmox231.blufly.com proxmox231 EOF root@proxmox231:~# cat >> /etc/hosts << EOF 192.168.5.232 proxmox232.blufly.com proxmox232 192.168.5.233 proxmox233.blufly.com proxmox233 EOF
#debian系統(tǒng)更新
rm -f /etc/apt/sources.list.d/pve-enterprise.list echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" >/etc/apt/sources.list.d/pve-install-repo.list wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg apt update && apt dist-upgrade apt-get install net-tools
設(shè)置時(shí)鐘同步:
apt-get install ntpdate ntpdate 120.25.108.11 echo "0 * * * * /usr/sbin/ntpdate 120.25.108.11 > /dev/null 2>&1" >> /etc/crontab
#配置免登陸訪問(這一步可以省略,在加入集群的時(shí)候,會自動(dòng)建立信任關(guān)系)
root@proxmox231:~# ssh-keygen -t rsa root@proxmox231:~# ssh-copy-id root@proxmox231 root@proxmox231:~# ssh-copy-id root@proxmox232 root@proxmox231:~# ssh-copy-id root@proxmox233 root@proxmox232:~# ssh-keygen -t rsa root@proxmox232:~# ssh-copy-id root@proxmox231 root@proxmox232:~# ssh-copy-id root@proxmox232 root@proxmox233:~# ssh-copy-id root@proxmox233 root@proxmox233:~# ssh-keygen -t rsa root@proxmox233:~# ssh-copy-id root@proxmox231 root@proxmox233:~# ssh-copy-id root@proxmox232 root@proxmox233:~# ssh-copy-id root@proxmox233
#在192.168.5.231上面創(chuàng)建pve-cluster集群
root@proxmox231:~# pvecm create pve-cluster
#接下來,通過ssh登陸其他2個(gè)pve節(jié)點(diǎn),執(zhí)行 pvecm add 192.168.5.231
root@proxmox233:~# pvecm add 192.168.5.231 successfully added node 'proxmox233' to cluster. root@proxmox232:~# pvecm add 192.168.5.231 successfully added node 'proxmox232' to cluster.
#pvecm status 在任何一個(gè)節(jié)點(diǎn)上查看集群情況
root@proxmox231:~# pvecm status Quorum information ------------------ Date: Fri Sep 28 15:39:20 2018 Quorum provider: corosync_votequorum Nodes: 3 Node ID: 0x00000001 Ring ID: 1/12 Quorate: Yes Votequorum information ---------------------- Expected votes: 3 Highest expected: 3 Total votes: 3 Quorum: 2 Flags: Quorate Membership information ---------------------- Nodeid Votes Name 0x00000001 1 192.168.5.231 (local) 0x00000003 1 192.168.5.232 0x00000002 1 192.168.5.233
Proxmox支持兩種磁盤,一種是服務(wù)器本地自帶磁盤,另一種是外部存儲設(shè)備的磁盤。對于服務(wù)器本地磁盤,可以配置成本地目錄、zfs、brd、lvm幾種形式。
對于外部存儲設(shè)備的磁盤,可以通過nfs,iscsi或者fc協(xié)議掛載到Proxmox服務(wù)器使用。其中nfs掛載上以后,可以直接作為文件存儲使用,通過iscsi或者fc協(xié)議掛載后,Proxmox服務(wù)器會識別為裸磁盤設(shè)備,還需要進(jìn)一步配置后才可以使用。例如可以配置成lvm,作為卷存儲使用,也可以配置成本地目錄,作為文件存儲使用,但強(qiáng)烈建議不要配置為zfs使用,因?yàn)閦fs的特點(diǎn)是要求能直接管理物理磁盤設(shè)備,如果中間有raid卡等,會嚴(yán)重影響zfs的正常運(yùn)行。
當(dāng)然,用戶也可以配置外部的glusterfs、ceph、sheepdog等基于服務(wù)器的分布式存儲。對于glusterfs,應(yīng)該是可以直接通過菜單掛載;對于ceph,需要通過iscsi協(xié)議掛載;對于sheepdog,需要手工安裝sheepdog插件,然后在命令行配置掛載。glusterfs掛載后可以作為文件存儲使用,ceph和sheepdog應(yīng)該都只能作為卷存儲使用了。
前面多次提到了文件存儲和卷存儲兩個(gè)概念,又有什么區(qū)別呢?主要是Proxmox對于存儲使用是有多種需求的,例如對于虛擬磁盤,就有raw,qcow2,vmdk三種,另外還有iso鏡像文件、gz容器模版文件、虛擬機(jī)備份文件的保存需求,這些都需要文件存儲才可以實(shí)現(xiàn)。當(dāng)然,用戶也可以直接用用lvm邏輯卷或zvol邏輯卷或rbd卷的方式保存虛擬機(jī)的磁盤,相當(dāng)于raw格式的效果,這就可以使用卷存儲來實(shí)現(xiàn)。
那么,說了那么多,到底該怎么配置和選擇呢?簡單總結(jié)下,一般的配置是這樣。
本地磁盤-本地目錄-文件存儲
本地磁盤-lvm-卷存儲
本地磁盤-zfs-卷存儲/文件存儲
本地磁盤-ceph-卷存儲
外部存儲-nfs-文件存儲
外部存儲-iscci/fc-lvm-卷存儲
外部存儲-iscsi/fc-目錄-文件存儲
外部glusterfs-glusterfs插件掛載-文件存儲
外部ceph-iscsi-卷存儲
外部sheepdog-插件掛載-卷存儲
#在每個(gè)節(jié)點(diǎn)上安裝ceph,詳見https://pve.proxmox.com/pve-docs/chapter-pveceph.html
root@proxmox231:~# pveceph install --version luminous root@proxmox232:~# pveceph install --version luminous root@proxmox233:~# pveceph install --version luminous
#配置ceph集群存儲網(wǎng)絡(luò)
root@proxmox231:~# pveceph init --network 192.168.5.0/24
#創(chuàng)建ceph集群存儲Mon監(jiān)控
root@proxmox231:~# pveceph createmon root@proxmox232:~# pveceph createmon root@proxmox233:~# pveceph createmon
#創(chuàng)建mgr
root@proxmox231:~# pveceph createmgr root@proxmox232:~# pveceph createmgr root@proxmox233:~# pveceph createmgr
#創(chuàng)建Ceph OSDs
root@proxmox231:~# pveceph createosd /dev/sdb root@proxmox232:~# pveceph createosd /dev/sdb root@proxmox233:~# pveceph createosd /dev/sdb
#創(chuàng)建集群存儲資源池ceph osd pool create [資源池名稱] 128 128
root@proxmox231:~# ceph osd pool create pvepool 128 128 pool 'pvepool' created
#復(fù)制存儲ID和密鑰到指定文件位置
root@proxmox231:~# mkdir /etc/pve/priv/ceph root@proxmox231:~# cp /etc/ceph/ceph.client.admin.keyring /etc/pve/priv/ceph.keyring root@proxmox231:~# cp /etc/pve/priv/ceph.client.admin.keyring /etc/pve/priv/ceph/ceph1.keyring
root@proxmox231:~# ceph osd pool application enable pvepool rbd enabled application 'rbd' on pool 'pvepool'
#查看集群狀態(tài)
root@proxmox231:~# ceph -s cluster: id: 2cd9afcd-fd20-4e52-966b-3252c6444e6c health: HEALTH_OK services: mon: 3 daemons, quorum proxmox231,proxmox232,proxmox233 mgr: proxmox231(active), standbys: proxmox232, proxmox233 osd: 3 osds: 3 up, 3 in
#添加RBD集群存儲
ID:填寫為ceph 必填,不能定義
資源池:pvepool 可選(默認(rèn)為rbd)
Monitor:192.168.5.231 192.168.5.232 192.168.5.233 (注意添加多個(gè)Mon以空格隔開)
添加節(jié)點(diǎn):proxmox231,proxmox232,proxmox233
#查看rbd集群存儲配置信息
root@proxmox231:~# cat /etc/pve/storage.cfg dir: local path /var/lib/vz content vztmpl,iso,backup lvmthin: local-lvm thinpool data vgname pve content images,rootdir rbd: ceph content images,rootdir krbd 0 nodes proxmox233,proxmox231,proxmox232 pool pvepool
#上傳ISO鏡像,通過sftp上傳到以下目錄/var/lib/vz/template/iso,但這里上傳的iso只能本機(jī)顯示,如果要讓集群中其它的主機(jī)也能共享iso,那就要用到共享存儲,剛好內(nèi)網(wǎng)上有一臺NFS服務(wù)器,exsi存儲用的,上面也有ISO鏡像,正好可以共享,于是在數(shù)據(jù)中心上掛載這個(gè)NFS存儲
#新建虛擬機(jī),使用ceph存儲
#虛擬機(jī)熱遷移測試
剛剛在proxmox231上創(chuàng)建了一個(gè)centos7的虛擬機(jī),存儲用到了ceph,所以先來進(jìn)行熱遷移測試,將proxmox231上的虛擬遷移到proxmox233上面
2018-09-29 15:50:16 starting migration of VM 100 to node ‘proxmox233’ (192.168.5.233)
2018-09-29 15:50:16 found local disk ‘local:iso/CentOS-7-x86_64-DVD-1804.iso’ (in current VM config)
2018-09-29 15:50:16 can’t migrate local disk ‘local:iso/CentOS-7-x86_64-DVD-1804.iso’: can’t live migrate attached local disks without with-local-disks option
2018-09-29 15:50:16 ERROR: Failed to sync data – can’t migrate VM – check log
2018-09-29 15:50:16 aborting phase 1 – cleanup resources
2018-09-29 15:50:16 ERROR: migration aborted (duration 00:00:01): Failed to sync data – can’t migrate VM – check log
TASK ERROR: migration aborted
#在遷移的時(shí)候報(bào)錯(cuò),那是因?yàn)樵诎惭b的時(shí)候掛載了本地的ISO,所以在遷移之前先修改下虛擬的配置,CD/DVD選擇不使用任何介質(zhì)
#然后再來遷移
#此時(shí)之前在proxmox231上面運(yùn)行的虛擬已經(jīng)遷移到proxmox233上面來了
#將虛擬機(jī)加入HA,進(jìn)行高可用測試
#好了,已成功將proxmox233上面的k8s71.blufly.com虛擬機(jī)添加到HA,現(xiàn)在將proxmox233關(guān)機(jī)模擬故障
#從截圖上可以看到proxmox233已經(jīng)故障,k8s71.blufly.com這個(gè)虛擬機(jī)已經(jīng)遷移到proxmox231上了,實(shí)現(xiàn)了高可用
以上只是對proxmox做了簡單的測試,基本上能滿足日常需求,更多的高級功能后面再來慢慢摸索。