跳转到主要内容

Longhorn 部署笔记

Longhorn 是一个轻量级、可靠且易于使用的 Kubernetes 分布式块存储系统。

使用 Longhorn,您可以:

  • 使用 Longhorn 卷作为 Kubernetes 集群中分布式有状态应用程序的持久存储;
  • 将您的块存储分区为 Longhorn 卷,以便您可以在有或没有云提供商的情况下使用 Kubernetes 卷;
  • 跨多个节点和数据中心复制块存储以提高可用性;
  • 将备份数据存储在 NFS 或 AWS S3 等外部存储中;
  • 创建跨集群灾难恢复卷,以便可以从第二个 Kubernetes 集群中的备份快速恢复主 Kubernetes 集群中的数据;
  • 安排卷的定期快照,并安排定期备份到 NFS 或 S3 兼容的辅助存储;
  • 从备份恢复卷;
  • 在不中断持久卷的情况下升级 Longhorn;

以上内容机器翻译自官方文档



本文版本 v1.3.2


对于我来说,Longhorn 能够将数据分布存储至多个节点,满足了高可用需求,同时也满足了同步需求。
然后由 Longhorn 提供储存类给容器使用。

而且默认情况下主机目录即可工作,不需要单独的块设备。
默认储存位置 /var/lib/longhorn/,也可以添加多个目录。


安装要求

安装 Longhorn 的 Kubernetes 集群中的每个节点都必须满足以下要求:

  • 与 Kubernetes 兼容的容器运行时(Docker v1.13+、containerd v1.3.7+ 等);
  • Kubernetes >= v1.18 且 <= v1.24;
  • 所有工作节点安装并运行 iscsi-initiator-utils 或 open-iscsi;
  • 主机文件系统支持file extents存储数据功能。目前支持:
    • EXT4
    • XFS
  • bash, curl, findmnt, grep, awk, blkid, lsblk 必须安装;
  • 必须启用 mount propagation


安装 iSCSI initiator utils

RHEL/CentOS 系列

在所有工作节点执行:

sudo yum install iscsi-initiator-utils
sudo systemctl enable --now iscsid
modprobe iscsi_tcp
echo iscsi_tcp >/etc/modules-load.d/iscsi-tcp.conf


通过 Helm 安装

添加源:

helm repo add longhorn https://charts.longhorn.io
helm repo update

如果你访问 github 困难,可以试试  https://github.com/ineo6/hosts

使用默认值安装:

helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace --version 1.3.2

和 OpenEBS 不同,不太需要更改默认值,也没有什么坑,设置后续在 UI 里面更改即可。

验证 Longhorn 安装

验证 pod

使用 kubectl get pods -n longhorn-system -o wide 你应该能看到有以下几种 pod 正在全数正常运行。  

csi-attacher
csi-provisioner
csi-resizer
csi-snapshotter
engine-image-ei
instance-manager-e
longhorn-admission-webhook
longhorn-conversion-webhook
longhorn-csi-plugin
longhorn-driver-deployer
longhorn-manager
longhorn-ui

验证储存类

使用 kubectl get sc 你应该能看到一下几种 StorageClasses

NAME                 PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
longhorn (default)   driver.longhorn.io   Delete          Immediate           true                   12m



访问 UI

我们还需要访问 UI 进行进一步设置。
注意 Longhorn  Web UI 并没有用户验证,你需要其他前置验证,或者随用随关。

kubectl 端口转发

临时访问用端口转发就足够了,随用随开,关闭就断。

kubectl port-forward service/longhorn-frontend -n longhorn-system :80 --address 0.0.0.0

这会将 longhorn-frontend 这个 service 的 80 端口转发到本机的随机高位端口上,并监听 0.0.0.0 以便于其他机器访问。
如果你是本机访问,可以去掉 --address 0.0.0.0 ,默认会监听 127.0.0.1 和 ::1。

使用 Nginx Ingress 

请参阅:https://longhorn.io/docs/1.3.2/deploy/accessing-the-ui/longhorn-ingress/




UI 内管理都很直观,就不继续写了,遇到什么问题再补充。



 

遇到的坑

如果你使用 tailscale 等非组网软件或是跨机房进行通讯。

Longhorn 设计时没有考虑到网络不稳定因素。

于是你在重建卷时有可能永远也不会成功,你需要在设置将同时重建数量限制为 1,避免同时重建过个卷对网络造成太大压力而中断。

 

 

 

 


主要参考