【K8s存储】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