Kubernetes 中部署 Ceph,构建高可用分布式存储服务

Ceph 是一个高性能的分布式存储系统,支持对象存储、块存储和文件存储,广泛应用于云原生环境中。结合 Kubernetes,Ceph 可以为应用提供动态持久化存储卷(PV),实现高可用和弹性存储。

一、准备工作

1. 系统要求

• Kubernetes 集群:版本 1.22+,至少 3 个节点。

• Ceph 存储节点:每个节点至少 4GB 内存和 20GB 存储。

• 操作系统:CentOS 7+/Ubuntu 18.04+。

2. 安装必要工具

在所有 Kubernetes 节点安装以下工具:

• kubectl:管理 Kubernetes 集群。

• helm:用于安装 Ceph 的 Helm Chart。

安装 Helm:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

二、部署 Ceph Operator

1. 添加 Rook 的 Helm 仓库

Rook 是一个 Kubernetes 上的 Ceph Operator,可以简化 Ceph 的部署和管理:

helm repo add rook-release https://charts.rook.io/release

helm repo update

2. 部署 Ceph Operator

在 Kubernetes 中部署 Rook 的 Ceph Operator:

kubectl create namespace rook-ceph

helm install rook-ceph rook-release/rook-ceph --namespace rook-ceph

3. 验证 Operator 状态

确保 Operator 正常运行:

kubectl get pods -n rook-ceph

输出示例:

bash 复制代码
NAME                                     READY   STATUS    RESTARTS   AGE
rook-ceph-operator-xxxxxxxxxx-yyyyy      1/1     Running   0          2m
rook-ceph-agent-xxxxxxxxxx-yyyyy         1/1     Running   0          2m
rook-discover-xxxxxxxxxx-yyyyy           1/1     Running   0          2m

三、配置 Ceph 集群

1. 创建存储节点配置

为 Ceph 配置存储设备(假设 /dev/sdb 是空闲磁盘):

bash 复制代码
kubectl apply -f - <<EOF
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
  name: rook-ceph
  namespace: rook-ceph
spec:
  cephVersion:
    image: ceph/ceph:v16.2.6
    allowUnsupported: false
  dataDirHostPath: /var/lib/rook
  storage:
    useAllNodes: true
    useAllDevices: false
    devices:
      - name: /dev/sdb
  network:
    hostNetwork: false
EOF

2. 验证 Ceph 集群状态

检查 Ceph 集群的健康状态:

kubectl -n rook-ceph get cephcluster

输出示例:

bash 复制代码
NAME         DATADIRHOSTPATH   MONCOUNT   AGE     PHASE     MESSAGE
rook-ceph    /var/lib/rook     3          5m      Ready     Cluster created successfully

四、创建存储类

1. 配置 RBD 存储类

为 Kubernetes 创建一个基于 RBD 的存储类:

bash 复制代码
kubectl apply -f - <<EOF
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
  csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
  csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
  - discard
EOF

2. 验证存储类

检查存储类是否创建成功:

kubectl get storageclass

输出示例:

bash 复制代码
NAME               PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE   AGE
rook-ceph-block    rook-ceph.rbd.csi.ceph.com      Delete          Immediate           2m

五、测试存储功能

1. 创建测试 PVC

为测试应用创建一个 PVC:

bash 复制代码
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-pvc
  namespace: default
spec:
  storageClassName: rook-ceph-block
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
EOF

2. 验证 PVC 状态

确保 PVC 已成功绑定:

kubectl get pvc ceph-pvc

输出示例:

bash 复制代码
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
ceph-pvc    Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   1Gi        RWO            rook-ceph-block   1m

3. 挂载 PVC 到测试 Pod

使用 PVC 创建一个测试 Pod:

bash 复制代码
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: busybox
    image: busybox
    command:
      - sleep
      - "3600"
    volumeMounts:
      - mountPath: "/mnt"
        name: ceph-vol
  volumes:
    - name: ceph-vol
      persistentVolumeClaim:
        claimName: ceph-pvc
EOF

4. 验证挂载成功

进入 Pod 并检查挂载:

kubectl exec -it test-pod -- sh

ls /mnt

六、扩展功能

1. 配置对象存储

为应用提供 S3 兼容的对象存储:

创建一个 CephObjectStore:

kubectl apply -f object-store.yaml

2. 配置 Bucket 和访问权限。

配置文件存储

通过 CephFS 提供共享文件存储服务:

创建一个 CephFilesystem:

kubectl apply -f filesystem.yaml

相关推荐
数据智能老司机10 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机11 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
云上艺旅11 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
数据智能老司机11 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
IT成长日记11 小时前
【Kafka基础】Kafka工作原理解析
分布式·kafka
ghostwritten13 小时前
Run Milvus in Kubernetes with Milvus Operator
容器·kubernetes·milvus
州周13 小时前
kafka副本同步时HW和LEO
分布式·kafka
爱的叹息15 小时前
主流数据库的存储引擎/存储机制的详细对比分析,涵盖关系型数据库、NoSQL数据库和分布式数据库
数据库·分布式·nosql
斯普信专业组15 小时前
Ceph异地数据同步之-RBD异地同步复制(下)
linux·服务器·ceph
duration~15 小时前
K8S自定义CRD
容器·贪心算法·kubernetes