如何利用Kubernetes部署並管理XSKY SDS?

2020-12-19 騰訊網

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

相關焦點

  • 如何部署一個Kubernetes集群
    原文連結:https://mp.weixin.qq.com/s/MFSvDWtue4YruFV3jyLQVw在本篇文章中我將以在Mac筆記本中安裝兩臺Ubantu系統的方式,演示如何部署一套具備一個控制節點
  • 如何在 Kubernetes 上配置 Jenkins?
    Opening http://127.0.0.1:56993/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
  • 2020版Kubernetes快速上手指南,讓你所見即所得
    概述Kubernetes 希臘語為「舵手」,是一個輕便、可擴展的工業級容器編排平臺,用於管理容器化應用和服務。Google基於內部Borg系統研發並於2014年正式開源,目前最新發布了V1.18版本。我們就來試試部署Kubernetes群集管理儀錶盤Dashboard吧。
  • Kubernetes的Local Persistent Volumes使用小記
    ,重啟多次都會被Kubernetes scheduler調度到同一節點,而如果用的是HostPath Volume,每次重啟都可能被Kubernetes scheduler調度到新的節點,然後使用同樣的本地路徑;當我們要用HostPath Volume的時候,既可以在PVC聲明,又可以直接寫到Pod的配置中,但是Local PV只能在PVC聲明,對於PV資源,通常都有專人管理
  • 春眠不覺曉,Kubernetes知多少
    容器技術作為雲平臺的核心,要想更好的管理大規模容器應用,首先我們需要了解它的核心——容器編排工具。和其他任何組件一樣,容器需要監控、控制,用戶則需要一個編排框架來調度和管理容器。Kubernetes作為大規模企業級應用容器編排的首推工具,其為容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能。
  • 親測好用的Kubernetes&DevOps工具!
    Amazon Elastic Container Service是一個Kubernetes DevOps工具,它允許用戶管理和擴展他們的容器化應用程式,並使用Kubernetes簡化部署。因為Kubespray擁有一個開放的開發模型,易於使用,大大降低了編排集群的難度,任何人都可以很容易地學習如何使用Kubespray。 3、Conjure-up Conjure-up易於使用,允許用戶以最少的問題部署他們的應用程式。
  • 每天5分鐘|輕鬆掌握開發工作中必會的k8s-k8s安裝與部署
    上一章我們介紹了k8s的核心組件,了解了這些,我們就可以開始k8s的安裝和部署了。來吧,動手吧!準備好兩伺服器(系統是centos7.3),分別作為matser和node,如下:要讓k8s能夠管理我們的集群,需要在所有的節點上面分別安裝k8s的組件。在安裝之前,需要在兩臺節點上做如下的操作。
  • Kubernetes 應用程式部署工具概覽
    Kubernetes 應用程式部署工具概覽 將應用程式部署到 Kubernetes 就像在 yaml 或 json 中編寫一些資源定義並將其與 kubectl 一起應用一樣簡單,但它也可以自動化很多(並且很複雜)。
  • 《蹲坑學kubernetes》之四:了解Kubernetes安裝部署方式
    在實際的應用中也會有不同的選擇,那麼你會選擇哪種方式部署Kubernetes呢?,從基礎的容器編排管理,到高級特性如負載均衡、Ingress,權限控制等。Kubeadm部署實際要安裝的組件有Kubeadm、Kubelet、Kubectl三個。
  • XSKY攜手東華醫為助力五四一醫院信息化升級改造
    03 丨 存算分離的架構 存儲和計算伺服器分離部署。存算分離架構後期擴展性方便,計算性能和存儲性能可按需擴展(不同於超融合架構必須計算存儲同時擴展的特性)。面對後期業務不確定性導致的計算和存儲分配不均的情況,可按照實際需求進行擴展,節約擴展成本。
  • 簡化公有雲K3s部署體驗,Rancher開源自動化工具AutoK3s
    2020年10月26日,業界應用最為廣泛的Kubernetes管理平臺創建者Rancher Labs(以下簡稱Rancher)正式發布並開源K3s自動化工具項目AutoK3s, 一款用於幫助用戶在多個雲供應商上快速創建和管理K8S集群的輕量級工具,可以極大地簡化並提升公有雲用戶的部署體驗
  • 用於Kubernetes的Linux作業系統指南
    你已經了解過Kubernetes了(或正在考慮探索一些Kubernetes部署)。了解它有很多很好的理由,你可能已經很清楚,Kubernetes是負責管理容器,將工作負載調度到集群上,處理可伸縮性和冗餘,自動執行滾動(更新)和回滾。
  • 2021年聊城省考報名入口網址-http://182.92.48.100/sdsgvyks2021/
    -http://182.92.48.100/sdsgvyks2021/。2021年聊城省考報名入口網址-http://182.92.48.100/sdsgvyks2021/【報名時間:11月20日9:00-11月23日16:00 】
  • 《蹲坑學K8S》之23-1:安裝部署Istio
    Kubernetes群集以後,還有部署以下組件以及功能模塊。如下設置:--enable-admission-plugins=NamespaceLifecycle,MutatingAdmissionWebhook,ValidatingAdmissionWebhook(3)安裝前,需要部署Metrics Server成功,並正常運行。
  • 摩根大通利用AI管理對衝基金
    摩根大通的資產管理部門正在計劃一項策略,著重投資於機器學習統計套利(machine-learning statistical-arbitrage)對衝基金。根據今年6月其提交給監管機構的文件,其成立了機器學習基金有限公司,將管理摩根大通規模150億美元的對衝基金中的基金( fund-of-hedge funds)。
  • Kind + Docker 一鍵部署K8s集群
    docker學習和實踐都很容易,但是K8S的由於集群化,部署需要較多的機器,環境搭建學習實踐比較費勁這一度影響了K8S技術的普及。所以業界也除了一些簡易版的K8s集群環境,比如K3S(5 less than k8s),本文蟲蟲給大家介紹也是這樣一個項目Kind,一鍵部署的單機K8S環境,可以用於學習、本地開發和CI環境。
  • 幾張圖解釋明白 Kubernetes Ingress
    簡單的 Kubernetes 示例 使用 ClusterIP 服務 在 Kubernetes 中部署應用後,我們應該先去了解 Kubernetes Service 服務(前文中講解的)。
  • Kubernetes 將棄用 Docker - OSCHINA - 中文開源技術交流社區
    官方聲明地址:https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/延伸閱讀從虛擬化到雲原生——容器技術的發展史