——> 课程视频同步分享在今日头条和B站

大家好,我是博哥爱运维。

什么是Longhorn

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

Longhorn 是免费的开源软件。它最初由 Rancher Labs 开发,现在作为云原生计算基金会的孵化项目进行开发。

官方文档: https://longhorn.io/docs/1.5.3/

使用 Longhorn,您可以:

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

Longhorn 带有独立的 UI,可以使用 Helm、kubectl 或 Rancher 应用程序目录进行安装。

Longhorn的底层存储协议

iSCSI(Internet Small Computer Systems Interface)是一种网络协议,用于在 TCP/IP 网络上传输 SCSI 命令,允许两台计算机进行远程存储和检索操作。iSCSI 是一种流行的存储区域网络(SAN)技术,广泛用于连接存储设备,如磁盘阵列和磁带库,与服务器和数据中心。

在K8S上部署Longhorn
# 在集群所有节点上添加两块硬盘并挂载目录mkfs.ext4 /dev/sdbmkfs.ext4 /dev/sdc# cat /etc/fstab/dev/sdb /mnt/longhorn-sdb ext4 defaults 0 1/dev/sdc /mnt/longhorn-sdc ext4 defaults 0 1#mount -adf -Th|grep -E 'longhorn-sdb|longhorn-sdc'# 配置节点信息metadata:labels:node.longhorn.io/create-default-disk: "config"annotations:node.longhorn.io/default-disks-config: '[{"path":"/mnt/longhorn-sdb","allowScheduling":true},{"path":"/mnt/longhorn-sdc","allowScheduling":true}]'# 利用helm安装longhorn服务wget https://github.com/longhorn/longhorn/archive/refs/tags/v1.5.3.zipunzip longhorn-1.5.3.ziprm longhorn-1.5.3.zipcd longhorn-1.5.3/helm install longhorn ./chart/ --namespace longhorn-system --create-namespace --set defaultSettings.createDefaultDiskLabeledNodes=true --dry-run --debughelm install longhorn ./chart/ --namespace longhorn-system --create-namespace --set defaultSettings.createDefaultDiskLabeledNodes=truekubectl -n longhorn-system get pod -o wide -w# 测试挂载存储# kubectl get scNAMEPROVISIONERRECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGElonghorn (default)driver.longhorn.io DeleteImmediate true 64m# cat test.yamlkind: PersistentVolumeClaimapiVersion: v1metadata:name: test-claimspec:storageClassName: longhornaccessModes:- ReadWriteManyresources:requests:storage: 1Mi # 实测最小存储分配为10Mi---kind: PodapiVersion: v1metadata:name: testspec:containers:- name: test#image: busybox:1.28.4image: registry.cn-shanghai.aliyuncs.com/acs/busybox:v1.29.2imagePullPolicy: IfNotPresentcommand:- "/bin/sh"args:- "-c"- "echo 'hello k8s' > /mnt/SUCCESS && sleep 36000 || exit 1"volumeMounts:- name: longhorn-pvcmountPath: "/mnt"restartPolicy: "Never"volumes:- name: longhorn-pvcpersistentVolumeClaim:claimName: test-claim# 写入严格限制大小# kubectl exec -it test -- sh/ # cd /mnt//mnt # ls -lhtotal 13-rw-r--r--1 root root10 Dec8 04:11 SUCCESSdrwx------2 root root 12.0K Dec8 04:11 lost+found/mnt # dd if=/dev/zero of=./test.log bs=1M count=11dd: ./test.log: No space left on device# 把ui的svc改成NodePort,查看页面,生产的话可以弄个ingress# kubectl -n longhorn-system get svc longhorn-frontendNAMETYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGElonghorn-frontend NodePort 10.68.135.61 <none>80:31408/TCP 68m
Longhorn监控

https://longhorn.io/docs/1.5.3/monitoring/

Longhorn备份还原

https://longhorn.io/docs/1.5.3/snapshots-and-backups/