Openshift:可靠的Kubernetes发行版

OpenShift存储管理方案——Rook

2019-12-22  本文已影响0人  潘晓华Michael
OpenShift Rook

存储的重要意义

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

Rook:CNCF云原生存储项目

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

Rook支持多种存储系统服务

Rook的特性

以下是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

  1. 修改operator-openshift.yaml文件
  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

上一篇下一篇

猜你喜欢

热点阅读