背景
几年前在云服务器上搭建了一套 TTRss + RssHub 集群, 用于阅读文章.
具体可以参见这篇文章: 使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss - 东风微鸣技术博客
近期云服务器要到期了, 刚好趁此机会将其从云上迁移到家里的 Homelab2 集群.
迁移是2025年2月22日上午做的, 结果非常顺利. 做完后太太还没起床呢, 那就再利用这段时间总结一下迁移过程.
内容有些流水账, 如果有疑问/建议欢迎交流.
技术栈
迁移前
- K3s v1.23.10+k3s1
- Ingress: 自带的 Traefik
- 证书: cert-manager + DNSPod 插件
- 存储:自带的 local-path
- 备份: velero(只备份 manifests)
- 域名: 后缀为
ewhisper.cn
迁移后
- K3s: v1.31.5+k3s1
- Ingress: Tailscale Operator
- 证书: Tailscale Operator
- 存储: rook-ceph
- 备份: volsync
- 域名:后缀为
west-beta.ts.net
综上, 其实不只是简单迁移, 还需要相应调整存储/网络相关配置.
这里的迁移场景非常具体, 只针对我的使用场景, 但是迁移的规划/步骤/思路可以供大家参考.
📝Notes:
我的完整迁移后代码位于: homelab2/apps/rsshub at master · east4ming/homelab2
本文出于长度考虑, 就不粘贴细节脚本/yaml了, 感兴趣的可以去 repo 查看.
迁移实战
1. 备份
1.1 K8s Manifests 备份
- Deploy
- Service
- PVC
- IngressRoute(Traefik)
已经通过 Velero 备份为 json 文件. 再通过脚本 kubectl-neat.sh
转换为 yaml 并移除不需要的字段.
📝Notes:
kubectl-neat.sh
用到了 kubectl krew 插件: neat
PVC 数据备份
- redis 数据:
dump.rdb
- ttrss icons: 空. 无需备份.
- ttrss postgresql 数据: 进入到容器中, 执行
pg_dumpall -c -U postgres > export.sql
📚️Reference:
数据库更新或迁移|🐋 Awesome TTRSS另外注意, 备份 Postgres 数据前可以先停止 ttrss Deployment.
2. 停机
原集群上, 停掉所有 Deploy, 停止所有服务.
3. 修改 Manifests
修改 Manifests 以适配新的 Homelab2 集群.
- NS 添加
volsync.backube/privileged-movers
注解以启用 volsync特权备份功能 - Deploy postgres 增加 initContainer 删除 PostgreSQL 数据库中的
lost+found
目录, 否则启动报错 (rook-ceph PV 特性导致必须作此调整) - Deploy ttrss 增加 initContainer 使用 busybox 镜像执行 chmod 命令,将
/var/www/feed-icons/
目录的权限设置为777
- 修改 IngressRoute 的 Host.
- 修改 depoly ttrss 中的
SELF_URL_PATH
为新的域名 - 将 rsshub 和 ttrss 的 traefik IngressRoute 改为 Ingress 配置并调整域名
- 将环境变量中的密码改为从 secrets 中获取(Secrets 添加到
.gitignore
) (因为我的 repo 是public 的, 所以密码要避免暴露)
4. 手动部署
cd apps/rsshub
kubectl apply -f ns.yaml
kubectl apply -f deploy/ -f pvc/ -f secret/ -f service/ -f ingress/
5. 恢复数据
先停掉除了 Postgres 以外的所有 Deploy, 防止脏数据.
5.1. Postgres
先将 export.sql
复制到 Postgres PV 中.
再进入 Postgres pod 中执行以下命令恢复数据:
cat export.sql | psql -U postgres
5.2. Redis
将 dump.rdb
复制到 Redis PV 中. (还需要 chown
)
6. 启动
启动所有 Deploy.
7. 修改 TTRss 供稿设置
登录 TTRss 域名: ttrss.west-beta.ts.net
, 进入: 偏好设置 -> 供稿设置 -> 逐一查看, 将URL为 https://rss.ewhisper.cn...
修改为: https://rss.west-beta.ts.net...
8. 验证
- 验证 RssHub 是否正常
- 验证 TTRss 是否正常
- 登录 TTRss
- 阅读文章
- 验证是否可以正常订阅
9. 备份
- 备份 Postgres 数据
10. 纳入 ArgoCD 管理
因为 ArgoCD 不监控子目录的 yaml 文件, 所以需要将所有 yaml 文件都放在一个目录中.
使用脚本 move_and_rename.sh
执行调整, 调整后修改 .gitignore
文件并删除不再需要的空目录.
11. 并行一段时间后清理原集群
- node 回收
- DNS 记录清理
- 域名清理
- 原集群备份 s3 删除
- 其他杂项清理
总结
以上为本次 TTRss 迁移的总结, 详细步骤对各位没啥用. 但是希望迁移的规划/流程/思路可以提供价值.
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.