TTRSS 迁移实战

背景

几年前在云服务器上搭建了一套 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. 手动部署

bash 复制代码
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 中执行以下命令恢复数据:

bash 复制代码
cat export.sql | psql -U postgres

5.2. Redis

dump.rdb 复制到 Redis PV 中. (还需要 chown)

6. 启动

启动所有 Deploy.

7. 修改 TTRss 供稿设置

登录 TTRss 域名: ttrss.west-beta.ts.net, 进入: 偏好设置 -> 供稿设置 -> 逐一查看, 将URLhttps://rss.ewhisper.cn... 修改为: https://rss.west-beta.ts.net...

8. 验证

  1. 验证 RssHub 是否正常
  2. 验证 TTRss 是否正常
    1. 登录 TTRss
    2. 阅读文章
    3. 验证是否可以正常订阅

9. 备份

  1. 备份 Postgres 数据

10. 纳入 ArgoCD 管理

因为 ArgoCD 不监控子目录的 yaml 文件, 所以需要将所有 yaml 文件都放在一个目录中.

使用脚本 move_and_rename.sh 执行调整, 调整后修改 .gitignore 文件并删除不再需要的空目录.

11. 并行一段时间后清理原集群

  1. node 回收
  2. DNS 记录清理
  3. 域名清理
  4. 原集群备份 s3 删除
  5. 其他杂项清理

总结

以上为本次 TTRss 迁移的总结, 详细步骤对各位没啥用. 但是希望迁移的规划/流程/思路可以提供价值.

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

相关推荐
c无序3 小时前
Docker-技术架构演进之路
docker
努力的小T7 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
Smile_Gently10 小时前
Docker
云原生·eureka
转身後 默落10 小时前
04.Docker 镜像命令
docker·容器·eureka
IT_张三10 小时前
Docker+Kubernetes_第一章_Docker入门
java·docker·kubernetes
jessezappy10 小时前
记录:Docker 安装记录
docker·安装·ollama·软链接
三天不学习10 小时前
如何在 Ubuntu 上安装 Docker:详细步骤指南
ubuntu·docker·eureka
Diligent_lvan11 小时前
聊聊istio服务网格
云原生·istio
企鹅侠客11 小时前
kube-proxy怎么修改ipvs规则?
云原生·kubernetes·kubelet