本文最近更新于 2021.9.13

longhorn 简介

Longhorn 是用于Kubernetes的轻量级,可靠且功能强大的分布式块存储系统。Longhorn 是免费的开源软件,它最初是由 Rancher Labs 开发。

参考:https://www.rancher.cn/longhorn

(12条消息) kubernetes部署分布式存储longhorn_willblog-CSDN博客 - 图1

longhorn 架构

Longhorn 使用容器和微服务实现分布式块存储。Longhorn 为每个块设备卷创建一个专用的存储控制器,并在跨多个节点上存储的多个副本同步复制该卷。存储控制器和副本本身使用 Kubernetes 进行编排。
(12条消息) kubernetes部署分布式存储longhorn_willblog-CSDN博客 - 图2

hem 部署 longhorn

参考:
https://artifacthub.io/packages/helm/longhorn/longhorn
https://longhorn.io/docs/1.2.0/deploy/install/install-with-helm/
https://github.com/longhorn/longhorn/blob/master/chart/values.yaml

默认情况下,Longhorn 安装需要三个节点的 kubernetes 群集,因为默认副本数为 3,准备 3 个 node 节点

  1. [root@master01 ~]
  2. Client Version: v1.18.6
  3. Server Version: v1.18.6
  4. [root@master01 ~]
  5. NAME STATUS ROLES AGE VERSION
  6. master01 Ready master 35d v1.18.6
  7. node01 Ready <none> 35d v1.18.6
  8. node02 Ready <none> 35d v1.18.6
  9. node03 Ready <none> 5h27m v1.18.6

所有节点必须安装 open-iscsi,并且在所有节点上启用 iscsid 守护程序。

yum install -y iscsi-initiator-utils
systemctl enable --now iscsid

添加 Longhorn Helm 存储库:

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

helm 部署 longhorn,部分镜像被封锁,需要自行处理:

helm install longhorn \
  --namespace longhorn-system \
  --create-namespace \
  --version 1.2.0 \
  --set image.csi.attacher.repository=willdockerhub/csi-attacher \
  --set image.csi.provisioner.repository=willdockerhub/csi-provisioner \
  --set image.csi.nodeDriverRegistrar.repository=willdockerhub/csi-node-driver-registrar \
  --set image.csi.resizer.repository=willdockerhub/csi-resizer \
  --set image.csi.snapshotter.repository=willdockerhub/csi-snapshotter \
  --set defaultSettings.defaultDataPath="/var/lib/longhorn/" \
  --set defaultSettings.defaultReplicaCount=3 \
  --set service.ui.type=NodePort \
  --set service.ui.nodePort=30890 \
  longhorn/longhorn

查看创建的 chart

helm -n longhorn-system ls

查看 pod 状态

[root@master01 ~]
NAME                                        READY   STATUS    RESTARTS   AGE
csi-attacher-5b4745c5f7-6bx8w               1/1     Running   1          17h
csi-attacher-5b4745c5f7-bfxch               1/1     Running   3          17h
csi-attacher-5b4745c5f7-cw6n8               1/1     Running   1          17h
csi-provisioner-57d6dbf5f4-5jfsx            1/1     Running   2          17h
csi-provisioner-57d6dbf5f4-rnbt5            1/1     Running   1          17h
csi-provisioner-57d6dbf5f4-rwf7q            1/1     Running   3          17h
csi-resizer-75ff56bc48-6txnn                1/1     Running   1          17h
csi-resizer-75ff56bc48-8x8kf                1/1     Running   2          17h
csi-resizer-75ff56bc48-c6js9                1/1     Running   2          17h
engine-image-ei-ee18f965-9pbmt              1/1     Running   1          17h
engine-image-ei-ee18f965-bpv98              1/1     Running   0          39m
engine-image-ei-ee18f965-h7bcm              1/1     Running   0          17h
engine-image-ei-ee18f965-t8rj4              1/1     Running   1          17h
instance-manager-e-16ac5b81                 1/1     Running   0          149m
instance-manager-e-b73e46cf                 1/1     Running   0          17h
instance-manager-e-c8b085fb                 1/1     Running   0          29m
instance-manager-e-fb21fac1                 1/1     Running   0          149m
instance-manager-r-35cf77e3                 1/1     Running   0          17h
instance-manager-r-70f4cb39                 1/1     Running   0          149m
instance-manager-r-714f9f88                 1/1     Running   0          29m
instance-manager-r-ee454094                 1/1     Running   0          149m
longhorn-csi-plugin-9zgxv                   2/2     Running   4          17h
longhorn-csi-plugin-fkj9z                   2/2     Running   0          17h
longhorn-csi-plugin-w8rmg                   2/2     Running   0          39m
longhorn-csi-plugin-xq6vt                   2/2     Running   2          17h
longhorn-driver-deployer-8558cf45fb-qdfb4   1/1     Running   1          17h
longhorn-manager-kpv8r                      1/1     Running   4          17h
longhorn-manager-vcnkm                      1/1     Running   0          29m
longhorn-manager-vvxxv                      1/1     Running   1          17h
longhorn-manager-xx9xh                      1/1     Running   2          17h
longhorn-ui-65d76ddf9b-xn7r2                1/1     Running   1          17h

