第19关 5.2k star 开源分布式存储服务Rancher-Longhorn在k8s上部署

news/2024/7/10 18:52:10 标签: 开源, 分布式, rancher, kubernetes, 容器, 云原生, k8s

------> 课程视频同步分享在今日头条和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/sdb
mkfs.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 -a
df -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.zip
unzip longhorn-1.5.3.zip
rm longhorn-1.5.3.zip
cd longhorn-1.5.3/
helm install longhorn ./chart/ --namespace longhorn-system --create-namespace --set defaultSettings.createDefaultDiskLabeledNodes=true --dry-run --debug
helm install longhorn ./chart/ --namespace longhorn-system --create-namespace --set defaultSettings.createDefaultDiskLabeledNodes=true
kubectl -n longhorn-system get pod -o wide -w


# 测试挂载存储
# kubectl get sc
NAME                          PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
longhorn (default)            driver.longhorn.io   Delete          Immediate           true                   64m


# cat test.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
spec:
  storageClassName: longhorn
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi   # 实测最小存储分配为10Mi

---
kind: Pod
apiVersion: v1
metadata:
  name: test
spec:
  containers:
  - name: test
#    image: busybox:1.28.4
    image: registry.cn-shanghai.aliyuncs.com/acs/busybox:v1.29.2
    imagePullPolicy: IfNotPresent
    command:
      - "/bin/sh"
    args:
      - "-c"
      - "echo 'hello k8s' > /mnt/SUCCESS && sleep 36000 || exit 1"
    volumeMounts:
      - name: longhorn-pvc
        mountPath: "/mnt"
  restartPolicy: "Never"
  volumes:
    - name: longhorn-pvc
      persistentVolumeClaim:
        claimName: test-claim


# 写入严格限制大小
# kubectl exec -it test -- sh
/ # cd /mnt/
/mnt # ls -lh
total 13
-rw-r--r--    1 root     root          10 Dec  8 04:11 SUCCESS
drwx------    2 root     root       12.0K Dec  8 04:11 lost+found
/mnt # dd if=/dev/zero of=./test.log bs=1M count=11
dd: ./test.log: No space left on device



# 把ui的svc改成NodePort,查看页面,生产的话可以弄个ingress
# kubectl -n longhorn-system get svc longhorn-frontend
NAME                TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
longhorn-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/


http://www.niftyadmin.cn/n/5250718.html

相关文章

力扣面试150题 | 26.删除有序数组的重复项

力扣面试150题 &#xff5c; 26.删除有序数组的重复项 题目描述解题思路代码实现 题目描述 25.删除有序数组的重复项 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。…

数据分析实例:基于电力大数据的中小型企业运营发展分析

前不久&#xff0c;帆软发起了【2023BI数据分析大赛】的活动&#xff0c;老李我也是这个大赛的评委。   今天跟大家分享的是基于电力大数据的中小型企业运营发展分析。 当我们去解读一份数据分析报告时&#xff0c;首先要了解这份报告的主要目的是什么&#xff0c;作者通过分…

leetcode:643. 子数组最大平均数 I(滑动窗口)

一、题目 链接&#xff1a;643. 子数组最大平均数 I - 力扣&#xff08;LeetCode&#xff09; 函数原型&#xff1a; double findMaxAverage(int* nums, int numsSize, int k) 二、思路 滑动窗口&#xff1a; 先计算数组前k个元素总和&#xff0c;作为第一个窗口&#xff0c;默…

BUU UPLOAD COURSE 1

传一个cmd.php木马文件 访问一下这个图片地址 发现什么都没有&#xff0c;在hackbar里面连接一下我们的木马 然后看到了一些目录 然后直接查看flag就出来了 这里也可以用蚁剑去连接 直接访问地址&#xff0c;拿着地址去连接就行了。

【C】⽂件操作

1. 为什么使⽤⽂件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化…

Shell数组函数:数组——数组和循环(四)

使用数组统计&#xff0c;用户shell的类型和数量 一、脚本编辑 [root192 ~]# vim shell.sh #!/bin/bash declare -A shells while read ii dotypeecho $ii | awk -F: {print $7}let shells[$type] done < /etc/passwdfor i in ${!shells[]} doecho "$i: ${shells[$i]…

Java中的IO流①——IO流的体系、字节流、try...catch异常处理

概述 IO流的分类 IO流的体系 这四个类都是抽象类&#xff0c;所以需要实现类对象才能使用---> 字节流 FileInputStream--> 书写细节 代码示范 此时文件a.txt内容为abcde 使用char强转和read方法调用五次read方法--> public static void main(String[] args) throws IO…

换根DP模板

给你一个无根树&#xff0c;问你以哪个节点为根节点的时候得到所有点的深度之和最大 《贴一张 知乎大佬的一个解释》 #include<bits/stdc.h> using namespace std; const int N 2e610; using ll long long; ll dep[N],sz[N]; ll ans[N]; vector<int>g[N]; int n;…