在k8s中部署alist网盘程序
前言
之前一直用的docker部署,现在所有的环境都迁移到了k8s,所以一些常用的工具、web应用也要迁移过来。其中我最常用的:alist当然也要扔到k8s啦,官方并没有k8s相关的部署文档,在此记录一下过程。
部署过程
官方提供的有docker-compose文件:
version: '3.3'
services:
alist:
image: 'xhofe/alist:latest'
container_name: alist
volumes:
- '/etc/alist:/opt/alist/data'
ports:
- '5244:5244'
environment:
- PUID=0
- PGID=0
- UMASK=022
restart: unless-stopped
我直接将其丢给chatgpt,让他根据以上给出对应的k8s的deployment配置文件,这种简单的小需求的项目,deployment配置文件就够用了,然后自己再根据需求是否配置持久化存储、ingress控制器等等。我是习惯将每个不同类型的配置文件分别放在某一个文件夹里,比如deployment就全部放在deployment目录里。
alist-pv.yaml文件
apiVersion: v1
kind: PersistentVolume
metadata:
name: alist-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /etc/alist
alist-pvc.yaml文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: alist-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
alist-deployment.yaml文件
# alist-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: alist-deployment
spec:
replicas: 1
selector:
matchLabels:
app: alist
template:
metadata:
labels:
app: alist
spec:
containers:
- name: alist
image: xhofe/alist:latest
ports:
- containerPort: 5244
volumeMounts:
- name: alist-data
mountPath: /opt/alist/data
volumes:
- name: alist-data
persistentVolumeClaim:
claimName: alist-pvc
alist-service.yaml 文件
apiVersion: v1
kind: Service
metadata:
name: alist-service
spec:
selector:
app: alist
ports:
- protocol: TCP
port: 5244
targetPort: 5244
type: ClusterIP
alist-ingress.yaml文件
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alist-ingress
spec:
rules:
- host: soft.at9.net
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: alist-service
port:
number: 5244
执行
kubectl apply -f alist-pv.yaml
kubectl apply -f alist-pvc.yaml
kubectl apply -f alist-deployment.yaml
kubectl apply -f alist-service.yaml
kubectl apply -f alist-ingress.yaml
验证
通过查看pod方式验证:
kubectl get pods
通过curl请求验证
查看alist的service集群IP
kubectl get services
拿到ip,以我为例,10.43.226.79,同时都是设置5244的端口没做修改,就可以服务器上curl测试是否出html源代码,出的话表示内网访问是没问题的
curl 10.43.226.79:5244
外部访问域名测试
以上没问题这一步就是验证ingress的配置了,可以在自己浏览器上访问自己配置的域名,也可以curl
查看密码
alist 初始化容器会随机密码,查看容器的日志可以查看密码,查看日志的方式和docker一致:
kubectl logs -f 容器名称
总结与问题
用了一段时间,没什么大问题,因为我的需求主要就是下载和在线查看,问题其实都不大,一个是容器初始化相关,一个是控制器相关,以后慢慢琢磨吧。
问题1
这次迁移我是自己手动登录后台做的恢复,将之前备份好的文件保存好上传执行。alist本身的config备份文件,其实是可以在k8s初始容器时候就导入进来的,这块可以再仔细研究下他的恢复命令将config文件直接挂到容器里,在容器刚启动时就自动执行恢复。
问题2
实测上传遇见限制大小的问题,这块之前在docker的时候反代是可以解决掉的,现在用了默认的traefik控制器反代,我还特地将ingress控制器换成了ingress也无果。