在k0s集群中使用Rook部署Ceph分布式存储系统
k0s k0s - The Zero Friction Kubernetes 项目地址: https://gitcode.com/gh_mirrors/k0/k0s
前言
在Kubernetes环境中,持久化存储是运行有状态应用的关键需求。本文将详细介绍如何在k0s轻量级Kubernetes发行版中,通过Rook Operator部署Ceph分布式存储系统,并验证其功能。
Ceph与Rook简介
Ceph是一个开源的、高度可扩展的分布式存储系统,提供对象存储、块存储和文件系统三种存储接口。它的主要特点包括:
- 自我修复和自我管理能力
- 无单点故障设计
- 数据自动均衡分布
- 支持动态扩展
Rook是一个云原生计算基金会(CNCF)项目,作为存储编排系统,它简化了在Kubernetes中部署和管理Ceph等存储系统的复杂度。Rook通过Operator模式自动化了存储集群的部署、配置、扩展、升级和维护。
环境准备
硬件要求
- 至少3个工作节点(推荐配置)
- 每个工作节点需要额外的裸设备或未格式化的分区
- 控制器节点1个(可与管理节点合并)
软件要求
- k0s Kubernetes发行版
- kubectl命令行工具
- 访问AWS或其他云平台的凭证(如果使用云环境)
部署步骤详解
1. 准备存储设备
Ceph需要直接访问原始存储设备,可以是以下三种形式之一:
- 原始设备(无分区或文件系统)
- 原始分区(无文件系统)
- 存储类提供的块模式PV
在本教程中,我们使用AWS EBS卷作为原始存储设备。为每个工作节点附加一个未格式化的EBS卷,Ceph将自动检测并使用这些设备。
验证设备状态:
lsblk -f
输出中对应的设备不应显示文件系统类型(FSTYPE为空)。
2. 部署k0s集群
使用k0sctl工具快速部署k0s集群:
k0sctl apply --config k0sctl.yaml
部署完成后,获取kubeconfig文件以访问集群:
k0sctl kubeconfig --config k0sctl.yaml > kubeconfig
export KUBECONFIG=$PWD/kubeconfig
3. 安装Rook Operator
Rook Operator负责管理Ceph集群的生命周期。部署前需要调整Operator配置以适应k0s环境:
# 在operator.yaml中修改以下配置
ROOK_CSI_KUBELET_DIR_PATH: "/var/lib/k0s/kubelet"
部署Rook Operator及其依赖:
kubectl apply -f crds.yaml -f common.yaml -f operator.yaml
4. 部署Ceph集群
使用默认配置创建Ceph集群:
kubectl apply -f cluster.yaml
部署完成后,检查Ceph组件状态:
kubectl get pods -n rook-ceph
应看到monitor、manager和OSD等核心组件正常运行。
5. 配置存储类
创建块存储存储类,启用动态卷供应:
kubectl apply -f ./csi/rbd/storageclass.yaml
6. 验证存储功能
创建持久卷声明(PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
spec:
storageClassName: rook-ceph-block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
应用PVC并检查状态:
kubectl apply -f mongo-pvc.yaml
kubectl get pvc
部署MongoDB应用
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo
spec:
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- image: mongo:4.0
name: mongo
ports:
- containerPort: 27017
name: mongo
volumeMounts:
- name: mongo-persistent-storage
mountPath: /data/db
volumes:
- name: mongo-persistent-storage
persistentVolumeClaim:
claimName: mongo-pvc
验证数据持久性:
- 向MongoDB写入测试数据
- 删除Pod并等待重建
- 确认数据仍然存在
运维建议
- 监控:部署Ceph Dashboard监控集群健康状态
- 扩容:通过增加OSD节点或扩展现有节点存储容量来扩展集群
- 备份:定期备份Ceph集群关键数据
- 升级:遵循Rook文档的升级路径进行版本升级
常见问题排查
- OSD无法启动:检查设备是否已被格式化,Ceph需要原始设备
- PVC处于Pending状态:检查存储类配置和Ceph集群健康状况
- 性能问题:考虑调整CRUSH map优化数据分布
总结
通过本文,我们成功在k0s集群中部署了生产可用的Ceph分布式存储系统。这种组合提供了:
- 高度可靠的持久化存储解决方案
- 动态卷供应能力
- 与k0s轻量级特性完美结合
- 云原生存储管理体验
这种架构特别适合需要高可用存储的中小型Kubernetes环境,既保持了k0s的轻量优势,又获得了企业级存储能力。
k0s k0s - The Zero Friction Kubernetes 项目地址: https://gitcode.com/gh_mirrors/k0/k0s
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考