架构

DirectPV 是按照以下方式实现的:CSI规范它包含以下组件,在 Kubernetes 中以 Pod 形式运行:

  • Controller
  • Node server

当 DirectPV 包含来自旧版本的卷时DirectCSI以下附加组件也作为 Pod 运行:

  • Legacy controller
  • Legacy node server

控制器

Diagram showing the flow of events from a Persistent Volume Claim through the CSI Provisioner or CSI Resizer to the Controller Server and finally to changes in either the DirectPVDrive CRD or the DirectPVVolume CRD

Controller 以Deployment名为 PodscontrollerDirectPV 控制器有三个副本。 这些副本会选举一个实例来处理请求。

每个 pod 包含以下容器:

  • Controller

    响应CSI请求,支持创建、删除和扩展卷。

  • CSI provisioner

    桥接卷创建和删除请求从Persistent Volume Claim到 CSI 控制器。

  • CSI resizer

    桥接卷扩展请求来自Persistent Volume Claim到 CSI 控制器。

控制器服务器

控制器服务器以名为controller在一个controller DeploymentPod.

它处理以下请求:

  • Create volume

    控制器服务器创建一个新的DirectPVVolume在合适的存储空间上反转请求的存储空间后的CRDDirectPVDriveCRD。 更多信息,请参考卷调度指南.

  • Delete volume

    控制器服务器删除现有的DirectPVVolume释放先前保留的空间后未绑定卷的CRDDirectPVDriveCRD.

  • Expand volume

    控制器服务器扩展了一个现有的DirectPVVolumeCRD 在反转请求的存储空间后处于DirectPVDriveCRD.

传统控制器

Diagram showing the flow of events from a persistent volume claim using the legacy style direct-csi-min-io storage class through the CSI provisioner or CSI REsizer to the Controller Server and finally either the DirectPVDrive CRD or the DirectPVVolume CRD

Legacy控制器作为Deployment名为 Podslegacy-controllerLegacy控制器有三个副本,分布在任意Kubernetes节点上。 这些副本会选举一个实例来处理请求。

每个 pod 包含以下容器:

  • CSI provisioner

    桥接传统卷创建和删除请求Persistent Volume Claim到 CSI 控制器。

  • Controller

    仅支持CSI的删除和扩展卷请求。 禁止创建卷请求。 传统控制器仅适用于先前创建的传统卷。DirectCSI.

  • CSI resizer

    桥接传统卷扩展请求Persistent Volume Claim到 CSI 控制器。

传统控制器服务器

Legacy控制器服务器以容器形式运行controller在一个legacy-controller DeploymentPod. 它处理以下请求:

  • Create volume

    Controller服务器返回此请求的错误。 DirectPV不会创建新的传统DirectCSI卷。

  • Delete volume

    Controller服务器删除DirectPVVolume释放先前保留空间后的未绑定卷 CRDDirectPVDriveCRD.

  • Expand volume

    控制器服务器扩展了DirectPVVolumeCRD在反转请求的存储空间之后DirectPVDriveCRD.

Node 服务器

Diagram showing the flow of events from kubelet to the Node Server, the actions taken by event type, and updating the DirectPVDrive CRD or DirectPVVolume CRD

节点服务器运行方式为DaemonSet名为 Podsnode-server在所有或选定的 Kubernetes 节点上。 每个节点服务器 Pod 都独立运行在一个节点上。

每个 pod 包含以下容器:

  • Node driver registrar

    将节点服务器注册到 kubelet 以接收 CSI RPC 调用。

  • Node server

    荣誉stage, unstage, publish, unpublishexpandvolume RPC requests.

  • Node controller

    接收 Honors CRD 事件DirectPVDrive, DirectPVVolume, DirectPVNodeDirectPVInitRequest.

  • Liveness probe

    暴露一个/healthzKubernetes 检查节点服务器存活状态的端点。

传统节点服务器

传统节点服务器运行方式为DaemonSet名为 Podslegacy-node-server在所有或选定的 Kubernetes 节点上。 每个传统节点服务器 Pod 都独立地在节点上运行。

每个 pod 包含以下运行中的容器:

  • Node driver registrar

    将传统节点服务器注册到kubelet以接收CSI RPC调用。

  • Node server

    荣誉stage, unstage, publish, unpublishexpandvolume RPC requests.

  • Liveness probe

    暴露/healthz用于Kubernetes检查传统节点服务器存活状态的端点。