作者信息:https://home.cnblogs.com/u/huangjiabobk

在k8S中,如何对接外部ceph?

在 Kubernetes (k8s) 中对接外部 Ceph 存储集群通常涉及以下几个关键步骤:

1. 准备Ceph配置和密钥文件
  • 将 Ceph 配置文件(ceph.conf)复制到所有 Kubernetes 节点的 /etc/ceph 目录下,以便集群中的节点可以访问到正确的配置信息。

  • 获取 Ceph 的客户端管理员密钥环 ceph.client.admin.keyring 并将其安全地分发到需要与 Ceph 进行交互的 Kubernetes 节点上。密钥环通常也需要放置在 /etc/ceph 目录中,并设置好适当的权限以确保安全性。

2. 创建 Kubernetes Secret
  • 将 Ceph 客户端密钥环转换为 Kubernetes Secret 对象,这样 Kubernetes 可以安全地管理并传递给运行在 Pod 中的应用程序。
kubectl create secret generic ceph-secret --from-file=ceph.client.admin.keyring=/etc/ceph/ceph.client.admin.keyring
3. 创建StorageClass
  • 创建一个 StorageClass 对象,它引用 Ceph 存储系统,并通过环境变量或 Secret 引用 Ceph 配置和密钥。这允许动态创建 PersistentVolumeClaim (PVC),当 PVC 被绑定时会自动创建相应的 PersistentVolume (PV)。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ceph-rbd-sc
provisioner: kubernetes.io/rbd
parameters:
  monitors: <ceph-monitors-endpoints>
  adminId: admin
  adminSecretName: ceph-secret
  adminSecretNamespace: default
  pool: k8s-data # 替换为你的 Ceph RBD 池名称
  fsType: xfs # 或其他文件系统类型
  imageFormat: "2" # RBD 图像格式版本,默认为 v2
  imageFeatures: "layering" # 如果支持快照,可包含 layering 功能
4. 使用 StorageClass
  • 开发者或者运维人员现在可以在部署应用时指定使用上述创建的 StorageClass,Kubernetes 会在应用需要持久化存储时,根据 StorageClass 自动从 Ceph 集群中分配存储资源。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-rbd-sc
  resources:
    requests:
      storage: 5Gi # 请求5GB存储空间
注意事项:
  • 在实际操作过程中,请务必替换 <ceph-monitors-endpoints> 为您的 Ceph Monitor 服务的实际地址。
  • 根据 Ceph 集群的具体情况,可能还需要额外的参数进行配置,例如 rados 用户名、密钥名称等。
  • 确保 Kubernetes 节点有足够的权限来挂载和卸载 Ceph RBD 卷。

综上所述,如果使用的是 Rook Operator 来管理 Ceph,流程会有所不同,因为 Rook 会自动处理大部分这些集成工作,包括 StorageClass 的创建以及与 Ceph 集群的交互。

posted @ 2024-02-20 08:57  黄嘉波  阅读(299)  评论(0编辑  收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波