Longhorn安装
# 磁盘准备
- 为每个 K8s 节点虚拟机创建 ZFS 卷
zfs create -V 100G /data/k8s-node1-disk zfs create -V 100G /data/k8s-node2-disk
1
2 - 将 ZFS 卷附加到虚拟机
qm set 101 -scsi1 /dev/zvol/data/k8s-node1-disk qm set 102 -scsi1 /dev/zvol/data/k8s-node2-disk
1
2 - 在 K8s 节点中格式化并挂载
mkfs.ext4 /dev/sdb mkdir /data/longhorn echo "/dev/sdb /data/longhorn ext4 defaults 0 0" >> /etc/fstab systemctl daemon-reload mount -a
1
2
3
4
5
# 部署 Longhorn
- 给存储节点打标签
kubectl label nodes k8s-master-01 node.longhorn.io/create-default-disk=true kubectl label nodes k8s-master-02 node.longhorn.io/create-default-disk=true kubectl label nodes k8s-node-01 node.longhorn.io/create-default-disk=true kubectl label nodes k8s-node-02 node.longhorn.io/create-default-disk=true
1
2
3
4 - 配置修改
defaultSettings: createDefaultDiskLabeledNodes: true # 启用标签控制 defaultDataPath: "/data/longhorn" # 新数据路径 defaultReplicaCount: 2 # 默认副本数 deletionConfirmationFlag: false # 恢复卸载保护 persistence: defaultClass: true defaultFsType: ext4 # 添加节点选择器(可选) nodeSelector: storage-node: "true"
1
2
3
4
5
6
7
8
9
10
11
12
13 - 使用helm安装
helm repo add longhorn https://charts.longhorn.io helm repo update helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace --version 1.9.0 -f longhorn.yaml
1
2
3 - ingress配置
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: longhorn-ingress namespace: longhorn-system annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" kubernetes.io/ingress.class: "nginx" spec: ingressClassName: nginx tls: - hosts: - www.ijavaweb.com # 根据选择的方法使用以下之一: secretName: ijavaweb-tls # 方法1:同名Secret # secretName: default/ijavaweb-tls # 方法2:跨命名空间引用 rules: - host: www.ijavaweb.com http: paths: - path: / pathType: Prefix backend: service: name: longhorn-frontend port: number: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28