如何在Kubernetes中快速部署基于Rook-Ceph的分布式块存储
2025.09.18 18:51浏览量:13简介:本文详细介绍了在Kubernetes集群中通过Rook-Ceph快速部署分布式块存储的完整流程,涵盖环境准备、Rook-Ceph安装、存储池配置及实际应用示例,助力开发者高效实现持久化存储管理。
如何在Kubernetes中快速部署基于Rook-Ceph的分布式块存储
摘要
随着容器化技术的普及,Kubernetes已成为分布式应用的标准运行环境。然而,如何为Kubernetes提供高效、可靠的持久化存储一直是开发者关注的焦点。Rook-Ceph作为Kubernetes原生存储方案,通过将Ceph分布式存储系统与Kubernetes无缝集成,提供了灵活、可扩展的块存储、文件存储和对象存储服务。本文将详细介绍如何在Kubernetes中快速部署基于Rook-Ceph的分布式块存储,涵盖环境准备、Rook-Ceph安装、存储池配置及实际应用示例,帮助开发者高效实现持久化存储管理。
一、Rook-Ceph简介
Rook是一个开源的云原生存储编排工具,旨在将存储系统(如Ceph、EdgeFS等)转换为Kubernetes上的自管理、自扩展和自修复的存储服务。Rook-Ceph是Rook对Ceph存储系统的具体实现,它通过自定义资源定义(CRD)和Operator模式,简化了Ceph集群在Kubernetes中的部署和管理。
Ceph是一个统一的分布式存储系统,提供块存储(RBD)、文件存储(CephFS)和对象存储(RADOSGW)三种接口。其核心优势在于高扩展性、高可用性和数据冗余保护,非常适合作为Kubernetes的持久化存储后端。
二、环境准备
1. Kubernetes集群要求
- 版本要求:Kubernetes 1.16或更高版本(推荐1.20+)。
- 节点资源:至少3个工作节点(推荐每个节点4核CPU、8GB内存以上)。
- 存储设备:每个节点至少一块未挂载的裸盘(如/dev/sdb),用于OSD(对象存储设备)。
- 网络要求:节点间网络延迟低(建议同一可用区),开放端口6789(Monitor)、6800-7300(OSD)。
2. 工具安装
- Helm:用于安装Rook-Ceph(推荐Helm 3+)。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh./get_helm.sh
- kubectl:配置好Kubernetes集群访问权限。
3. 存储设备准备
在每个节点上执行以下命令,确认可用磁盘:
lsblk -o NAME,ROTA,SIZE,MOUNTPOINT | grep -v "sda1" | grep -v "boot"
确保输出中包含未挂载的磁盘(如sdb)。
三、部署Rook-Ceph集群
1. 添加Rook Helm仓库
helm repo add rook-release https://charts.rook.io/releasehelm repo update
2. 创建命名空间
kubectl create namespace rook-ceph
3. 部署Rook-Ceph Operator
helm install rook-ceph rook-release/rook-ceph -n rook-ceph \--set operatorNamespace=rook-ceph \--set enableDiscoveryDaemon=true
此命令会部署Rook-Ceph Operator,并自动发现节点上的可用磁盘。
4. 验证Operator状态
kubectl -n rook-ceph get pods | grep rook-ceph-operator
输出应显示Running状态。
四、创建Ceph集群
1. 应用Ceph集群CRD
下载并修改cluster.yaml(示例文件通常位于Rook GitHub仓库的cluster/examples/kubernetes/ceph目录):
curl -O https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/cluster.yaml
关键配置项:
- storage.useAllNodes:
true(使用所有节点) - storage.nodes: 显式指定节点和磁盘(如
name: node1, devices: [ {name: "sdb"} ]) - mon.count:
3(Monitor数量,奇数) - dashboard.enabled:
true(启用Web仪表盘)
应用配置:
kubectl apply -f cluster.yaml -n rook-ceph
2. 验证Ceph集群状态
kubectl -n rook-ceph get pods | grep ceph
等待所有Pod(Monitor、OSD、MGR、MDS)进入Running状态。
检查集群健康状态:
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph status
输出应显示HEALTH_OK。
五、配置分布式块存储
1. 创建存储池和存储类
下载并修改storageclass.yaml:
apiVersion: ceph.rook.io/v1kind: CephBlockPoolmetadata:name: replicapoolnamespace: rook-cephspec:replicated:size: 3failureDomain: host---apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: rook-ceph-blockprovisioner: rook-ceph.rbd.csi.ceph.comparameters:clusterID: rook-cephpool: replicapoolimageFormat: "2"imageFeatures: "layering"csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner-secretcsi.storage.k8s.io/provisioner-secret-namespace: rook-cephcsi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner-secretcsi.storage.k8s.io/controller-expand-secret-namespace: rook-cephcsi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node-secretcsi.storage.k8s.io/node-stage-secret-namespace: rook-cephcsi.storage.k8s.io/fstype: ext4allowVolumeExpansion: truereclaimPolicy: Delete
应用配置:
kubectl apply -f storageclass.yaml
2. 测试块存储
创建PVC:
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: ceph-block-pvcspec:accessModes:- ReadWriteOncestorageClassName: rook-ceph-blockresources:requests:storage: 10Gi
应用并验证:
kubectl apply -f pvc.yamlkubectl get pvc
六、实际应用示例
1. 部署MySQL并使用Ceph块存储
apiVersion: apps/v1kind: Deploymentmetadata:name: mysqlspec:selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalue: "password"volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumes:- name: mysql-datapersistentVolumeClaim:claimName: ceph-block-pvc
应用配置并验证数据持久性:
kubectl apply -f mysql.yamlkubectl exec -it mysql-<pod-id> -- mysql -uroot -ppassword -e "CREATE DATABASE test;"
七、高级配置与优化
1. 性能调优
- OSD调优:修改
cluster.yaml中的resources部分,为OSD分配更多CPU/内存。 - 存储池配置:根据业务需求选择不同的副本策略(如
erasure-coded节省空间)。
2. 监控与告警
- 集成Prometheus和Grafana:通过Rook提供的ServiceMonitor监控Ceph集群指标。
- 配置告警规则:针对
HEALTH_WARN/HEALTH_ERR状态触发告警。
八、总结
通过Rook-Ceph,开发者可以在Kubernetes中快速部署企业级分布式块存储,实现存储资源的自动化管理和弹性扩展。本文从环境准备到实际应用,详细介绍了部署流程和关键配置,帮助读者高效构建高可用、低延迟的持久化存储解决方案。未来,随着Kubernetes和Ceph生态的持续演进,Rook-Ceph将成为容器化存储的首选方案之一。

发表评论
登录后可评论,请前往 登录 或 注册