以下為演講文字整理:

很高興和大家探討Ceph的話題,我分享的題目是基于Ceph的容器存儲。先來看一下容器的堆棧,Ceph很大的應(yīng)用場景是在OpenStack,Ceph伴隨著OpenStack一起火起來,在傳統(tǒng)的存儲領(lǐng)域我們逐漸開始使用Ceph。隨著容器軟件棧的重要性提升,Ceph逐漸也在容器中做一些涉獵。以紅帽的角度來講,之前基于面向容器存儲的解決方案,今后會推出基于Ceph的解決方案,面向未來無論是容器還是虛機(jī),基礎(chǔ)架構(gòu)平臺會通過Ceph成為整體統(tǒng)一的軟件。

在實際的應(yīng)用場景里,除了容器,虛擬機(jī)在很多面向傳統(tǒng)應(yīng)用還是比較多的,在統(tǒng)一的調(diào)度層進(jìn)行Kubernetes實現(xiàn),存儲是由什么實現(xiàn)的?OpenStack的存儲一直都是通過Ceph作為底層存儲,接下來Ceph也會作為Kubernetes的底層存儲給整個平臺使用。

去年在北京有一個國外的同事介紹Rook相關(guān)的內(nèi)容,今天我把進(jìn)展跟大家分享系一下。如果大家不了解Rook,我也會簡單介紹一下Rook是什么。Rook是一個控制面,Ceph有很多的問題,我特別注意最后一頁的問題,比如說有些跟硬件相關(guān)或是跟運維相關(guān),在面向Kubernetes的平臺上,在容器出現(xiàn)的時候,最早Docker出現(xiàn)可以簡化運維,可以把應(yīng)用和應(yīng)用的配置打包放在容器里簡化運維。Docker簡化運維后來逐漸出現(xiàn)了Kubernetes,容器部署、上線方便。如何管理大規(guī)模的平臺,Kubernetes逐漸需要持久化的存儲,容器是完全的分布式無狀態(tài)的,實際上我們會發(fā)現(xiàn)做到這點太難了,特別是對于復(fù)雜的邏輯、傳統(tǒng)的應(yīng)用,沒法做到真正的分布式的狀態(tài),所以需要持久化的存儲。

隨著Ceph的成熟會作為統(tǒng)一的存儲,我們把它作為容器的軟件堆棧,并認(rèn)為它是完全可以的。把它放在容器里,接下來是如何管理Ceph大規(guī)模的集群,我們會看到Rook的架構(gòu),這個東西很簡單,可以在Ceph項目里找到這個圖。

對于Kubernetes來講,我們認(rèn)為是控制容器的控制面,如果涉及到存儲需要幾點,這是Rook目前的發(fā)展?fàn)顟B(tài),包括紅帽會貢獻(xiàn)的內(nèi)容?,F(xiàn)在Rook有一個Operator,Kubernetes上運維不同應(yīng)用類似機(jī)器人角色的新東西,RookOperator針對Ceph和其持久化的存儲方案,比如數(shù)據(jù)庫提供Rook的Operator,當(dāng)然Rook的出現(xiàn)是以Ceph為核心。紅帽在Rook里也貢獻(xiàn)了很多的代碼,我們會用Rook管理在容器軟件站里的存儲。里面還涉及到Rook Agent,現(xiàn)在用的Rook volume,它作為管理者進(jìn)行管理運行在每個kubelet的節(jié)點,這個節(jié)點也會有一個plugin,可以做一些運維相關(guān)的工作。

這是簡單的圖,我們會發(fā)現(xiàn)在Ceph運行的每個節(jié)點上會有Agent的進(jìn)程,后面的例子里我們會看到,它是管理里面OSD、Mon,如果不是當(dāng)前期望的狀態(tài),Agent會恢復(fù)到期待的狀態(tài),對于Kubernetes來講,它的管理不光是原生的API,實際上擴(kuò)展到管理Ceph的集群。這是我們對Operator的簡單定義,Ceph的集群運行狀態(tài)不是我們期待的狀態(tài),Operator可以恢復(fù)到時候我們期望的狀態(tài)。至于管理哪些方面?目前來說主要是管理Ceph運行的進(jìn)程,比如說Mon、OSD、RGW、NFS等,還有其他的進(jìn)程和狀態(tài),在Rook里可以管理,對它原生的API進(jìn)行擴(kuò)展。

