如何通过Ceph CSI插件将Kubernetes集群接入Ceph存储系统?

摘要:ceph-csi分析,通过ceph-csi让k8s接入ceph存储,对所涉及的k8s对象与组件进行了简单的介绍,以及k8s对存储进行相关操作的流程分析,存储相关操作包括了存储创建、存储扩容、存储挂载、解除存储挂载以及存储删除操作。
kubernetes ceph-csi分析目录导航 概述 下面的分析是k8s通过ceph-csi(csi plugin)接入ceph存储(csi相关组件的分析以rbd为例进行分析),对csi系统结构、所涉及的k8s对象与组件进行了简单的介绍,以及k8s对存储进行相关操作的流程分析,存储相关操作包括了存储创建、存储扩容、存储挂载、解除存储挂载以及存储删除操作。 csi系统结构 这是一张k8s csi的系统架构图,图中所画的组件以及k8s对象,接下来会一一进行分析。 csi简介 CSI是Container Storage Interface(容器存储接口)的简写。 CSI的目的是定义行业标准“容器存储接口”,使存储供应商(SP)能够开发一个符合CSI标准的插件并使其可以在多个容器编排(CO)系统中工作。CO包括Cloud Foundry, Kubernetes, Mesos等。 CSI组件一般采用容器化部署,减少了环境依赖。 涉及k8s对象 1. PersistentVolume 持久存储卷,集群级别资源,代表了存储卷资源,记录了该存储卷资源的相关信息。 回收策略 (1)retain:保留策略,当删除PVC的时候,PV与外部存储资源仍然存在。 (2)delete:删除策略,当与pv绑定的pvc被删除的时候,会从k8s集群中删除PV对象,并执行外部存储资源的删除操作。 (3)resycle(已废弃) pv状态迁移 available --> bound --> released 2. PersistentVolumeClaim 持久存储卷声明,namespace级别资源,代表了用户对于存储卷的使用需求声明。 示例: apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test namespace: test spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: csi-cephfs-sc volumeMode: Filesystem pvc状态迁移 pending --> bound 3. StorageClass 定义了创建pv的模板信息,集群级别资源,用于动态创建pv。 示例: apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-rbd-sc parameters: clusterID: ceph01 imageFeatures: layering imageFormat: "2" mounter: rbd pool: kubernetes provisioner: rbd.csi.ceph.com reclaimPolicy: Delete volumeBindingMode: Immediate 4. VolumeAttachment VolumeAttachment 记录了pv的相关挂载信息,如挂载到哪个node节点,由哪个volume plugin来挂载等。 AD Controller 创建一个 VolumeAttachment,而 External-attacher 则通过观察该 VolumeAttachment,根据其状态属性来进行存储的挂载和卸载操作。 示例: apiVersion: storage.k8s.io/v1 kind: VolumeAttachment metadata: name: csi-123456 spec: attacher: cephfs.csi.ceph.com nodeName: 192.168.1.10 source: persistentVolumeName: pvc-123456 status: attached: true 5. CSINode CSINode 记录了csi plugin的相关信息(如nodeId、driverName、拓扑信息等)。 当Node Driver Registrar向kubelet注册一个csi plugin后,会创建(或更新)一个CSINode对象,记录csi plugin的相关信息。
阅读全文