3.7 KiB
3.7 KiB
03-08-k3s Longhorn 持久化存储(单节点自用生产)
适用:没有 NFS、希望在 K3s 中部署 GitLab 等“重状态”系统,并且能接受“单节点不做高可用、但要可重建/可备份”。
为什么要用 Longhorn(而不是 hostPath / local-path / 容器文件系统)
- 容器文件系统:Pod 重建即丢,基本不可用
- hostPath 固定目录:能落盘,但和调度强绑定,迁移/扩缩容/备份都更麻烦
- local-path PVC(
03-07):K3s 自带,单副本够用;无快照/备份,多副本需 NFS 或 Longhorn - Longhorn(CSI 块存储):对 K8s 来说是标准 PVC;即使你只设 副本数=1,也能获得:
- 统一的 PVC 管理与回收策略
- 快照(snapshot)
- 备份(backup target,可推到对象存储)
重要:单节点 + 副本=1 不是高可用。想要节点级容灾,需要多节点副本或备份到外部介质。
前置条件(CentOS)
在所有计划作为 Longhorn 存储节点的机器上安装依赖(单节点就只装这一台):
sudo yum install -y iscsi-initiator-utils nfs-utils
sudo systemctl enable --now iscsid
准备数据盘目录(你已有专用盘挂载到 /storage,建议给 Longhorn 单独目录):
sudo mkdir -p /storage/longhorn
sudo chmod 700 /storage/longhorn
安装 Longhorn
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.7.2/deploy/longhorn.yaml
kubectl -n longhorn-system rollout status deploy/longhorn-ui
将 Longhorn 默认数据路径改到 /storage/longhorn:
kubectl -n longhorn-system patch settings.longhorn.io default-data-path \
--type=merge -p '{"value":"/storage/longhorn"}'
将 longhorn 设为默认 StorageClass(推荐):
kubectl get storageclass
kubectl patch storageclass longhorn -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
单节点“非 HA”建议配置
副本数
- 建议将 Longhorn 的 默认副本数设为 1(节省空间,也符合“非 HA”定位)
- 需要迁移卷/临时容灾时,可手动把某个卷副本数调到 2,待同步完成再调回 1
只让“有大盘”的节点承载数据
如果你是多节点集群但只有少数节点有 /storage 大盘:
- 只把这些节点加入 Longhorn 可调度存储(Longhorn UI 中将其它节点的 disk 设为不可调度)
- 或者给存储节点打标签,配合工作负载的 nodeSelector/affinity(让应用尽量靠近数据)
注意:副本=1 时,卷不会“随使用自动从小盘迁到大盘”,需要你手动迁移或从源头限制调度。
GitLab 这类重状态系统如何落地
原则:所有关键组件都用 PVC(Longhorn)。
- 必须 PVC:PostgreSQL、Redis、Gitaly(repo)、uploads/artifacts/packages、registry(如启用)
- 备份:
- 应用层(GitLab 自带 backup)+ 存储层(Longhorn snapshot/backup)双保险
Traefik acme.json 如何持久化/备份(可选)
Traefik 的 ACME 状态很小,但也建议持久化以避免重建后触发频繁签发。
- 推荐:给 Traefik 的
/data使用 PVC(Longhorn),让acme.json走标准持久化 - 兜底:定期导出
acme.json备份(例如kubectl cp pod/<traefik-pod>:/data/acme.json ...)
验证
kubectl -n longhorn-system get pod
kubectl get pvc -A
kubectl get pv
下一步
03-05-k3s-local-path-pvc.md:单副本、无快照需求时,用 K3s 自带 local-path 即可- 返回
03-09-k3s-gitops-集群配置管理.md或进入业务部署(如 GitLab)章节