OpenShift存储管理方案——Rook

OpenShift Rook

存储的重要意义

存储资源是容器云平台中的一个核心基础设施,为不同的应用服务提供可靠的持久化服务。
大家都知道,容器运行过程中产生的数据是临时数据,并不可靠,一旦容器挂了,这些数据都会丢失。所以对数据可靠性有要求的应用就必须使用存储资源。
存储的方案有很多种,常用的有本地盘存储、NFS、Ceph、Gluster FS等等。其中Ceph是一个开源的分布式文件系统,同时支持对象存储、块存储、文件存储,为云计算平台提供了最全面的存储方案。它以可靠、高性能等特性得到了很多企业的认可,并使用它来作为生产环境的存储。
但是运维Ceph存储集群是一件较复杂工作,通过Rook项目,我们可以非常方便简单地实施Ceph存储方案,并且已有企业使用Rook来运维生产级别的存储方案。

Rook:CNCF云原生存储项目

Rook于2018年1月加入了CNCF,成为了CNCF第15个项目,同时它也是CNCF首个云原生存储项目。Rook并不是自己开发一套存储方案,而是将现有的分布式存储系统云原生化,让它们能够实现自我管理,自我扩展,自我修复。 它使存储管理员的任务自动化:部署,引导,配置,配置,扩展,升级,迁移,灾难恢复,监视和资源管理。大大降低了存储系统的运维门槛,大大减少了维护成本。

Rook支持多种存储系统服务

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

Rook的特性

  • 简单可靠的自动化资源管理
  • 超大规模或超融合存储集群
  • 高效地分发和复制数据以最大程度地减少损失
  • 通过多个存储提供程序配置,文件,阻止和对象
  • 管理开源存储技术
  • 轻松地在数据中心中启用弹性存储
  • 根据Apache 2.0许可发布的开源软件
  • 优化商品硬件上的工作负载

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


Rook与K8S

OpenShift 容器平台部署Rook

OpenShift是红帽开发的K8S的企业级方案,它为原生K8S增加了许多安全及其他特性,特别是约束了运行中的Pod的权限。在部署与使用Rook时,需要允许应用拥有这些权限。

  1. 下载部署需要的代码

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

  • common.yaml:创建Namespace、CRD、Role、RoleBinding、ClusterRole、ClusterRoleBinding、PodSecurityPolicy、ServiceAccount
  • operator-openshift.yaml: 创建SCC以及完成Rook Operator部署
  • cluster.yaml:创建CephCluster
  • object-openshift.yaml: 使用rgw创建对象存储,并设置对象存储服务对外的端口
  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下将会创建对应的资源

$ 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创建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集群状态

ceph-dashboard
  1. 创建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
  # 文件系统,默认是ext4
  fstype: xfs
# reclaimPolicy,默认是"Delete",可以设置为"Retain","Recycle" 
reclaimPolicy: Retain
#  Kubernetes 1.14+支持Resize功能,只支持ext3, ext4, xfs类型
allowVolumeExpansion: true
EOF

至此完成了通过Rook部署Ceph集群,并创建了相应的StorageClass,该StorageClass便可以为应用提供使用。
如果需要对Ceph集群扩容,只需要更新CephCluster的配置,在storage项中添加新加入的目录或磁盘(生产上建议不要使用目录),Rook Operator将会自动将它加入到集群,实现集群的扩容。

Rook架构

参考文章

Rook官网
Rook 文档OpenShift
Rook文档——Ceph存储
Rook文档-Ceph Block

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268