参考:
​https://github.com/ceph/ceph-csi​

介绍

Ceph容器存储接口(CSI)驱动程序,用于RBD, CephFS。

通过kubernetes sidecar部署provisioner, attacher, resizer, driver-registrar 和 snapshotter 组件,以支持CSI功能。

Ceph CSI插件实现了支持CSI的Container Orchestrator (CO)和Ceph集群之间的接口。它允许动态供应Ceph卷并将它们附加到工作负载。

提供独立的CSI插件来支持RBD和cephfs后端的卷

CSI RBD 插件

RBD CSI插件能够提供新的RBD镜像,并将它们附加到工作负载上。

部署教程:​​https://github.com/ceph/ceph-csi/blob/devel/docs/deploy-rbd.md​

部署清单:​​https://github.com/ceph/ceph-csi/tree/devel/deploy/rbd/kubernetes​

清单说明:

必要条件:
需要 Kubernetes 1.14+。
您的 Kubernetes 集群必须允许特权 Pod。
集群节点的 Docker 守护进程必须允许共享挂载(​​https://kubernetes.io/zh/docs/concepts/storage/volumes/#mount-propagation)​

1.为 sidecar 容器和节点插件部署 RBAC:

kubectl create -f csi-provisioner-rbac.yaml
kubectl create -f csi-nodeplugin-rbac.yaml

这些清单部署服务帐户、集群角色和集群角色绑定。 这些为 RBD 和 CephFS CSI 插件共享,因为它们需要相同的权限。

2.为 sidecar 容器和节点插件部署 PodSecurityPolicy 资源:

注意: 仅当 PodSecurityPolicy 准入控制器在您的集群上处于活动状态。

kubectl create -f csi-provisioner-psp.yaml
kubectl create -f csi-nodeplugin-psp.yaml

3.为 CSI 插件部署 ConfigMap:

kubectl create -f csi-config-map.yaml

configmap 部署一个空的 CSI 配置,该配置作为卷挂载 在 Ceph CSI 插件 pod 中。 添加特定的 Ceph 集群配置,请参阅:
https://github.com/ceph/ceph-csi/blob/devel/examples/README.md#creating-csi-configuration-for-rbd-based-provisioning

4.部署 CSI sidecar 容器:

kubectl create -f csi-rbdplugin-provisioner.yaml

部署包含 external-provisioner,external-attacher,csi-snapshotter sidecar 容器和 CSI RBD 插件。

5.部署 RBD CSI 驱动程序:

kubectl create -f csi-rbdplugin.yaml

使用两个容器部署守护进程集:CSI node-driver-registrar 和 CSI RBD 驱动程序。
笔记: 如果您想使用不同的发布版本,请在 provisioner 和 nodeplugin YAML中将 canary 替换为其他发行版。
for stable functionality replace canary with latest release version
image: quay.io/cephcsi/cephcsi:canary

6.验证 Kubernetes 中的部署

成功完成上述步骤后,您应该会看到类似于以下内容的输出:

$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/csi-rbdplugin-fptqr 3/3 Running 0 21s
pod/csi-rbdplugin-provisioner-0 5/5 Running 0 22s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/csi-rbdplugin-provisioner ClusterIP 10.104.2.130 <none> 8080/TCP 23s
...

7.下一步:https://github.com/ceph/ceph-csi/blob/devel/examples/README.md


CSI CephFS 插件

CSI CephFS 插件能够提供新的 CephFS 卷 并将现有的附加和安装到工作负载。

部署教程:​​https://github.com/ceph/ceph-csi/blob/devel/docs/deploy-cephfs.md​

部署清单:​​https://github.com/ceph/ceph-csi/tree/devel/deploy/cephfs/kubernetes​

清单说明:

必要条件:
需要 Kubernetes 1.14+。
您的 Kubernetes 集群必须允许特权 Pod。
集群节点的 Docker 守护进程必须允许共享挂载(​​https://kubernetes.io/zh/docs/concepts/storage/volumes/#mount-propagation)​

1.为 sidecar 容器和节点插件部署 RBAC:

kubectl create -f csi-provisioner-rbac.yaml
kubectl create -f csi-nodeplugin-rbac.yaml

这些清单部署服务帐户、集群角色和集群角色 绑定。 这些为 RBD 和 CephFS CSI 插件共享,因为它们需要 相同的权限。

2.为 sidecar 容器和节点插件部署 PodSecurityPolicy 资源:

注意: 仅当 PodSecurityPolicy 准入控制器在您的集群上处于活动状态。

kubectl create -f csi-provisioner-psp.yaml
kubectl create -f csi-nodeplugin-psp.yaml

3.为 CSI 插件部署 ConfigMap:

kubectl create -f csi-config-map.yaml

configmap 部署一个空的 CSI 配置,该配置作为卷挂载 在 Ceph CSI 插件 pod 中。 添加特定的 Ceph 集群配置 详细信息,请参阅:https://github.com/ceph/ceph-csi/blob/devel/examples/README.md#creating-csi-configuration

4.部署 CSI sidecar 容器:

kubectl create -f csi-cephfsplugin-provisioner.yaml

部署包含 external-provisioner 的配置部署, CSI CephFS 的外部连接器 external-attacher。

5.部署 CSI CephFS 驱动程序:

kubectl create -f csi-cephfsplugin.yaml

使用两个容器部署守护进程集:CSI node-driver-registrar 和 CSI CephFS 驱动程序。

笔记: 如果您想使用不同的发布版本,请在 provisioner 和 nodeplugin YAML 中将 canary 替换为其他发行版。

# for stable functionality replace canary with latest release version
image: quay.io/cephcsi/cephcsi:canary

6.验证 Kubernetes 中的部署

成功完成上述步骤后,您应该会看到类似于以下内容的输出:

$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/csi-cephfsplugin-provisioner-0 4/4 Running 0 25s
pod/csi-cephfsplugin-rljcv 3/3 Running 0 24s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/csi-cephfsplugin-provisioner ClusterIP 10.101.78.75 <none> 8080/TCP 26s
...

7.下一步:https://github.com/ceph/ceph-csi/blob/devel/examples/README.md#deploying-the-storage-class

8.卷删除注意事项

当请求时,驱动程序会删除动态配置的卷。当对小于或等于1.0.0的插件版本执行删除操作时,静态分配的卷是不操作的,并且用户希望在Ceph集群上删除这些卷。


当前项目状态:GA当前Ceph-CSI特性和可用版本

【K8s存储】Ceph容器存储接口(CSI)驱动简单介绍_活动状态

【K8s存储】Ceph容器存储接口(CSI)驱动简单介绍_github_02

【K8s存储】Ceph容器存储接口(CSI)驱动简单介绍_守护进程_03

注意: Alpha状态反映了未来可能发生的非向后兼容更改,因此不建议在生产中使用。

CSI 规范和 Kubernetes 版本兼容性

​https://kubernetes-csi.github.io/docs/#kubernetes-releases​

当前Ceph CSI 容器镜像和版本兼容性

【K8s存储】Ceph容器存储接口(CSI)驱动简单介绍_github_04