资讯专栏INFORMATION COLUMN

使用Rook+Ceph在Kubernetes上作持久存储

kuangcaibao / 2570人阅读

摘要:充当在的业务流程层,将和流程部署为副本集。来自的文件将存储软件转变为自我管理自我扩展和自我修复的存储服务。由于请求使用文件系统格式化的卷,因此我需要在所有节点上安装工具。如果没有指定特定的存储类,我安装的任何应用程序都将使用进行数据存储。

作者:Earl C. Ruby III

我想在新的Kubernetes集群上安装Prometheus和Grafana,但为了使这些软件包能够工作,他们需要一些地方来存储持久数据。当我在Seagate担任云架构师时,我已经对Ceph进行了性能和规模测试,并且在过去的一年里玩过Rook,所以我决定安装Rook+Ceph,并将其用于Kubernetes集群的数据存储。

Ceph是一个分布式存储系统,提供对象、文件和块存储。在每个存储节点上,您将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程。在Ceph集群上,您还可以找到Ceph MON(监控)守护程序,它们确保Ceph集群保持高可用性。

Rook充当Ceph在Kubernetes的业务流程层,将OSD和MON流程部署为POD副本集。来自Rook的README文件:

Rook将存储软件转变为自我管理、自我扩展和自我修复的存储服务。它通过自动化部署,引导,准备,配置,扩展,升级,迁移,灾难恢复,监控和资源管理来实现此目的。 Rook使用底层云原生容器管理,调度和编排平台提供的工具来执行其职责。

https://github.com/rook/rook/...

当我创建集群时,我构建了具有40GB硬盘的VM,所以使用5个Kubernetes节点,在我的集群上提供了大约200GB的存储空间,其中大部分都将用于Ceph。

安装Rook+Ceph

安装Rook+Ceph非常简单。在我的个人群集上,我按照以下步骤安装了Rook+Ceph v0.9.0:

git clone git@github.com:rook/rook.git
cd rook
git checkout v0.9.0
cd cluster/examples/kubernetes/ceph
kubectl create -f operator.yaml
kubectl create -f cluster.yaml

Rook将POD部署在两个命名空间中,即rook-ceph-system和rook-ceph。 在我的群集上,POD花了大约2分钟来部署,初始化并进入运行状态。当我等待一切都完成时,我检查了POD状态:

$ kubectl -n rook-ceph-system get pod
NAME                                  READY   STATUS    RESTARTS   AGE
rook-ceph-agent-8tsq7                 1/1     Running   0          2d20h
rook-ceph-agent-b6mgs                 1/1     Running   0          2d20h
rook-ceph-agent-nff8n                 1/1     Running   0          2d20h
rook-ceph-agent-vl4zf                 1/1     Running   0          2d20h
rook-ceph-agent-vtpbj                 1/1     Running   0          2d20h
rook-ceph-agent-xq5dv                 1/1     Running   0          2d20h
rook-ceph-operator-85d64cfb99-hrnbs   1/1     Running   0          2d20h
rook-discover-9nqrp                   1/1     Running   0          2d20h
rook-discover-b62ds                   1/1     Running   0          2d20h
rook-discover-k77gw                   1/1     Running   0          2d20h
rook-discover-kqknr                   1/1     Running   0          2d20h
rook-discover-v2hhb                   1/1     Running   0          2d20h
rook-discover-wbkkq                   1/1     Running   0          2d20h
$ kubectl -n rook-ceph get pod
NAME                                READY   STATUS      RESTARTS   AGE
rook-ceph-mgr-a-7d884ddc8b-kfxt9    1/1     Running     0          2d20h
rook-ceph-mon-a-77cbd865b8-ncg67    1/1     Running     0          2d20h
rook-ceph-mon-b-7cd4b9774f-js8n9    1/1     Running     0          2d20h
rook-ceph-mon-c-86778859c7-x2qg9    1/1     Running     0          2d20h
rook-ceph-osd-0-67fff79666-fcrss    1/1     Running     0          35h
rook-ceph-osd-1-58bd4ccbbf-lsxj9    1/1     Running     1          2d20h
rook-ceph-osd-2-bf99864b5-n4q7v     1/1     Running     0          2d20h
rook-ceph-osd-3-577466c968-j8gjr    1/1     Running     0          2d20h
rook-ceph-osd-4-6856c5c6c9-92tb6    1/1     Running     0          2d20h
rook-ceph-osd-5-8669577f6b-zqrq9    1/1     Running     0          2d20h
rook-ceph-osd-prepare-node1-xfbs7   0/2     Completed   0          2d20h
rook-ceph-osd-prepare-node2-c9f55   0/2     Completed   0          2d20h
rook-ceph-osd-prepare-node3-5g4nc   0/2     Completed   0          2d20h
rook-ceph-osd-prepare-node4-wj475   0/2     Completed   0          2d20h
rook-ceph-osd-prepare-node5-tf5bt   0/2     Completed   0          2d20h
最后工作

