告别存储困境:kubeasz+Rook打造Kubernetes原生Ceph存储集群实战指南

告别存储困境:kubeasz+Rook打造Kubernetes原生Ceph存储集群实战指南

【免费下载链接】kubeasz 一款基于Ansible的Kubernetes安装与运维管理工具,提供自动化部署、集群管理、配置管理等功能。 - 功能:提供自动化部署Kubernetes集群、节点管理、容器管理、存储管理、网络管理等功能。 - 特点:基于Ansible,易于上手;支持离线安装;支持多种Kubernetes版本。 【免费下载链接】kubeasz 项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz

为什么需要Kubernetes原生存储解决方案?

你是否还在为Kubernetes集群存储方案选型而烦恼?传统NFS存储性能不足,云厂商存储服务绑定特定平台,而分布式存储又面临部署复杂、运维成本高的问题。本文将带你通过kubeasz工具与Rook结合,从零构建基于Ceph的Kubernetes原生存储集群,彻底解决容器化应用的数据持久化难题。

读完本文你将掌握:

  • 使用kubeasz快速部署支持Ceph的Kubernetes环境
  • 通过Rook操作Ceph存储集群的全流程管理
  • 动态PV创建与应用挂载的最佳实践
  • 存储集群监控与故障排查实用技巧

存储方案对比:为什么选择Rook+Ceph?

存储方案性能高可用运维复杂度Kubernetes集成度
NFS需额外配置一般
云厂商存储中高高(厂商锁定)
Rook+Ceph原生支持完全原生

Rook作为Kubernetes的存储编排器,能够将Ceph存储系统无缝集成到K8s环境中,提供以下核心优势:

  • 完全基于Kubernetes API的操作体验
  • 自动化存储集群部署与扩缩容
  • 支持块存储、文件存储和对象存储
  • 自愈能力与数据冗余保护

环境准备与前置条件

