背景
幾年前在云服務(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è)置 -> 逐一查看, 將URL為 https://rss.ewhisper.cn... 修改為: https://rss.west-beta.ts.net...
8. 驗(yàn)證
- 驗(yàn)證 RssHub 是否正常
- 驗(yàn)證 TTRss 是否正常
- 登錄 TTRss
- 閱讀文章
- 驗(yàn)證是否可以正常訂閱
9. 備份
- 備份 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í)間后清理原集群
- node 回收
- DNS 記錄清理
- 域名清理
- 原集群備份 s3 刪除
- 其他雜項(xiàng)清理
總結(jié)
以上為本次 TTRss 遷移的總結(jié), 詳細(xì)步驟對(duì)各位沒啥用. 但是希望遷移的規(guī)劃/流程/思路可以提供價(jià)值.
三人行, 必有我?guī)? 知識(shí)共享, 天下為公. 本文由東風(fēng)微鳴技術(shù)博客 EWhisper.cn 編寫.