默认 longhorn 部署完成已创建一个名为 longhorn 的 storageclass,可以直接使用。


NAME       PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
longhorn   driver.longhorn.io   Delete          Immediate           true                   28s

创建示例 pod,验证 pvc 及 pv 部署

kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/master/examples/pod_with_pvc.yaml

查看创建的 pv 及 pvc

[root@master01 ~]
NAME          READY   STATUS    RESTARTS   AGE
volume-test   1/1     Running   0          5m14s

[root@master01 ~]
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                       STORAGECLASS   REASON   AGE
pvc-19708d1d-7cef-4800-9a78-b58dabcebe15   2Gi        RWO            Delete           Bound    default/longhorn-volv-pvc   longhorn                5m14s

[root@master01 ~]
NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
longhorn-volv-pvc   Bound    pvc-19708d1d-7cef-4800-9a78-b58dabcebe15   2Gi        RWO            longhorn       5m19s

在 pod 所在节点查看创建的块设备

[root@node02 ~]
sdc               8:32   0    2G  0 disk /var/lib/kubelet/pods/cefcd0f5-cab6-4eaa-a58d-17e3c8fbe989/volumes/kubernetes.io~csi/pvc-19708d1d-7cef-4800-9a78-b58dabcebe15/mount

查看数据存储目录,每个节点都会保存一份 pvc 数据的副本

[root@node02 ~]
pvc-19708d1d-7cef-4800-9a78-b58dabcebe15-d2569ce8

访问 Longhorn UI

[root@master01 ~]
NAME                TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
longhorn-frontend   NodePort   10.100.119.54   <none>        80:31681/TCP   16h

浏览器访问:http://192.168.93.60:31681

(12条消息) kubernetes部署分布式存储longhorn_willblog-CSDN博客 - 图3

删除 longhorn

helm -n longhorn-system uninstall longhorn
kubectl delete ns longhorn-system

longhorn 多磁盘支持

Longhorn 支持在节点上使用多个磁盘来存储卷数据。默认情况下,主机上 / var/lib/longhorn 将用于存储卷数据。您可以通过添加新磁盘来避免使用默认目录,然后对 / var/lib/longhorn 禁用调度。

要为节点添加新磁盘,请转到 longhornUI Node 选项卡,选择一个节点,然后在下拉菜单中选择 Edit Disks。

要添加任何其他磁盘,用户需要:

  • 将主机上的磁盘安装到某个目录。
  • 将已安装磁盘的路径添加到节点的磁盘列表中。

Longhorn 将自动检测有关磁盘的存储信息(例如最大空间,可用空间),并在可能的情况下开始计划磁盘上的卷。不允许使用现有磁盘安装的路径。

参考:https://longhorn.io/docs/1.0.2/volumes-and-nodes/multidisk/

示例:为节点添加新磁盘,并创建为 lvm 卷,格式化卷并挂载到某个目录,例如 / opt/longhorn

pvcreate /dev/sdf
vgcreate vg-longhorn-stor /dev/sdf
lvcreate -n lv-longhorn-stor -l 100%VG vg-longhorn-stor
mkfs.xfs /dev/vg-longhorn-stor/lv-longhorn-stor

cat >> /etc/fstab <<EOF
/dev/vg-longhorn-stor/lv-longhorn-stor /opt/longhorn/    xfs     defaults    0 0
EOF
mount -a

访问 longhornUI,选择 Node—>Operation—>Edit node and disks

(12条消息) kubernetes部署分布式存储longhorn_willblog-CSDN博客 - 图4

选择 Add Disk,填写挂载目录到 Path 下
(12条消息) kubernetes部署分布式存储longhorn_willblog-CSDN博客 - 图5

保存后节点可调度的存储空间自动扩容
(12条消息) kubernetes部署分布式存储longhorn_willblog-CSDN博客 - 图6

删除磁盘

删除磁盘:

  1. 禁用磁盘调度。
  2. 删除磁盘上的所有副本。建议一步一步地进行操作,因为此步骤将触发副本在其他节点的重建。
  3. 删除磁盘。

选择 Node—>Replicas,点击某个 node 的 replicas 数字,勾选 replicas 选择 Delete 删除即可。
(12条消息) kubernetes部署分布式存储longhorn_willblog-CSDN博客 - 图7

删除节点

删除节点:

  1. 禁用磁盘调度。

  2. 删除节点上的所有副本。 建议一步一步地删除副本,因为此步骤将触发副本的重建。

  3. 分离节点上的所有卷。
    如果该节点已耗尽,则所有工作负载都应已迁移到另一个节点。
    如果还有其他卷仍要连接,请先分离它们,然后再继续。

  4. 使用以下方法从 Kubernetes 中删除该节点:```
    kubectl delete node

  1. 删除 Longhorn 中的节点。
    https://blog.csdn.net/networken/article/details/108234051