K8s 对接 Ceph RBD 存储池
本文最后更新于7 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、Ceph 端准备(存储侧)

1️⃣ 创建 CRUSH 规则(副本池使用)

ceph osd crush rule create-replicated replicated_osd_rule default osd
ceph osd crush rule dump replicated_osd_rule

2️⃣ 创建 RBD 存储池

ceph osd pool create rbd01
ceph osd pool application enable rbd01 rbd

绑定 CRUSH 规则:

ceph osd pool set rbd01 crush_rule replicated_osd_rule

设置副本参数(小集群推荐):

ceph osd pool set rbd01 size 2
ceph osd pool set rbd01 min_size 1

3️⃣ 创建 Ceph RBD 用户(供 K8s 使用)

ceph auth add client.rbduser \
  mon 'allow r' \
  osd 'allow rwx pool=rbd01'

获取 key(后面写 Secret 要用):

ceph auth get client.rbduser

示例:

[client.rbduser]
 key = AQAVG3hp2Ll4KxAA+g9t3VVEgsFN4Y+Q/Vch8w==

4️⃣ 获取 Ceph 集群信息

ceph mon dump

重点记录:

  • fsid(clusterID)
  • mon IP:PORT

示例:

fsid a381d0fc-fa89-11f0-a737-000c29fb9165
mon.ceph.example.com 172.17.0.140:6789

二、Kubernetes 端准备(CSI 驱动)

1️⃣ 下载 Ceph-CSI 部署文件

yum install -y git
mkdir /opt/ceph-csi
git clone https://gitee.com/yftyxa/ceph-csi.git /opt/ceph-csi

2️⃣ 创建命名空间

kubectl create ns csi

3️⃣ 准备 RBD CSI YAML 文件

mkdir /csi-rbd
cp /opt/ceph-csi/deploy/rbd/kubernetes/* /csi-rbd/

目录包含:

csi-config-map.yaml
csi-nodeplugin-rbac.yaml
csi-rbdplugin.yaml
csi-rbdplugin-provisioner.yaml
csi-provisioner-rbac.yaml
csidriver.yaml

4️⃣ 配置 Ceph CSI ConfigMap(关键)

编辑csi-config-map.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: ceph-csi-config
data:
  config.json: |-
    [
      {
        "clusterID": "a381d0fc-fa89-11f0-a737-000c29fb9165",
        "monitors": [
          "172.17.0.140:6789"
        ]
      }
    ]

应用配置:

cp /opt/ceph-csi/deploy/ceph-conf.yaml /csi-rbd/
kubectl -n csi apply -f ceph-conf.yaml -f csi-config-map.yaml

5️⃣ 修改所有 YAML 的命名空间为 csi

sed -i 's/namespace: default/namespace: csi/g' /csi-rbd/*

6️⃣ 部署 Ceph CSI RBD 插件

kubectl apply \
  -f csi-nodeplugin-rbac.yaml \
  -f csi-rbdplugin-provisioner.yaml \
  -f csi-rbdplugin.yaml \
  -f csi-provisioner-rbac.yaml \
  -n csi

确认 Pod 状态:

kubectl get pod -n csi

7️⃣ 调整 provisioner 副本数(推荐)

kubectl edit deployment csi-rbdplugin-provisioner -n csi

修改为:

replicas: 2


三、K8s 访问 Ceph 的认证(Secret)

1️⃣ 创建 RBD Secret

apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: csi
stringData:
  userID: rbduser
  userKey: AQAVG3hp2Ll4KxAA+g9t3VVEgsFN4Y+Q/Vch8w==

应用:

kubectl apply -f secret.yaml -n csi

四、创建 StorageClass(核心)

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
  clusterID: a381d0fc-fa89-11f0-a737-000c29fb9165
  pool: rbd01
  imageFeatures: "layering"

  csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
  csi.storage.k8s.io/provisioner-secret-namespace: csi
  csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
  csi.storage.k8s.io/node-stage-secret-namespace: csi

  csi.storage.k8s.io/fstype: ext4

reclaimPolicy: Delete
allowVolumeExpansion: true

应用并验证:

kubectl apply -f storageclass.yaml -n csi kubectl get sc

五、PVC + Pod 验证

1️⃣ 创建 PVC

kubectl apply -f pvc.yaml -n csi kubectl get pvc -n csi

状态应为:

STATUS: Bound


2️⃣ 创建 Pod 挂载 RBD

apiVersion: v1
kind: Pod
metadata:
  name: csi-rbd-demo-pod
spec:
  containers:
  - name: pod01
    image: centos:8
    command: ["/bin/bash","-c","sleep 10000"]
    volumeMounts:
    - name: mypvc
      mountPath: /opt/pvc
  volumes:
  - name: mypvc
    persistentVolumeClaim:
      claimName: rbd-pvc
kubectl apply -f pod.yaml -n csi

3️⃣ 验证 RBD 挂载成功

kubectl exec -it csi-rbd-demo-pod -n csi -- df -Th

看到:

/dev/rbd0 ext4 1G /opt/pvc

写入测试:

cd /opt/pvc touch {1..100}.txt


4️⃣ Node 节点侧验证(可选)

lsblk | grep rbd
rbd0 1G /var/lib/kubelet/pods/.../mount

六、整体流程总结(一句话版)

Ceph 创建 RBD 池 → 创建 rbd 用户 → K8s 部署 Ceph CSI → 创建 Secret → StorageClass → PVC → Pod 挂载 → RBD 设备映射到 Node → Pod 内使用

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