TTRSS 遷移實(shí)戰(zhàn)

背景

幾年前在云服務(wù)器上搭建了一套 TTRss + RssHub 集群, 用于閱讀文章.

具體可以參見這篇文章: 使用 K8S 部署 RSS 全套自托管解決方案 - RssHub + Tiny Tiny Rss - 東風(fēng)微鳴技術(shù)博客

近期云服務(wù)器要到期了, 剛好趁此機(jī)會(huì)將其從云上遷移到家里的 Homelab2 集群.

遷移是2025年2月22日上午做的, 結(jié)果非常順利. 做完后太太還沒起床呢, 那就再利用這段時(shí)間總結(jié)一下遷移過程.

內(nèi)容有些流水賬, 如果有疑問/建議歡迎交流.

技術(shù)棧

遷移前

  • K3s v1.23.10+k3s1
  • Ingress: 自帶的 Traefik
  • 證書: cert-manager + DNSPod 插件
  • 存儲(chǔ):自帶的 local-path
  • 備份: velero(只備份 manifests)
  • 域名: 后綴為 ewhisper.cn

遷移后

  • K3s: v1.31.5+k3s1
  • Ingress: Tailscale Operator
  • 證書: Tailscale Operator
  • 存儲(chǔ): rook-ceph
  • 備份: volsync
  • 域名:后綴為 west-beta.ts.net

綜上, 其實(shí)不只是簡(jiǎn)單遷移, 還需要相應(yīng)調(diào)整存儲(chǔ)/網(wǎng)絡(luò)相關(guān)配置.

這里的遷移場(chǎng)景非常具體, 只針對(duì)我的使用場(chǎng)景, 但是遷移的規(guī)劃/步驟/思路可以供大家參考.

??Notes:

我的完整遷移后代碼位于: homelab2/apps/rsshub at master · east4ming/homelab2

本文出于長(zhǎng)度考慮, 就不粘貼細(xì)節(jié)腳本/yaml了, 感興趣的可以去 repo 查看.


遷移實(shí)戰(zhàn)

1. 備份

1.1 K8s Manifests 備份

  • Deploy
  • Service
  • PVC
  • IngressRoute(Traefik)

已經(jīng)通過 Velero 備份為 json 文件. 再通過腳本 kubectl-neat.sh 轉(zhuǎn)換為 yaml 并移除不需要的字段.

??Notes:

kubectl-neat.sh 用到了 kubectl krew 插件: neat

PVC 數(shù)據(jù)備份

  • redis 數(shù)據(jù): dump.rdb
  • ttrss icons: 空. 無需備份.
  • ttrss postgresql 數(shù)據(jù): 進(jìn)入到容器中, 執(zhí)行pg_dumpall -c -U postgres > export.sql

???Reference:
數(shù)據(jù)庫(kù)更新或遷移|?? Awesome TTRSS

另外注意, 備份 Postgres 數(shù)據(jù)前可以先停止 ttrss Deployment.


2. 停機(jī)

原集群上, 停掉所有 Deploy, 停止所有服務(wù).

3. 修改 Manifests

修改 Manifests 以適配新的 Homelab2 集群.

  • NS 添加 volsync.backube/privileged-movers 注解以啟用 volsync特權(quán)備份功能
  • Deploy postgres 增加 initContainer 刪除 PostgreSQL 數(shù)據(jù)庫(kù)中的 lost+found 目錄, 否則啟動(dòng)報(bào)錯(cuò) (rook-ceph PV 特性導(dǎo)致必須作此調(diào)整)
  • Deploy ttrss 增加 initContainer 使用 busybox 鏡像執(zhí)行 chmod 命令,將 /var/www/feed-icons/ 目錄的權(quán)限設(shè)置為 777
  • 修改 IngressRoute 的 Host.
  • 修改 depoly ttrss 中的 SELF_URL_PATH 為新的域名
  • 將 rsshub 和 ttrss 的 traefik IngressRoute 改為 Ingress 配置并調(diào)整域名
  • 將環(huán)境變量中的密碼改為從 secrets 中獲取(Secrets 添加到 .gitignore) (因?yàn)槲业?repo 是public 的, 所以密碼要避免暴露)

4. 手動(dòng)部署

cd apps/rsshub
kubectl apply -f ns.yaml
kubectl apply -f deploy/ -f pvc/ -f secret/ -f service/ -f ingress/

5. 恢復(fù)數(shù)據(jù)

先停掉除了 Postgres 以外的所有 Deploy, 防止臟數(shù)據(jù).

5.1. Postgres

先將 export.sql 復(fù)制到 Postgres PV 中.

再進(jìn)入 Postgres pod 中執(zhí)行以下命令恢復(fù)數(shù)據(jù):

cat export.sql | psql -U postgres

5.2. Redis

dump.rdb 復(fù)制到 Redis PV 中. (還需要 chown)

6. 啟動(dòng)

啟動(dòng)所有 Deploy.

7. 修改 TTRss 供稿設(shè)置

登錄 TTRss 域名: ttrss.west-beta.ts.net, 進(jìn)入: 偏好設(shè)置 -> 供稿設(shè)置 -> 逐一查看, 將URLhttps://rss.ewhisper.cn... 修改為: https://rss.west-beta.ts.net...

8. 驗(yàn)證

  1. 驗(yàn)證 RssHub 是否正常
  2. 驗(yàn)證 TTRss 是否正常
    1. 登錄 TTRss
    2. 閱讀文章
    3. 驗(yàn)證是否可以正常訂閱

9. 備份

  1. 備份 Postgres 數(shù)據(jù)

10. 納入 ArgoCD 管理

因?yàn)?ArgoCD 不監(jiān)控子目錄的 yaml 文件, 所以需要將所有 yaml 文件都放在一個(gè)目錄中.

使用腳本 move_and_rename.sh 執(zhí)行調(diào)整, 調(diào)整后修改 .gitignore 文件并刪除不再需要的空目錄.

11. 并行一段時(shí)間后清理原集群

  1. node 回收
  2. DNS 記錄清理
  3. 域名清理
  4. 原集群備份 s3 刪除
  5. 其他雜項(xiàng)清理

總結(jié)

以上為本次 TTRss 遷移的總結(jié), 詳細(xì)步驟對(duì)各位沒啥用. 但是希望遷移的規(guī)劃/流程/思路可以提供價(jià)值.

三人行, 必有我?guī)? 知識(shí)共享, 天下為公. 本文由東風(fēng)微鳴技術(shù)博客 EWhisper.cn 編寫.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容