在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目录里。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: alist-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /etc/alist
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: alist-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
# 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
apiVersion: v1
kind: Service
metadata:
  name: alist-service
spec:
  selector:
    app: alist
  ports:
    - protocol: TCP
      port: 5244
      targetPort: 5244
  type: ClusterIP
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

kubectl get pods

查看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 容器名称

总结与问题

用了一段时间,没什么大问题,因为我的需求主要就是下载和在线查看,问题其实都不大,一个是容器初始化相关,一个是控制器相关,以后慢慢琢磨吧。

这次迁移我是自己手动登录后台做的恢复,将之前备份好的文件保存好上传执行。alist本身的config备份文件,其实是可以在k8s初始容器时候就导入进来的,这块可以再仔细研究下他的恢复命令将config文件直接挂到容器里,在容器刚启动时就自动执行恢复。

实测上传遇见限制大小的问题,这块之前在docker的时候反代是可以解决掉的,现在用了默认的traefik控制器反代,我还特地将ingress控制器换成了ingress也无果。