我們要管理Ceph的話,有一些東西是在原生的API里不存在的,需要對它進(jìn)行擴(kuò)展。整體的管理框架是前面提到的Operator Framework。之前容器的軟件棧更多面向把所有的應(yīng)用在Kubernetes里走管理,現(xiàn)在更多的精力放在日常管理和運維,當(dāng)有了Operator以后,它類似于自動化的方式,叫自動化機(jī)器人有點夸張,現(xiàn)在的做法是運維人員運行不同的應(yīng)用,這些不同的應(yīng)用比如說MYSQL,可能有一些運維的經(jīng)驗,用到什么樣的情況需要做怎樣的操作,這些已經(jīng)寫在Operator的邏輯里。

Framework是一個框架,負(fù)責(zé)監(jiān)控當(dāng)前的狀態(tài),當(dāng)前的狀態(tài)如果不是當(dāng)下希望的會做一些自動的恢復(fù)。比如說當(dāng)前是三個節(jié)點,現(xiàn)在宕掉一個節(jié)點,現(xiàn)在需要啟起來需要運維人員手動啟,如果有Operator以后,就會把容器自動啟起來,已達(dá)到運維的作用。

接下來我們通過具體的例子,介紹如何通過這樣的機(jī)制做運維?比如說CephCluster是新的類型,可以看到所有Excel都已經(jīng)容器化,這是它的版本包括使用的網(wǎng)絡(luò),這是基本的狀態(tài)。

接下來再看一個具體的例子,Mon Settings,集群里要求是三個,這里指定是3,還有一些其他的屬性,如果我們通過這個方式把Mon起來,現(xiàn)在手動殺掉一個Mon,因為有了Operator,有了Rook的Operator,會自動把集群的Mon恢復(fù)成三個,有一些人為的工作可以通過這種Operator方式實現(xiàn)。

對OSD的配置,Rook還是屬于早期的發(fā)展階段,一開始安裝部署Ceph的集群,選取節(jié)點的時候用怎樣的方式?是用機(jī)器上所有節(jié)點的所有盤還是一些有選擇的?這個例子是所有的節(jié)點、所有的盤,里面指定節(jié)點上的盤,實際上都是在右邊指定的,里面哪些存儲設(shè)備?;蚴且恍┮?guī)則,比如說我們是用里面的正確表達(dá)式。我們對于一些性能上的考量,比如說放在SSD上,對于DB放在什么上,不同的配置、設(shè)置都可以在里面體現(xiàn)。

比如說配置RBD Mirroring,包括RGW,RGW的幾個池子,包括副本池,在整個配置里都可以指定,包括配置Ceph的文件系統(tǒng),Ceph文件系統(tǒng)我們認(rèn)為也是逐漸走向成熟的狀態(tài),我們認(rèn)為給容器的軟件是完全沒有問題的。

最后講一下RookAgent以及未來的Rook發(fā)展趨勢,簡單說基于Ceph的容器存儲我們目前通過Rook的方式,把Ceph給到容器的軟件堆站用,有Rook和沒Rook的好處,之前大部分的工作還是需要手動做,Kubernetes平臺很多的應(yīng)用管理完全通過平臺自身的機(jī)制就可以完成,比如說上面部署MYSQL,有MYSQL的Operator,對于Ceph也是一個集群,如何更好的管理好集群?我們是需要工具的?,F(xiàn)在可以做的是,比如說第一步的安裝、部署、配置以及簡單的進(jìn)程數(shù),我們有三個進(jìn)程,哪個壞掉會重啟。未來很多的運維工作都可以通過Ceph、Rook本身做。比如說我們?nèi)绾伟l(fā)現(xiàn)盤壞了,如果盤壞了需要換盤、敲幾個命令把盤摘掉加上去。還有一些工作比較復(fù)雜一點,Ceph現(xiàn)在很多運維監(jiān)控是通過外圍做的,現(xiàn)在我們可以搜集很多的信息,也可以掛一些普羅米修斯做整體的監(jiān)控、展現(xiàn)。這些東西都是可以跟Operator本身結(jié)合起來,通過監(jiān)控可以發(fā)現(xiàn)一些信息,如果有什么動作、啟發(fā)式的可以通過Operator在集群里做一些動作,比如說識別一些亞健康的狀態(tài)。一旦做了,比如說剔掉一個OSD、添加一個OSD,類似這樣的工作我們可以通過取得信息,通過這些信息把前后兩個工作勾起來。

還有一點是Rook在未來一定要改變,紅帽正在做,不久就會發(fā)布,目前它的機(jī)制還是FlexVolume,未來可能是從事CSI的標(biāo)準(zhǔn),這塊通過CSI管理Ceph的存儲,今天我的演講就到這里,謝謝大家。

分享到

Fred

baiyan

相關(guān)推薦