赛博菩萨系列
这不是今年,哦,去年,买了个小主机嘛,这不是就在自己折腾K8S嘛。
既然已经能比较熟练地部署Jellyfin了,那么也差不多能比较轻而易举地将Docker「升级」成K8S部署了。
小雅,又名小雅AList、小雅超集,大概干的事情是将AList魔改一番,然后做了网盘聚合,传言里面大概有200T的各种资源。
我馋这东西好久了,之前一直没看懂。然后最近按照官方教程上尝试了一下,嗯,原来还是蛮简单的,写几个配置文件就好了。官方有一键搭建脚本,里面是在宿主机上起Docker,但我不是想把所有东西都K8S化嘛,所以就有了本期的折腾。
获取各种Token
按照小雅指南(小雅官方教程),我们需要获取下面几个东西:
项目 | 文件 |
阿里云盘的Token | mytoken.txt |
阿里云盘Open Token | myopentoken.txt |
转存目录ID(转存一下这个) | temp_transfer_folder_id.txt |
内网访问地址 我用ingress加了个域名,是 xiaoya.homelab | docker_address.txt 内容为 http://xiaoya.homelab |
将这三个东西按照要求,分别保存成文本文件。
配置清单
我是把所有东西放在了 apps 这个namespace下。
大致干的事情,就是把官方的「一行」就能完成的Docker启动,变成100多行的K8S配置清单。
PVC,用于存储配置文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: xiaoya
namespace: apps
spec:
resources:
requests:
storage: 1Gi
accessModes:
- ReadWriteMany
到这里,你的集群的默认存储设备上已经有一个空的文件夹了。你需要把上面自己创建的那些文件复制进去。直接放在这个文件夹里面就好
Deployment,用于真正起服务
apiVersion: apps/v1
kind: Deployment
metadata:
name: xiaoya
namespace: apps
spec:
replicas: 1
selector:
matchLabels:
app: xiaoya
template:
metadata:
labels:
app: xiaoya
spec:
containers:
- name: xiaoya
image: xiaoyaliu/alist:latest
imagePullPolicy: IfNotPresent
ports:
- name: http # 这个是日常访问端口
containerPort: 80
protocol: TCP
- name: http-manage # 这个是管理端口,平常用不到
containerPort: 5244
protocol: TCP
securityContext:
privileged: true
volumeMounts:
- mountPath: /data
name: xiaoya-config
volumes:
- name: xiaoya-config
persistentVolumeClaim:
claimName: xiaoya
restartPolicy: Always
Service,我也不知道到底是干啥的。大概是对外暴露那些端口
kind: Service
apiVersion: v1
metadata:
name: xiaoya
namespace: apps
spec:
selector:
app: xiaoya
ports:
- port: 80
targetPort: 80
name: http
protocol: TCP
type: LoadBalancer
sessionAffinity: ClientIP
Ingress,用于配置域名访问。由于管理端口一般用不到,所以我就没做映射
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: xiaoya
namespace: apps
spec:
rules:
- host: xiaoya.homelab
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: xiaoya
port:
name: http
为了能顺利自动重启,需要先增加一个权限
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: apps
name: deployment-manager
rules:
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: deployment-manager-binding
namespace: apps
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: deployment-manager
subjects:
- kind: ServiceAccount
name: default
namespace: docker
每日自动重启(更新资源、自动签到)
apiVersion: batch/v1
kind: CronJob
metadata:
name: xiaoya
namespace: apps
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: kubectl
image: bitnami/kubectl
args:
- rollout
- restart
- deployment/xiaoya
restartPolicy: OnFailure
好了,到这里,大功告成。等个5分钟左右,看到Log里面获取更新完毕,就可以打开浏览器,输入 http://xiaoya.homelab
使用了。
除了官方推荐的「Docker重启大法」,其实还有个办法可以更新:在根目录下,有个叫updateall
的东西,定时运行它也是可以的。
其他配置
TVBox 如何配置
填这个地址:
http://xiaoya.homelab/tvbox/my.json
如何进管理页面
首先,我们需要获取密码。按照alist的官方教程,我们需要进入到容器shell内,然后执行
./alist password
即可看到用户名和密码。我这里遇到了一点点报错,说ALIST_开头的环境变量解析错误。自己手动export一下即可。
还记得有个5244端口不?对,就它。可以用Lens之类的东西直接映射一下,就可以打开了。
最近发现好像完全把管理界面给干掉了?那么可以直接用sqlite3查看data.db
修改全部内容。不过,似乎也没啥好修改的。
平时怎么维护
小雅指南上说要每天重启Docker以更新目录。emm,咱已经拿K8S的定时任务给解决了。
我看它的原理似乎是将你想看的文件转存到自己的阿里云盘上,然后获取文件地址播放。所以你的阿里云盘转存文件夹里将会有所有浏览过的文件。平时闲着无聊的话,登录上去,删删文件,就好了。
我看到有个叫做 aliyun_cleaner 的脚本,似乎可以用。但是这个东西写得有点复杂,里面一大堆自动升级、签到、安装定时任务啥啥啥的,加上我对sh不熟悉,看得比较晕。
所以我也自己拿go写了个脚本。大致思路是用refresh token换access token(并把新拿到的refresh token写回原来的文件里),然后调用对应的API,列出目录、判断文件创建时间、删除2天前的文件。把这个文件放到/data
,设置好执行权限,然后写了个CronJob:
apiVersion: batch/v1
kind: CronJob
metadata:
name: xiaoya-cleaner
namespace: docker
spec:
schedule: "30 1 * * *"
concurrencyPolicy: Replace
jobTemplate:
spec:
template:
spec:
containers:
- name: kubectl
image: bitnami/kubectl
command:
- /bin/bash
- -c
- |
pods=$(kubectl get pods -l app=xiaoya -o=jsonpath='{.items[*].metadata.name}' -n docker)
for pod in $pods; do
kubectl exec $pod -n docker -- /bin/bash -c "cd /data && ./XiaoyaCleaner"
done
restartPolicy: OnFailure
然后我发现,API方面其实可以有两套方案:用网页API(mytoken.txt),或者用OpenAPI(myopentoken.txt)。区别不大。
其他高级功能怎么用
看官方文档去吧。虽然不太好读,但凑合能用。
Jellyfin/Emby怎么挂载
不会,还没研究。
官方有另一个脚本(仔细看了下其实是脚本套脚本),一键安装emby,顺带安装resiliosync用于同步元数据。
看其他人的说明,似乎是要把元数据下载并解压到Jellyfin/Emby的某个目录中。但毕竟Jellyfin可是我的K8S中最最核心(使用频率最高)的应用呢。它要是挂了,我会很不爽。有空的话看看官方教程里面是怎么做的,也给「移植」到k8s上。
发表回复