现在我需要再做两件事,才能安装Prometheus和Grafana:

我需要让Rook成为我的集群的默认存储提供程序。

由于Prometheus Helm chart请求使用XFS文件系统格式化的卷,因此我需要在所有Ubuntu Kubernetes节点上安装XFS工具。(默认情况下,Kubespray尚未安装XFS,尽管目前有一个PR解决这个问题。)

要使Rook成为默认存储提供程序,我只需运行kubectl命令:

kubectl patch storageclass rook-ceph-block -p "{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}"

这会更新rook-ceph-block存储类,并使其成为群集上存储的默认值。如果没有指定特定的存储类,我安装的任何应用程序都将使用Rook+Ceph进行数据存储。

由于我使用Kubespray构建集群,而Kubespray使用Ansible,因此在所有主机上安装XFS工具的最简单方法之一,是使用Ansible“在所有主机上运行单个命令”功能:

cd kubespray
export ANSIBLE_REMOTE_USER=ansible
ansible kube-node -i inventory/mycluster/hosts.ini 
  --become --become-user root 
  -a "apt-get install -y xfsprogs"

现在已经安装了XFS,我可以使用Helm成功部署Prometheus和Grafana:

helm install --name prometheus stable/prometheus
helm install --name grafana stable/grafana

Helm chart安装Prometheus和Grafana,并在Rook+Ceph上为Prometheus Server和Prometheus Alert Manager(使用XFS格式化)创建持久存储卷。

Prometheus仪表板

Grafana仪表板

Rook给Prometheus服务器的持久存储

希望您觉得这个有帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33107.html

相关文章

  • 使用Rook+CephKubernetes上作持久存储

    摘要:充当在的业务流程层,将和流程部署为副本集。来自的文件将存储软件转变为自我管理自我扩展和自我修复的存储服务。由于请求使用文件系统格式化的卷,因此我需要在所有节点上安装工具。如果没有指定特定的存储类,我安装的任何应用程序都将使用进行数据存储。 作者:Earl C. Ruby III showImg(https://segmentfault.com/img/bVbljHL?w=300&h=1...

    muddyway 评论0 收藏0
  • rook使用教程,快速编排ceph

    摘要:一旦计算存储分离后,就可真正实现随意漂移,对集群维护来说是个极大的福音。不过目前面临最大的挑战可能还是分布式存储的性能问题。 kubernetes集群三步安装 安装 git clone https://github.com/rook/rook cd cluster/examples/kubernetes/ceph kubectl create -f operator.yaml 查看...

    elisa.yang 评论0 收藏0
  • zookeeper和etcd有状态服务部署实践

    摘要:二总结使用的和的,能够很好的支持这样的有状态服务部署到集群上。部署方式有待优化本次试验中使用静态方式部署集群,如果节点变迁时,需要执行等命令手动配置集群,严重限制了集群自动故障恢复扩容缩容的能力。 一. 概述 kubernetes通过statefulset为zookeeper、etcd等这类有状态的应用程序提供完善支持,statefulset具备以下特性: 为pod提供稳定的唯一的...

    dingda 评论0 收藏0
  • zookeeper和etcd有状态服务部署实践

    摘要:二总结使用的和的,能够很好的支持这样的有状态服务部署到集群上。部署方式有待优化本次试验中使用静态方式部署集群,如果节点变迁时,需要执行等命令手动配置集群,严重限制了集群自动故障恢复扩容缩容的能力。 一. 概述 kubernetes通过statefulset为zookeeper、etcd等这类有状态的应用程序提供完善支持,statefulset具备以下特性: 为pod提供稳定的唯一的...

    jackwang 评论0 收藏0

发表评论

0条评论

kuangcaibao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<