如何在Kubernetes中快速部署基于Rook-Ceph的分布式块存储
2025.09.18 18:51浏览量:0简介:本文详细介绍了在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-3
chmod 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/release
helm 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/v1
kind: CephBlockPool
metadata:
name: replicapool
namespace: rook-ceph
spec:
replicated:
size: 3
failureDomain: host
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
clusterID: rook-ceph
pool: replicapool
imageFormat: "2"
imageFeatures: "layering"
csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner-secret
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner-secret
csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph
csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node-secret
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
csi.storage.k8s.io/fstype: ext4
allowVolumeExpansion: true
reclaimPolicy: Delete
应用配置:
kubectl apply -f storageclass.yaml
2. 测试块存储
创建PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ceph-block-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: rook-ceph-block
resources:
requests:
storage: 10Gi
应用并验证:
kubectl apply -f pvc.yaml
kubectl get pvc
六、实际应用示例
1. 部署MySQL并使用Ceph块存储
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: ceph-block-pvc
应用配置并验证数据持久性:
kubectl apply -f mysql.yaml
kubectl 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将成为容器化存储的首选方案之一。
发表评论
登录后可评论,请前往 登录 或 注册