在k0s集群中使用Rook部署Ceph分布式存储系统

在k0s集群中使用Rook部署Ceph分布式存储系统

k0s k0s - The Zero Friction Kubernetes k0s 项目地址: 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需要直接访问原始存储设备,可以是以下三种形式之一:

  1. 原始设备(无分区或文件系统)
  2. 原始分区(无文件系统)
  3. 存储类提供的块模式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

验证数据持久性:

  1. 向MongoDB写入测试数据
  2. 删除Pod并等待重建
  3. 确认数据仍然存在

运维建议

  1. 监控:部署Ceph Dashboard监控集群健康状态
  2. 扩容:通过增加OSD节点或扩展现有节点存储容量来扩展集群
  3. 备份:定期备份Ceph集群关键数据
  4. 升级:遵循Rook文档的升级路径进行版本升级

常见问题排查

  1. OSD无法启动:检查设备是否已被格式化,Ceph需要原始设备
  2. PVC处于Pending状态:检查存储类配置和Ceph集群健康状况
  3. 性能问题:考虑调整CRUSH map优化数据分布

总结

通过本文,我们成功在k0s集群中部署了生产可用的Ceph分布式存储系统。这种组合提供了:

  • 高度可靠的持久化存储解决方案
  • 动态卷供应能力
  • 与k0s轻量级特性完美结合
  • 云原生存储管理体验

这种架构特别适合需要高可用存储的中小型Kubernetes环境,既保持了k0s的轻量优势,又获得了企业级存储能力。

k0s k0s - The Zero Friction Kubernetes k0s 项目地址: https://gitcode.com/gh_mirrors/k0/k0s

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍盛普Silas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值