Kubernetes is eating the world,企業在升級轉型過程中,已經越來越多的選用Kubernetes平臺作為IaaS 、PaaS 新基礎設施建設的中心。
使用XSKY SDS承接Kubernetes存儲需求已經成為廣泛容器平臺雲的常見選擇,但是真正發揮出軟體定義存儲中的「定義」二字,並不局限於存儲本身,包括了大規模SDS集群的部署。讓整個SDS集群部署和利用可定義,使得平臺管理員可以統一管理計算和存儲資源編排,統一運維投入,這些也都是SDS架構的一部分天生優勢。
我們在某涉密機構實際落地項目中,客戶選用了Kubernetes作為計算平臺,同時選用了XSKY SDS作為容器存儲,提供塊、文件、對象多種協議接口,承載數百種上層業務應用。存儲集群的部署規模為50個節點,1100個osd,4個pool,後續有5倍以上的擴容預期。對象業務還要求按照各自的生命周期進行對象桶的創建與管理。
如果由實施人員全程手動部署並負責過程監督,這將是一次巨大的人力資源投入,而且後續的日常管理運維也很複雜,需要平臺管理員同時熟悉Kubernetes管理和存儲管理。
針對上述需求,XSKY基於Kubernetes開發了Formation Service,它面向Kubernetes平臺並利用Kubernetes能力實現一鍵部署存儲集群,管理運維各類存儲資源。
01
XSKY Formation Service的好處
前述客戶項目使用Formation Service後,僅需提前定義好預期環境拓撲模板,再執行一條kubectl 命令就實現了整個存儲集群的搭建,包含cluster、osd、pool、訪問接口等存儲資源,使整個部署時間降低了90%;
同時部署過程中,不論出現網絡、硬碟等硬體異常,或是時間伺服器不同步、內存不足等軟體異常,都不影響已有的部署過程;Formation Service會在故障排除後自動重試執行剩餘存儲資源的構建;
該項目在後續的節點擴容、小文件數量SKU擴容中,也只需修改模板,並用容器平臺管理員最熟悉的單條kubectl命令即可完成,大大降低了管理運維成本。
項目完成後,客戶也可以利用容器動態使用對象存儲,容器存儲的容災功能如複製、備份和數據遷移等功能。
我們來詳細說明下如何利用Kubernetes來定義XSKY SDS集群,讓部署對接變得更簡單。
02
利用Kubernetes CRD定義XSKY SDS集群資源
我們可以在Kubernetes平臺將XSKY存儲集群中不同的資源被拆分成不同的用戶自定義資源,即CRD(Custom Resouce Definition);CRD功能在Kubernetes 1.7版本被引入,用戶可以根據自己的需求添加自定義的Kubernetes對象資源。
同時,自定義資源和原生內置的資源一樣,都可以用kubectl來去創建、查看,也享有 RBAC、安全功能。用戶可以開發自定義控制器來感知或者操作自定義資源的變化。
下面我們來看一個簡單的CRD實例, 下面代碼塊是一個CRD的定義:
首先最上面的apiVersion就是指CRD的一個apiVersion聲明,聲明它是一個CRD的需求或者說定義的Schema。
kind就是CustomResourcesDefinition,指CRD。name是一個用戶自定義資源中自己自定義的一個名字。一般我們建議使用「頂級域名.xxx.APIGroup」這樣的格式,比如這裡就是sds.resourcecontroller.xsky.com。
spec用於指定該CRD的group、version。比如在創建Pod或者Deployment時,它的group可能為apps/v1或者apps/v1beta1之類,這裡我們也同樣需要去定義 CRD的group。
如下代碼塊是上面定義的CRD的一個實例:
XSKY存儲集群中的資源被拆分成各種不同的自定義資源,不同的資源有相應的模板文件去定義,XSKY存儲集群的資源拆分大致如下所示:
存儲節點、硬碟(osd)、存儲資源池(pool)、訪問路徑(accesspath)、VIP等,存儲集群中的各種資源在Kubernetes平臺中被作為一種用戶自定義資源在使用;
1、資源定義模板化
XSKY存儲資源被拆分成Kubernetes平臺上的不同的用戶自定義資源後,XSKY提供了統一的、標準的模本文件去定義不同的資源信息。
實施工程師只需要根據客戶的實際需求,對模板文件按照實際場景修改,就能定製出客戶實際所需的存儲集群。比如,集群規模、網絡規劃、管理員用戶設置、硬碟數量和存儲資源池的配置等。
2、部署自動化
XSKY SDS formation工具,支持一鍵式部署存儲節點,定義所需的配置文件,可以完成存儲集群的部署,包括:網絡配置,管理員用戶名和密碼配置,存儲節點角色設置,硬碟管理和創建存儲池等;
3、統一配置管理
通過容器平臺UI和CLI可以實現存儲集群的部署、更新、銷毀等;
其他組件解釋請參考《深入了解Kubernetes中的XSKY存儲》;
4、XSKY Resource Controller
作為一鍵式部署SDS集群的大腦,用於監聽XSKY存儲集群創建、更新、刪除(銷毀)等事件,並把消息事件處理後,實現XSKY存儲集群的部署、更新和銷毀動作;
03
如何實現對接XSKY SDS統一配置管理
XSKY SDS在Kubernetes容器平臺被作為一種用戶自定義資源在使用,Kubernetes是如何統一配置管理XSKY SDS,下圖做了詳細介紹:
1、模板修改
根據XSKY提供的資源定義模板以及真實的場景,修改模本文件,主要包括:集群規模,網絡資源,存儲資源,用戶資源等信息;
2、下發請求
根據修改的模板,使用UI或CLI下發請求到Kubernetes節點的Master節點的API Server;
3、XSKY Reource controller處理請求
XSKY資源控制器,監聽API Server上XSKY SDS這種自定義資源的變化,根據實際的請求做對應處理,包括:部署,更新,銷毀;XSKY資源控制器會解析,模板文件的信息,生成部署XSKY SDS存儲所需要的腳本文件,配置文件,以及formation所需要的json文件;
XSKY資源控制器會將存儲安裝包拷貝到模本文件中指定的Master節點,並在管理節點上解析安裝包,替換默認的配置文件,執行部署腳本,完成存儲集群的部署。
04
XSKY Resource 控制器如何實現自定義資源部署
XSKY Resource Controller包含不同的資源控制器,比如,節點控制器、硬碟控制器、存儲資源池控制器、訪問路徑控制器、VIP控制器等,每種控制器管理不同的資源的創建和銷毀。
1、節點控制器(node controller)
負責部署節點和移除節點,node controller解析定義好的模板文件,根據模板文件中定義好的角色,以及節點數,選擇出管理節點,將存儲安裝包上傳到管理節點,並根據模板文件,生成部署節點所需要的json文件,優先部署管理節點,然後部署其他節點;也可以根據部署的節點實例,去移除對應的節點;
2、硬碟控制器(osd controller)
負責創建osd和刪除osd,osd controller解析定義好的模板文件,生成創建osd所需要的json文件,xsky formation工具根據json文件創建osd;
資源池控制器(pool controller):負責存儲池的創建和參數;
3、訪問路徑控制器(access path controller)
負責訪問路徑的創建和刪除,掛載網關伺服器和移除網關伺服器;
4、vip控制器(vip controller)
負責給創建的訪問路徑設置vip。
目前,XSKY Resource Controller已經做到了讓XSKY SDS集群在Kubernetes容器平臺上的部署和運維變的更簡單。
05
小結
軟體定義存儲本身不僅僅代表著分布式存儲的架構,存儲能力的軟體化以及可定製化,同時也代表了部署、運維、管理的可定義,按照用戶自己的需要進行架構整合,實現統一調度。
—END—