longhorn是统信uos上部署kubernetes集群后适配性高、开箱即用的云原生分布式块存储方案;需验证ext4文件系统、启用loop模块与open-iscsi、通过helm或离线yaml部署,并配置专属storageclass及默认pvc绑定。

如果您在统信UOS操作系统上部署Kubernetes集群后,需为其添加云原生分布式块存储能力,则Longhorn是适配性高、开箱即用的首选方案。统信UOS基于Linux内核,兼容x86_64与ARM64架构,但需特别注意其默认文件系统(ext4)、SELinux策略及内核模块加载限制。以下是针对统信UOS环境部署Longhorn的实操路径:
一、验证统信UOS系统兼容性与前置准备
Longhorn要求节点支持XFS或ext4文件系统,并启用open-iscsi、nfs-common等基础存储依赖;统信UOS桌面版默认未启用iscsi服务,且部分版本内核未预编译loop设备模块,需手动确认并补全。该步骤旨在确保底层I/O栈满足Longhorn Engine运行条件。
1、检查当前文件系统类型:df -T / | awk 'NR==2 {print $2}'
2、确认loop设备可用:lsmod | grep loop || sudo modprobe loop
3、安装必要工具包:sudo apt update && sudo apt install -y open-iscsi nfs-common xfsprogs
4、启用并启动iscsid服务:sudo systemctl enable iscsid && sudo systemctl start iscsid
5、验证内核参数是否允许挂载:执行sudo sysctl -w vm.swappiness=1并写入/etc/sysctl.conf以持久化。
二、通过Helm在统信UOS K8s集群中部署Longhorn
Helm方式具备配置灵活性与版本可控性,适用于统信UOS服务器版(专业版/企业版)已部署kubectl与helm v3.8+的场景。该方法绕过YAML手工编辑,自动处理CRD注册与RBAC策略绑定,降低权限配置出错风险。
1、添加Longhorn官方chart仓库:helm repo add longhorn https://charts.longhorn.io
2、更新本地仓库索引:helm repo update
3、创建专用命名空间:kubectl create namespace longhorn-system
4、生成适配统信UOS的values定制文件:helm show values longhorn/longhorn > longhorn-values-uno.yaml
5、编辑longhorn-values-uno.yaml,将defaultClassReplicaCount设为2(因统信UOS测试集群常为双节点),并设置nodeSelector匹配UOS节点标签:kubernetes.io/os: linux与kubernetes.io/arch: amd64或arm64
6、执行安装:helm install longhorn longhorn/longhorn --namespace longhorn-system -f longhorn-values-uno.yaml
三、使用kubectl直接部署适配UOS的Longhorn离线包
当统信UOS生产环境处于离线或受限网络时,需预先下载与K8s版本匹配的Longhorn release YAML,并替换镜像为国内镜像源。该方法不依赖Helm,适合严格遵循统信UOS安全加固规范的政企场景。
1、从GitHub Release页面下载对应K8s版本的longhorn.yaml(如v1.5.5适配K8s 1.26+):wget https://github.com/longhorn/longhorn/releases/download/v1.5.5/longhorn.yaml
2、替换全部镜像地址为阿里云镜像:sed -i 's#longhornio/#registry.cn-hangzhou.aliyuncs.com/longhorn-io/#g' longhorn.yaml
3、为UOS节点打标以便调度:kubectl label node $(hostname) node.longhorn.io/create-default-disk=true
4、在longhorn.yaml中定位longhorn-manager DaemonSet,为其securityContext增加privileged: true字段(UOS内核模块加载需特权)
5、应用配置:kubectl apply -f longhorn.yaml
6、等待Pod就绪:kubectl get pods -n longhorn-system --watch,直至所有Pod状态为Running且READY为1/1
四、配置统信UOS专属StorageClass并启用默认PVC绑定
统信UOS环境下需显式定义StorageClass以规避K8s默认storageclass缺失导致PVC Pending问题;同时应禁用Longhorn UI的Ingress暴露(UOS安全策略通常禁止NodePort/Ingress外露),改用端口转发访问。
1、创建longhorn-sc-uno.yaml,指定reclaimPolicy为Delete,volumeBindingMode为Immediate:
2、在spec中设置parameters:numberOfReplicas: "2"、staleReplicaTimeout: "28800"(适配UOS长时间休眠节点)
3、应用StorageClass:kubectl apply -f longhorn-sc-uno.yaml
4、标记为默认StorageClass:kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
5、验证默认行为:kubectl get storageclass,确认longhorn条目标注为(default)










