安装过程参照官方部署文档
https://longhorn.io/docs/1.3.1/deploy/install/
安装要求
安装Longhorn的Kubernetes集群中的每个节点都必须满足以下要求:
- 与Kubernetes兼容的容器运行时(Docker v1.13+、containerd v1.3.7+ 等)
- Kubernetes v1.18+
- 安装open-iscsi,并且iscsid守护程序正在所有节点上运行。这是必须的,因为Longhorn依赖主机上的iscsiadm为Kubernetes提供持久卷。
- RWX support要求每个节点都安装NFSv4 client。
- 主机文件系统支持file extents功能来存储数据。目前支持:ext4,XFS
- curl, findmnt, grep, awk, blkid, lsblk 必须安装。
- 启用Mount propagation。
- Longhorn workloads必须能够以root身份运行才能正确部署和操作 Longhorn。
RKE集群需要修改kubelet配置,详情见https://longhorn.io/docs/1.3.1/advanced-resources/os-distro-specific/csi-on-rke-and-coreos/
安装过程
部署Longhorn有多种方式:
- 在rancher的应用商店中安装
- 使用kubectl
- 使用helm
- 离线
我这里采用的是在rancher上安装。
安装环境
master有3台。node有4台,master1-3,和node3禁止调度。即node1,node2,node4。
安装open-iscsi,启用iscsid守护程序
在node1,2,4上安装。
yum install iscsi-initiator-utils
systemctl enable --now iscsid
添加磁盘并挂载
在node1,2,4上新增磁盘,挂载/longhorn目录(自定义),这里是为了之后修改Longhorn的默认存储路径(/var/lib/longhorn)。如果磁盘空间足够也可以不加。
lsblk
fdisk /dev/sdb
mkfs.xfs /dev/sdb1
mkdir /longhorn
mount /dev/sdb1 /longhorn/
echo "/dev/sdb1 /longhorn xfs defaults 0 0" >> /etc/fstab
rancher上添加项目Longhorn
安装Longhorn
应用商店搜索Longhorn,使用最新的1.2.4模板
点击自定义参数,修改默认存储路径,将/var/lib/longhorn/改为/longhorn
修改当节点down时处理pod的策略,选择delete-both-statefulset-and-deployment-pod,强制删除pod释放pv,可以防止出现pod迁移卡死的情况
删除策略使用retain,Longhorn UI Service使用NodePort,psp选择否
查看部署情况
查看storageclass
访问Longhorn-ui
下面为可选
选择Node,修改默认存储路径,如果上面没有修改默认存储路径,这里也可以修改。
将默认指定的存储路径Scheduling修改为Disable并删除,点击Add Disk创建新磁盘,并将自定义的路径填写上去,保存
查看node上的/longhorn目录
创建测试pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: longhorn-volv-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
name: volume-test
spec:
restartPolicy: Always
containers:
- name: volume-test
image: nginx:stable-alpine
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- ls
- /data/lost+found
initialDelaySeconds: 5
periodSeconds: 5
volumeMounts:
- name: volv
mountPath: /data
ports:
- containerPort: 80
volumes:
- name: volv
persistentVolumeClaim:
claimName: longhorn-volv-pvc
kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/v1.3.1/examples/pod_with_pvc.yaml -n prod
kubectl get po,pvc -n prod
kubectl get pv | grep prod
pod处于ContainerCreating状态,报错目录无法挂载
这是因为后面在dashboard中修改的默认存储路径,但是engine中还是使用的/var/lib/container。修改engine-image-ei,longhorn-manager,的yaml文件,将hostPath中的/var/lib/longhorn修改为/longhorn,由于上面修改了默认存储路径,而这里的longhorn-engine挂载的还是原来的路径,导致Longhorn找不到longhorn-engine的二进制文件,也就无法进行挂载。如果在最初安装时就修改了默认存储路径,就不会有这个报错信息。
pod重新生成后,目录正常挂载,pod也恢复正常
查看node的Longhorn目录
注意
如果后面部署yaml时应该还有这个报错出现,可以把/longhorn中的longhorn二进制文件拷贝到/var/lib/longhorn对应的目录中。
这个instance-manager-e/instance-manager-r,这些pod的yaml不能直接修改,这些pod中的engine二进制文件还是使用的/var/lib/longhorn,导致目录无法挂载。
或者rancher中升级Longhorn,修改默认存储路径重新部署,最好还是安装时就选择,省下后面一堆事。
如果使用了替代路径,软链接是不管用的。https://longhorn.io/docs/1.3.1/volumes-and-nodes/multidisk/#add-a-disk
kubectl安装
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.3.1/deploy/longhorn.yaml
kubectl get pods -n longhorn-system --watch
kubectl -n longhorn-system get pod
helm安装
helm repo add longhorn https://charts.longhorn.io
helm repo update
helm install longhorn/longhorn –name longhorn –namespace longhorn-system(helm2)
helm install longhorn longhorn/longhorn –namespace longhorn-system –create-namespace(helm3)
helm -n longhorn-system ls
kubectl -n longhorn-system get pod
离线部署
在具有网络环境的机器上下载 iscsi 及依赖程序包
repotrack iscsi-initiator-utils
压缩为tar包
tar zcvf iscsi-rpms.tar.gz iscsi/
拷贝至Longhorn所有工作节点主机上并解压
tar -zxvf iscsi-rpms.tar.gz
安装程序
rpm -ivh iscsi/*.rpm --nodeps --force
然后在rancher中安装即可。