4. HPE CSI Driver for Kubernetes部署
HPE CSI Driver for Kubernetes 是把 HPE Alletra 存储阵列的卷能力暴露给 Kubernetes 的关键插件。它并不是一个单独的容器,而是一组按 CSI 规范分工协作的组件集合:一部分以 DaemonSet 形式运行在每个工作节点上,负责节点侧的挂载与设备发现;另一部分以 Deployment 形式运行在控制面,负责卷的创建、删除、扩容以及与阵列的 REST API 通信。理解这套组件的职责边界,是后续排障和验证的基础。
安装前提
在真正执行 Helm 安装之前,需要先确认四类前提条件,否则安装过程可能表面成功、实际无法挂载卷。
- Kubernetes 版本与 CSI 支持:集群版本需在驱动支持矩阵范围内(例如 1.24 及以上),并确认
CSINode、VolumeAttachment等 CSI 相关 API 已启用。可用kubectl api-resources | grep csi快速确认。 - 节点侧依赖:每个工作节点需要安装 iSCSI 发起端(
iscsid、iscsiadm)或 FC 多路径工具(multipathd),具体取决于后端使用 iSCSI 还是光纤通道。以 iSCSI 为例,节点上应确保iscsid服务处于运行状态。 - 存储侧准备:在 HPE Alletra 阵列上创建好供 Kubernetes 使用的存储池或卷集,并准备一个具备卷管理权限的用户账号,用于驱动通过 REST API 创建和删除卷。
- 访问凭据:需要阵列管理地址(或管理 IP)、用户名、密码,以及后端协议类型(iSCSI/FC)。这些信息将以 Secret 形式提供给驱动。
kubectl get nodes 确认所有节点处于 Ready 状态,并检查节点上是否已存在旧版 CSI 驱动残留,避免端口或设备路径冲突。Helm 部署流程
HPE 官方通过 Helm Chart 分发 CSI 驱动,推荐使用 Helm 3 进行安装。典型流程如下:
# 1. 添加 HPE CSI Chart 仓库
helm repo add hpe-storage https://hpe-storage.github.io/helm-charts
helm repo update
# 2. 创建命名空间
kubectl create namespace hpe-storage
# 3. 准备阵列访问 Secret(示例,实际值需替换)
kubectl create secret generic hpe-alletra-secret \
--from-literal=username=admin \
--from-literal=password='ExamplePassw0rd!' \
-n hpe-storage
# 4. 安装 CSI 驱动
helm install hpe-csi hpe-storage/hpe-csi-driver \
-n hpe-storage \
--set storageClass.backend=isci \
--set storageClass.create=false
安装完成后,Helm 会输出一组资源清单。此时驱动本身已经就绪,但还没有与具体阵列建立“注册”关系。真正把驱动和阵列绑定起来的是 HPECSIBackend 自定义资源(CR)。下面是一个 iSCSI 后端的示例:
apiVersion: storage.hpe.com/v1
kind: HPECSIBackend
metadata:
name: alletra-iscsi
namespace: hpe-storage
spec:
iscsi:
discoveryIP: 10.10.20.30
chapUser: ""
chapPassword: ""
serviceName: hpe-alletra-secret
servicePort: 8080
应用该 CR 后,驱动会尝试连接阵列管理接口,验证凭据并读取阵列能力。如果凭据错误或网络不通,CR 的状态字段会给出明确错误信息,这是排查注册问题的第一入口。
驱动组件解析
安装完成后,在 hpe-storage 命名空间下可以看到几类核心工作负载,它们各自承担不同职责:
- hpe-csi-controller:以 Deployment 形式运行,通常 1~3 副本。它实现了 CSI 的 Controller 服务,处理
CreateVolume、DeleteVolume、ControllerPublishVolume等请求,并通过 REST API 与 Alletra 阵列交互。 - hpe-csi-node:以 DaemonSet 形式运行在每个工作节点上,实现 CSI 的 Node 服务,负责
NodeStageVolume、NodePublishVolume,即把远端卷挂载到 Pod 可见的路径。 - csi-provisioner / csi-attacher / csi-resizer:这些是 Kubernetes 官方 sidecar 容器,与 controller 容器同 Pod 运行,分别负责监听 PVC、VolumeAttachment 和扩容事件,并调用 CSI 接口。
- hpe-csi-driver 注册容器:负责向 kubelet 注册 CSI 驱动名称(如
csi.hpe.com),使 kubelet 能通过该名称找到对应的 Unix Domain Socket。
可以用以下命令快速查看组件状态:
kubectl get pods -n hpe-storage -o wide
kubectl get daemonset -n hpe-storage
kubectl get csidriver
其中 kubectl get csidriver 应能看到 csi.hpe.com,这是驱动已成功向集群注册的标志之一。
集群注册验证
验证分为三层:驱动注册、后端注册、端到端卷操作。
第一层:驱动注册。检查 CSIDriver 对象是否存在,以及 node 上是否出现对应的 CSI 插件目录:
kubectl get csidriver csi.hpe.com -o yaml
# 在节点上查看
ls /var/lib/kubelet/plugins/csi.hpe.com/
第二层:后端注册。查看 HPECSIBackend 的状态,确认 status 字段为 Ready 或类似成功状态:
kubectl get hpecsibackend -n hpe-storage -o yaml
第三层:端到端验证。创建一个 StorageClass 和一个 PVC,观察是否自动生成 PV,并启动一个 Pod 挂载该 PVC 写入测试数据:
kubectl get pvc -n default
kubectl get pv
kubectl exec -it test-pod -- df -h /data
如果 PVC 长时间处于 Pending,应优先查看 controller Pod 日志中的 CreateVolume 调用结果;如果 Pod 卡在 ContainerCreating,则应查看 node 侧日志中的 NodeStageVolume 或 NodePublishVolume 错误,常见原因包括 iSCSI 登录失败、多路径未启动或设备路径权限不足。
完成上述三层验证后,可以认为 HPE CSI Driver 已在集群中正确注册并具备卷供给能力。后续创建 StorageClass 时,只需引用已注册的后端名称,即可让 PVC 自动从 Alletra 阵列获取存储资源。