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. 手动部署
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 编写.
TTRSS 迁移实战的更多相关文章
- 从SQL Server到MySQL,近百亿数据量迁移实战
从SQL Server到MySQL,近百亿数据量迁移实战 狄敬超(3D) 2018-05-29 10:52:48 212 沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:J ...
- 利用Velero对K8S备份还原与集群迁移实战
一.简介 Velero 是一款云原生时代的灾难恢复和迁移工具,采用 Go 语言编写,并在 github 上进行了开源,利用 velero 用户可以安全的备份.恢复和迁移 Kubernetes 集群资源 ...
- 数据迁移实战:基于Kettle的Mysql到DB2的数据迁移
From:https://my.oschina.net/simpleton/blog/525675 一.什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数 ...
- 【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移Redis数据实战指南(离线同步数据)
离线迁移 与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移. 存在的问题 由于生产环境的各种原因,我们需要对现有服务器 ...
- 阿里云rds数据库迁移实战(多数据源)
由于某几个业务表数据量太大,数据由业务写,数据部门读. 写压力不大,读却很容易导致长时间等待问题(读由单独系统进行读),导致连接被占用,从而容易并发稍稍增长导致全库卡死! 于是,就拆库呗. 业务系统拆 ...
- 通过Navicat Premium迁移Oracle到EDB迁移实战
1.1 DB migration analysis 在从Oracle向EDB迁移数据之前,须要做非常多准备工作.比方须要分析源数据库数据量大小.数据是否稳定.异构数据库兼容.编码方式.业务逻辑(存 ...
- MySQL-线上数据迁移实战记录
1. 迁移背景和限制条件 随着功能的迭代或者数据表中数据量的增加,将现有数据进行迁移已是工作中经常遇到的事情.通常我们在平时迁移数据数据的时候,只需要用mysqldump.mysqlimport指令就 ...
- Velero系列文章(四):使用Velero进行生产迁移实战
概述 目的 通过 velero 工具, 实现以下整体目标: 特定 namespace 在B A两个集群间做迁移; 具体目标为: 在B A集群上创建 velero (包括 restic ) 备份 B集群 ...
- 【Redis技术探索】「数据迁移实战」手把手教你如何实现在线+离线模式进行迁移Redis数据实战指南(在线同步数据)
从实战出发使用RedisShake进行Redis数据在线+离线模式迁移指南 RedisShake基本介绍 RedisShake是基于redis-port基础上进行改进的是一款开源的Redis迁移工具, ...
- Zstack迁移实战记录1
https://blog.csdn.net/weixin_43767046/article/details/113748775 这段时间除了那个重度烤机测试(上面链接),还在做另一件事,想再做一个服务 ...
随机推荐
- 全网最适合入门的面向对象编程教程:60 Python面向对象综合实例-传感器数据实时绘图器
全网最适合入门的面向对象编程教程:60 Python 面向对象综合实例-传感器数据实时绘图器 摘要: 本文将结合之前内容实现模拟一个传感器系统软件,包括三个线程:传感器线程生成数据并通过串口发送给主机 ...
- 洛谷P7911 [CSP-J 2021] 网络连接题解
普通的模拟题,数据很小,基本排除超时超空间的可能 上代码: #include<bits/stdc++.h> #define LL long long using namespace std ...
- 【爬虫】爬虫简单举例(三种写法) 涉及requests、urllib、bs4,re
目录 写法1:requests + re 写法2:urllib + re 方法3:request + bs4 补充.我在发了这篇文章之后,后面又要爬这个论坛.然后我发现我没有认真观察那个网页的源码,所 ...
- MockQueryable:LINQ查询模拟测试工具
我们在项目开发过程中,单元测试是确保代码质量的重要环节.涉及数据库LINQ查询逻辑,就需要数据库配合,但这样可能出现性能和数据库并发等问题.下面给推荐一个开源库,为开发者提供了一种简便的方式来模拟LI ...
- pip 安装 Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)'))
1.问题 1.1 问题截取 pip install redis -i https://pypi.tuna.tsinghua.edu.cn/simple Looking in indexes: http ...
- Qt编写的modbus模拟器/支持网络和串口以及websocket/支持网络rtu
一.使用说明 1.1 设备模拟-Com 第一步,填写要模拟的设备地址,0表示自动处理,也就是收到什么地址就应答什么地址. 第二步,填写对应的串口号和波特率. 第三步,单击打开串口,成功后会变成关闭串口 ...
- Qt编写视频监控系统79-四种界面导航栏的设计
一.前言 最初视频监控系统按照二级菜单的设计思路,顶部标题栏一级菜单,左侧对应二级菜单,最初采用图片在上面,文字在下面的按钮方式展示,随着功能的增加,二级菜单越来越多,如果都是这个图文上下排列的按钮, ...
- 优化博客Ⅰ-压缩图片为webp格式
自动压缩博客图片为webp格式 作为自己的个人博客,我非常喜欢搞一些花里胡哨的东西,其中就包括不少精美图片,但是过多的图片会占用大量的网络资源导致博客加载速度变慢. 那怎么办呢? 第一个想到的就是升级 ...
- IIS通过URL重写配置http跳转https,排除部分域名
<rewrite> <rules> <rule name="http to https" stopProcessing="true" ...
- biancheng-MongoDB教程
目录http://c.biancheng.net/mongodb2/ 1NoSQL是什么2MongoDB是什么3Windows安装MongoDB4Linux安装MongoDB5MacOS安装Mongo ...