在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 集群的交互。