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

参考:
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特性和可用版本



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

CSI 规范和 Kubernetes 版本兼容性

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

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

posted @ 2021-08-14 16:09  Varden  阅读(1518)  评论(0编辑  收藏  举报