OpenShift存儲管理方案——Rook

OpenShift Rook

存儲的重要意義

存儲資源是容器云平臺中的一個核心基礎設施,為不同的應用服務提供可靠的持久化服務通熄。
大家都知道耙旦,容器運行過程中產生的數(shù)據(jù)是臨時數(shù)據(jù)脱羡,并不可靠,一旦容器掛了免都,這些數(shù)據(jù)都會丟失锉罐。所以對數(shù)據(jù)可靠性有要求的應用就必須使用存儲資源。
存儲的方案有很多種绕娘,常用的有本地盤存儲脓规、NFS、Ceph险领、Gluster FS等等侨舆。其中Ceph是一個開源的分布式文件系統(tǒng),同時支持對象存儲绢陌、塊存儲态罪、文件存儲,為云計算平臺提供了最全面的存儲方案。它以可靠下面、高性能等特性得到了很多企業(yè)的認可复颈,并使用它來作為生產環(huán)境的存儲。
但是運維Ceph存儲集群是一件較復雜工作沥割,通過Rook項目耗啦,我們可以非常方便簡單地實施Ceph存儲方案,并且已有企業(yè)使用Rook來運維生產級別的存儲方案机杜。

Rook:CNCF云原生存儲項目

Rook于2018年1月加入了CNCF帜讲,成為了CNCF第15個項目,同時它也是CNCF首個云原生存儲項目椒拗。Rook并不是自己開發(fā)一套存儲方案似将,而是將現(xiàn)有的分布式存儲系統(tǒng)云原生化获黔,讓它們能夠實現(xiàn)自我管理,自我擴展在验,自我修復玷氏。 它使存儲管理員的任務自動化:部署,引導腋舌,配置盏触,配置,擴展块饺,升級赞辩,遷移,災難恢復授艰,監(jiān)視和資源管理辨嗽。大大降低了存儲系統(tǒng)的運維門檻,大大減少了維護成本淮腾。

Rook支持多種存儲系統(tǒng)服務

  • Ceph(v1)
  • EdgeFS(v1)
  • Minio(Alpha)
  • CockroachDB(Alpha)
  • Cassandra(Alpha)
  • NFS(Alpha)
  • Yugabyte DB(Alpha)

Rook的特性

  • 簡單可靠的自動化資源管理
  • 超大規(guī)脑阈瑁或超融合存儲集群
  • 高效地分發(fā)和復制數(shù)據(jù)以最大程度地減少損失
  • 通過多個存儲提供程序配置,文件来破,阻止和對象
  • 管理開源存儲技術
  • 輕松地在數(shù)據(jù)中心中啟用彈性存儲
  • 根據(jù)Apache 2.0許可發(fā)布的開源軟件
  • 優(yōu)化商品硬件上的工作負載

以下是Rook在Kubernetes上部署的架構


Rook與K8S

OpenShift 容器平臺部署Rook

OpenShift是紅帽開發(fā)的K8S的企業(yè)級方案,它為原生K8S增加了許多安全及其他特性忘古,特別是約束了運行中的Pod的權限徘禁。在部署與使用Rook時,需要允許應用擁有這些權限髓堪。

  1. 下載部署需要的代碼

代碼所在地址:https://github.com/rook/rook/blob/release-1.1/cluster/examples/kubernetes/ceph

  • common.yaml:創(chuàng)建Namespace送朱、CRD、Role干旁、RoleBinding驶沼、ClusterRole、ClusterRoleBinding争群、PodSecurityPolicy回怜、ServiceAccount
  • operator-openshift.yaml: 創(chuàng)建SCC以及完成Rook Operator部署
  • cluster.yaml:創(chuàng)建CephCluster
  • object-openshift.yaml: 使用rgw創(chuàng)建對象存儲,并設置對象存儲服務對外的端口
  1. 修改operator-openshift.yaml文件
  • 將ROOK_ENABLE_FLEX_DRIVER設置為true
  • 將FLEXVOLUME_DIR_PATH值設置為/usr/libexec/kubernetes/kubelet-plugins/volume/exec
  1. 修改cluster.yaml指定OSD主機及目錄/盤符换薄,以下列出了三種配置方式玉雾,可任意搭配。
storage: 
    useAllNodes: false
    useAllDevices: false
    topologyAware: true
    deviceFilter:
    location:
    config:
      nodes:
      - name: "172.17.4.101"
        directories: 
        - path: "/rook/storage-dir"
        resources:
          limits:
            cpu: "500m"
            memory: "1024Mi"
          requests:
            cpu: "500m"
            memory: "1024Mi"
      - name: "172.17.4.201"
        devices: 
        - name: "sdb"
        - name: "nvme01" 
          config:
            osdsPerDevice: "5"
        config: 
          storeType: filestore
      - name: "172.17.4.301"
        deviceFilter: "^sd."
  1. 部署安裝rook
$ oc create -f common.yaml
$ oc create -f operator-openshift.yaml
$ oc create -f cluster.yaml

完成部署好后轻要,在rook-ceph Project下將會創(chuàng)建對應的資源