在开始部署前,请确保你的环境满足以下要求:

  • 至少3台节点的Kubernetes集群(通过kubeasz部署最佳)
  • 每节点至少1块空闲磁盘(用于Ceph OSD)
  • 节点间网络互通(建议10Gbps以上带宽)
  • kubeasz版本3.6.0+(版本说明

使用kubeasz部署支持Rook的K8s集群

  1. 首先通过ezdown工具下载所需资源:
./ezdown -D
  1. 配置集群参数,编辑配置文件:
vi clusters/mycluster/config.yml
  1. 确保开启必要的存储相关组件:
# 在config.yml中添加以下配置
nfs_provisioner_install: "no"  # 禁用NFS provisioner
local_path_provisioner_install: "yes"  # 启用本地存储供Rook使用
  1. 执行集群部署:
./ezctl setup mycluster 01 02 03 04 05 06 07

验证集群状态:

kubectl get nodes
kubectl get pods -n kube-system

Rook Ceph集群部署实战

部署Rook Operator

  1. 创建Rook命名空间:
kubectl create namespace rook-ceph
  1. 下载Rook部署清单(以v1.11.8为例):
wget https://github.com/rook/rook/raw/v1.11.8/deploy/examples/operator.yaml
  1. 修改operator配置以适配kubeasz环境:
# 添加以下配置到operator.yaml的rook-ceph-operator Deployment中
env:
- name: FLEXVOLUME_DIR_PATH
  value: "/opt/kubernetes/kubelet/plugins/kubernetes.io/flexvolume"
  1. 应用部署清单:
kubectl apply -f operator.yaml -n rook-ceph

验证operator部署状态:

kubectl get pods -n rook-ceph

创建Ceph集群

  1. 创建集群配置文件cluster.yaml(关键配置片段):
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
  name: rook-ceph
  namespace: rook-ceph
spec:
  cephVersion:
    image: ceph/ceph:v17.2.6
  dataDirHostPath: /var/lib/rook
  mon:
    count: 3  # 生产环境建议3或5
  storage:
    useAllNodes: true
    useAllDevices: true
    deviceFilter: "^sd[b-z]"  # 过滤要使用的磁盘
  1. 应用集群配置:
kubectl apply -f cluster.yaml -n rook-ceph
  1. 监控集群部署进度:
kubectl -n rook-ceph rollout status deploy/rook-ceph-operator

部署完成后,查看Ceph集群状态:

kubectl exec -n rook-ceph deploy/rook-ceph-tools -- ceph status

存储池与存储类配置

创建Ceph块存储

  1. 创建Ceph存储池:
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
  name: replicapool
  namespace: rook-ceph
spec:
  failureDomain: host
  replicated:
    size: 3  # 3副本存储
  1. 创建StorageClass:
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
  csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
reclaimPolicy: Delete
allowVolumeExpansion: true

将此StorageClass设置为默认:

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

应用实战:使用Ceph存储

动态PV创建与使用示例

创建PVC请求:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  # storageClassName: rook-ceph-block (如已设为默认则可省略)

在应用中使用PVC:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: test-container
    image: busybox
    command: ["sleep", "3600"]
    volumeMounts:
    - name: test-volume
      mountPath: /mnt/test
  volumes:
  - name: test-volume
    persistentVolumeClaim:
      claimName: test-pvc

验证存储挂载:

kubectl exec -it test-pod -- df -h /mnt/test

监控与运维管理

集成Prometheus监控

通过kubeasz部署的集群已默认集成Prometheus,只需添加以下ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: rook-ceph-monitor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: rook-ceph-mgr
  namespaceSelector:
    matchNames:
    - rook-ceph
  endpoints:
  - port: http-metrics

常用运维命令

查看Ceph集群状态:

kubectl exec -n rook-ceph deploy/rook-ceph-tools -- ceph -s

查看OSD状态:

kubectl exec -n rook-ceph deploy/rook-ceph-tools -- ceph osd tree

扩容存储池:

kubectl exec -n rook-ceph deploy/rook-ceph-tools -- ceph osd pool set replicapool size 3

故障处理与最佳实践

磁盘故障处理流程

  1. 标记故障磁盘为out:
kubectl exec -n rook-ceph deploy/rook-ceph-tools -- ceph osd out osd.0
  1. 移除故障OSD:
# 编辑CephCluster资源,添加要移除的设备
spec:
  storage:
    nodes:
    - name: node1
      devices:
      - name: sdb
        config:
          device_removal_safety: "out"
  1. 更换物理磁盘后,重新添加设备:
spec:
  storage:
    nodes:
    - name: node1
      devices:
      - name: sdc  # 新磁盘

性能优化建议

  • 使用专用网络分离Ceph集群流量(public与cluster网络)
  • 为OSD启用缓存分层(使用SSD作为缓存层)
  • 根据工作负载调整PG数量(推荐每OSD 100-200个PG)
  • 定期执行Ceph集群健康检查与数据清理

总结与进阶学习

通过本文介绍的方法,你已成功使用kubeasz和Rook在Kubernetes集群中部署了Ceph存储系统。这一解决方案不仅提供了企业级的存储能力,还保持了与Kubernetes生态的原生集成,为容器化应用提供了可靠的数据持久化保障。

进阶学习资源:

存储是Kubernetes生态中至关重要的一环,选择合适的存储方案直接影响整个集群的稳定性与性能。希望本文能帮助你构建更可靠、高效的容器存储基础设施!

【免费下载链接】kubeasz 一款基于Ansible的Kubernetes安装与运维管理工具,提供自动化部署、集群管理、配置管理等功能。 - 功能:提供自动化部署Kubernetes集群、节点管理、容器管理、存储管理、网络管理等功能。 - 特点:基于Ansible,易于上手;支持离线安装;支持多种Kubernetes版本。 【免费下载链接】kubeasz 项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz

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

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

抵扣说明:

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

余额充值