------> 課程視頻同步分享在今日頭條和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: longhornaccessModes:- ReadWriteManyresources:requests:storage: 1Mi # 實測最小存儲分配為10Mi---
kind: Pod
apiVersion: v1
metadata:name: test
spec: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 -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/