$ oc get  all -n rook-ceph
NAME                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/rook-ceph-mgr             ClusterIP   172.30.21.61     <none>        9283/TCP            17h
service/rook-ceph-mgr-dashboard   ClusterIP   172.30.243.194   <none>        8443/TCP            17h
service/rook-ceph-mon-a           ClusterIP   172.30.61.7      <none>        6789/TCP,3300/TCP   17h
service/rook-ceph-mon-b           ClusterIP   172.30.22.104    <none>        6789/TCP,3300/TCP   17h
service/rook-ceph-mon-c           ClusterIP   172.30.29.27     <none>        6789/TCP,3300/TCP   17h

NAME                             DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/rook-ceph-agent   9         6         6         6            6           <none>          14h
daemonset.apps/rook-discover     9         6         6         6            6           <none>          14h

NAME                                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/rook-ceph-mgr-a      1         1         1            1           17h
deployment.apps/rook-ceph-mon-a      1         1         1            1           17h
deployment.apps/rook-ceph-mon-b      1         1         1            1           17h
deployment.apps/rook-ceph-mon-c      1         1         1            1           17h
deployment.apps/rook-ceph-operator   1         1         1            1           1d
deployment.apps/rook-ceph-osd-0      1         1         1            1           17h
deployment.apps/rook-ceph-osd-1      1         1         1            1           15h
  1. 為Ceph Dashboard創(chuàng)建Route
$ cat <<EOF | oc create -f -
apiVersion: route.openshift.io/v1
kind: Route
metadata:
  labels:
    app: rook-ceph-mgr
    rook_cluster: rook-ceph
  name: rook-ceph-mgr-dashboard
  namespace: rook-ceph
spec:
  host: dashboard-rook.apps.example.com
  port:
    targetPort: https-dashboard
  tls:
    termination: passthrough
  to:
    kind: Service
    name: rook-ceph-mgr-dashboard
    weight: 100
  wildcardPolicy: None
EOF
$ oc get route
NAME                      HOST/PORT                               SERVICES                  PORT              TERMINATION 
rook-ceph-mgr-dashboard   dashboard-rook.apps.ceshi.fenhang.com   rook-ceph-mgr-dashboard   https-dashboard   passthrough

此時便可通過瀏覽器訪問Ceph Dashboard頁面复旬,查看Ceph集群狀態(tài)

ceph-dashboard
  1. 創(chuàng)建Ceph Block Pool及storageclass
$ cat <<EOF | oc create -f -
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
  name: replicapool
  namespace: rook-ceph
spec:
  failureDomain: host
  replicated:
    size: 3
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: rook-ceph-block
provisioner: ceph.rook.io/block
parameters:
  blockPool: replicapool
  # 設置為rook cluster operator所在的namespace
  clusterNamespace: rook-ceph
  # 文件系統(tǒng),默認是ext4
  fstype: xfs
# reclaimPolicy冲泥,默認是"Delete"驹碍,可以設置為"Retain","Recycle" 
reclaimPolicy: Retain
#  Kubernetes 1.14+支持Resize功能壁涎,只支持ext3, ext4, xfs類型
allowVolumeExpansion: true
EOF

至此完成了通過Rook部署Ceph集群,并創(chuàng)建了相應的StorageClass志秃,該StorageClass便可以為應用提供使用怔球。
如果需要對Ceph集群擴容,只需要更新CephCluster的配置洽损,在storage項中添加新加入的目錄或磁盤(生產上建議不要使用目錄)庞溜,Rook Operator將會自動將它加入到集群,實現(xiàn)集群的擴容碑定。

Rook架構

參考文章

Rook官網
Rook 文檔OpenShift
Rook文檔——Ceph存儲
Rook文檔-Ceph Block

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末流码,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子延刘,更是在濱河造成了極大的恐慌漫试,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碘赖,死亡現(xiàn)場離奇詭異驾荣,居然都是意外死亡,警方通過查閱死者的電腦和手機普泡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門播掷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撼班,你說我怎么就攤上這事歧匈。” “怎么了砰嘁?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵件炉,是天一觀的道長。 經常有香客問我矮湘,道長斟冕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任缅阳,我火速辦了婚禮磕蛇,結果婚禮上,老公的妹妹穿的比我還像新娘十办。我一直安慰自己孤里,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布橘洞。 她就那樣靜靜地躺著捌袜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炸枣。 梳的紋絲不亂的頭發(fā)上虏等,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天弄唧,我揣著相機與錄音,去河邊找鬼霍衫。 笑死候引,一個胖子當著我的面吹牛,可吹牛的內容都是我干的敦跌。 我是一名探鬼主播澄干,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柠傍!你這毒婦竟也來了麸俘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤惧笛,失蹤者是張志新(化名)和其女友劉穎从媚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體患整,經...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拜效,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了各谚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片紧憾。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昌渤,靈堂內的尸體忽然破棺而出赴穗,到底是詐尸還是另有隱情,我是刑警寧澤愈涩,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布望抽,位于F島的核電站加矛,受9級特大地震影響履婉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜斟览,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一毁腿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苛茂,春花似錦已烤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至躁绸,卻和暖如春裕循,著一層夾襖步出監(jiān)牢的瞬間臣嚣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工剥哑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硅则,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓株婴,卻偏偏與公主長得像怎虫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子困介,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351