OpenStack 學習有哪些難點?需要哪些知識儲備?
很多人都反饋學習OpenStack困難重重,本文作者也經歷了從部署到運維OpenStack的一路艱辛,為此,作者將自己學習OpenStack中的難點和關注點與讀者分享,介紹了OpenStack要著重學習的重點領域和知識,希望對大家有所幫助。
前言
隨著雲端計算技術的發展,技術的不斷成熟,越來越多的企業開始在公司內部部署私有云計算平臺。處於成本考慮,開源的雲端計算管理平臺OpenStack也正在被更多的技術人員所學習及部署。雲端計算雖然具備很多好處,比如靈活性、伸縮性和按需分配等特性,但是在部署上卻需要一個對開源研究頗深的團隊來進行部署和管理。OpenStack元件眾多,部署較為困難,出了問題,排錯較難。由於其每半年更新一次版本,較為頻繁。企業不太可能每半年就更新一次雲平臺版本,所以會造成版本間隙過大。
雖然其發展勢頭強勁,但是無可避免的問題就是部署OpenStack需要較為資深的開源技術能力和團隊。學習OpenStack和掌握OpenStack中的難點也就成為了IT技術人員較為關心的話題了。
概念回顧
為了讓讀者更好的學習OpenStack,我們簡單的回顧一下它的基本概念。OpenStack是一個開源的具有高可用性及擴充套件性的雲端計算平臺。支援管理大部分主流的hypervisors,如KVM,Xen Server,VMware,Oracle VM,Xen等。 同時OpenStack是一個開源雲端計算解決方案。可以加速高伸縮性的公共和私有云(IaaS)的部署、管理、配置。使用OpenStack作為基礎,資料中心操作者可以快速方便的通過現存基礎架構建立雲服務。讓IT管理人員使用計算資源像使用電力水利那樣,按需隨時獲得,並對使用量進行付費,完全顛覆了傳統資料中心建設和運維模式。通過上面的簡單介紹,我們知道OpenStack可以建立私有云、公有云以及混合雲,是一個提供IAAS層服務的基礎設施雲端計算管理平臺。OpenStack本身是由多個功能元件組成,來共同完成以上功能。由於OpenStack處於社群維護,各個元件功能也在各大企業和社群的支援下不斷的完善,新的功能元件也在不斷的湧現。目前OpenStack常用的元件主要有以下幾類:
認證模組(Keystone)
代號為Keystone,在OpenStack框架中主要負責管理身份驗證、服務規則和服務令牌功能的模組。使用者訪問資源需要驗證使用者的身份與許可權,服務執行操作也需要進行許可權檢測,這些都需要通過 Keystone 來處理。Keystone類似一個服務匯流排, 或者說是整個OpenStack框架的登錄檔, 其他服務通過keystone來註冊其服務的Endpoint(服務訪問的URL),任何服務之間相互的呼叫, 需要經過Keystone的身份驗證, 來獲得目標服務的Endpoint來找到目標服務。
計算模組(Nova)
代號為Nova,主要負責管理計算資源、網路資源、儲存資源等可擴充套件性的平臺,是OpenStack中的計算資源控制模組。Nova自身並沒有提供任何虛擬化能力,需要通過相關受支援的驅動與各種Hypervisors互動,比如KVM、Power VM、VMware等。
映象模組(Glance)
代號為Glance,主要負責管理OpenStack映象服務,用來註冊、登陸和檢索虛擬機器映象。服務提供了一個REST API,能夠查詢虛擬機器映象元資料和檢索的實際映象。通過映象服務提供的虛擬機器映象可以儲存在不同的位置,從簡單的檔案系統物件儲存到類似OpenStack物件儲存系統。
Dashboard模組(Horizon)
代號為Horizon,是OpenStack的Dashboard,提供了一個基於web圖形的使用者操作介面,大多數針對物件的操作都可以通過其來完成。通過此介面,管理員可以較快的上手OpenStack,執行常規的操作。
塊儲存模組(Cinder)
代號為Cinder,主要負責OpenStack中塊儲存的管理。為VM提供持久化的儲存服務。在F版之後,從Nova-volume中分離出來,立項名為Cinder,獨立提供塊儲存服務。
網路模組(Neutron)
代號為Neutron,主要負責OpenStack中的網路管理,也是所有元件中最為複雜的模組。它管理OpenStack中的所有虛擬網路和物理網路接入與轉發行為,提供防火牆及隔離等方面的高階網路管理能力。
物件儲存模組(Swift)
代號為Swift,是OpenStack中提供的一個物件儲存系統,也是所有元件內名氣相對較小的一個,為什麼會這樣呢,估計是因為採用Restful Http介面,主要為網際網路提供服務的原因吧,還沒有大規模的被眾多的企業所接受。
學習難點
很多人都反饋學習OpenStack困難重重,部署過程中,“坑”不是一般的多,實在是繁瑣。而且出了問題還需要很強的排查錯誤的能力,對Linux自身的技能要求頗高。由於OpenStack是開源產品,企業可以根據自身實際需求進行定製化,所以也要求技術人員具備程式設計基礎,有助於環境的搭建和後期的運維。前面已經談過,網路模組應該算是OpenStack中最為複雜的模組了,結構複雜,概念較多,沒有一定的網路基礎還真不能玩轉OpenStack。
我本身從事OpenStack工作雖然不是太久,但是也經歷了從部署到運維OpenStack的一路艱辛。學習的過程中,更是從一個坑跳到了另一個坑,感覺就從沒有上岸過。大家都知道OpenStack就是一整套雲端計算的解決方案的框架,裡面集合了包括儲存、計算、網路、Web、資料庫等多種技術,這種方式即保證了服務的靈活性,能夠適應不同的應用場景,同時也加大了學習的難度。藉著TWT的優秀平臺,將自己學習OpenStack中的難點和關注點與各位分享,希望可以對大家有幫助,同時讓自己學習更多。
1、自動化知識的儲備
要想學習好OpenStack就必須具備自動化指令碼或者簡單開發的知識。眾所周知OpenStack的部署和運維過程中,需要用到很多的開源技術支援。比如高可用方面需要用到keepalived、pacemaker、HAproxy等軟體。運維中需要用到puppet、ansible或者saltstack等軟體。OpenStack的部署很複雜,如果手動部署那絕對是災難的,而且也容易出錯。所以一般都會採用自動化部署指令碼方式進行自動部署,減少人為的干預,降低錯誤率。在這方面,建議搭建可以主要學習一下python和bash shell,畢竟OpenStack很多程式碼是用python所寫。在業餘時間【一天一次】,建議多閱讀一下OpenStack的原始碼,不懂不要緊,邊學邊讀,這樣有助於後期的知識消化和理解。
2、資料庫知識的儲備
OpenStack中除了Dashboard意外,其他的元件都需要資料庫的支援。無論是SQL/">MySQL還是MariaDB,或者其他資料庫。很多情況下,使用者通過介面對OpenStack進行操作,如果出現需要修改資料庫的問題,就必須要具備資料庫的排錯能力了,至少具備熟練的操作能力。舉個例子,有個時候我們在介面上發出刪除主機的指令,但是由於某種情況不能被成功操作。這時候就需要在後臺的Nova資料庫中找到相關的記錄,將其通過update語句改為已刪除,避免統計錯誤。當然這只是一個普通的例項,以後大家在學習OpenStack的路上估計會經常與資料庫打交道,不要嫌煩,要建立開源理念。
3、網路知識的儲備
OpenStack中最為複雜、惱人等元件就是網路模組【Neutron】了。不誇張的說,你如果跨過了網路模組這個大坑,你就算是學會了OpenStack的60%了。很多人都在OpenStack的學習道路上,折在網路大坑的不在少數。從網路的物理裝置到網路的邏輯配置,甚至架構都要熟悉。比如要知道簡單的VLAN、Flat、DHCP、Bridge(Linux bridge或者ovs)、NAT以路由,甚至是SDN等技術。OpenStack中關於網路的指令很多,功能異常複雜。要學會常用的一些指令,比如neutron net-list用於檢視當前租戶的所有網路資訊,加上—all-tenant就可以list出所有的。Neutron net-show NETID檢視某個網路的詳細資訊。Neutron net-create建立網路,net-delete刪除玩了過等等。更多的指令,建議大家去OpenStack官網看一下。
4、儲存知識的儲備
OpenStack經過近10年的發展已經對業界常用的儲存型別進行了支援。無論是NFS、SAN還是local方式。從功能上Open Stack常用的儲存有Swift物件儲存,類似於AWS的S3服務,不過Swift具備更強的擴充套件性、冗餘和永續性,當然了,也相容S3 API。Cinder塊儲存,提供類似於AWS的EBS塊儲存服務,可以通過介面操作掛載到虛擬機器上,提供持久化的資料儲存。儲存知識的儲存有利於我們合理的規劃OpenStack的儲存用途。分散式儲存已經佔據了OpenStack的大部分市場,比如Ceph、GPFS等。熟悉哪些儲存的配置和備份技能,來從側面保障OpenStack儲存方面的穩定和資料可靠。
5、虛擬化知識的儲備
OpenStack支援KVM、Hyper-V、VMWare、Xen、Docker等主流虛擬化技術。可以看到,OpenStack主要是利用Libvirt進行的虛擬機器操作,但是也支援直接呼叫原生的API進行操作。要理解虛擬化的功能是什麼?Hypervisor可以對下層(Host OS)硬體資源(物理CPU、記憶體、磁碟、網絡卡、顯示卡等)進行封裝、隔離,抽象為另一種形式的邏輯資源,再提供給上層(Guest OS)使用。所以你可以理解Hypervisor其實就是聯絡Host OS和Guest OS的一箇中間件,當然虛擬化可以將一份資源抽象為多份,也可以將多份資源抽象為一份。
典型場景解析
場景一、安裝OpenStack之前的基礎環境準備
OpenStack是一個開源的架構平臺,需要較多的開源軟體進行輔助支撐。所以在安裝OpenStack之前要提前做好以下準備工作:
1、 下載好相關的開源軟體,或者搭建解決依賴關係的YUM本地源。依據個人經驗,建議大家提前準備YUM源,便於順利安裝開源軟體,無需人工參與。
2、 DNS上提前註冊好相關管理節點的FQDN名
3、 確保網路環境暢通,通過網路隔離出管理VLAN和虛擬機器VLAN
4、 提前準備群集IP
5、 系統環境準備,比如關閉防火牆及Selinux功能
場景二、自動化配置工具的準備
目前部署OpenStack都是採用自動化的方式部署,簡單不易出錯,比如Mirantis的Fuel工具,或者其他IT廠商自研的工具。但是後期具體的配置變更,就要需要使用方根據自身習慣自行決定了。我們採用的是Salt Stack作為批量配置工具。
1、 在一個獨立虛擬機器中安裝Salt Stack主控節點
2、 所有的管理及計算節點安裝Salt Stack客戶端
3、 配置客戶端Salt Stack配置檔案,指向主控伺服器
4、 通過Salt ‘’ –A命令接受所有客戶端管理
5、 釋出Salt ‘’ test.ping確定環境正常
場景三、OpenStack的聯調測試
安裝好OpenStack之後,需要驗證其環境是否可以正常工作。一般可以通過以下步驟逐級檢視。
1、 檢視所有元件的日誌,檢視是否有錯誤資訊
2、 登陸Dashboard,對所有元件進行瀏覽
3、 建立一臺虛擬機器,並針對虛擬機器執行各種常規操作,如刪除、修改配置、冷熱遷移等
4、 物理將某臺計算節點down掉,檢視是否可以在另外的節點啟動VM(如果做了高可用的話)
5、 所有計算節點之間模擬傳輸大檔案
總結
以上是對OpenStack學習中的關注點的說明,指出了OpenStack要著重學習的重點領域和知識。通過以上的介紹,讀者可以認識到OpenStack的由來和功能,部署需要做哪些準備,最常見的疑難問題發生在哪個部分。當然我自己也在學習OpenStack的路上,也是按照這個思路來學習。遇到問題也會經常在TWT尋找大咖的支援和解答。大家可以多瀏覽TWT和OpenStack官方網站,學習新的知識點,解決更多的難點。再次希望這篇文章可以對大家在學習OpenStack的道路上有所幫助。
作者:張志強,多年的雲端計算、虛擬化架構設計、企業資訊化建設、自動化運維經驗。熟練掌握X86、Power、儲存、虛擬化等硬體裝置調優與配置。擁有豐富的混合元架構及管理經驗,資訊保安及網路架構的設計與運維。
責編:pingxiaoli