2025-01-06の記事を追加
github pages / deploy (push) Successful in 2m6s Details

This commit is contained in:
usbharu 2025-01-06 15:56:02 +09:00
parent a5fb5f99b4
commit 3031bc3007
Signed by: usbharu
GPG Key ID: 95CBCF7046307B77
1 changed files with 68 additions and 0 deletions

View File

@ -0,0 +1,68 @@
---
author: usbharu
draft: true
categories:
- 技術
date: 2025-01-06T15:19:35+09:00
tags:
- Kubernetes
- misskey
keywords:
- Kubernetes
- misskey
title: Misskey on k8sと本番環境でやらかしちゃった人
relpermalink: posts/2025-01-06/
url: posts/2025-01-06/
decription: Misskey on k8sと本番環境でやらかしちゃった人
---
あけましておめでとうございます。年末にMisskey on k8sを少し改良しました。ついでにやらかしちゃったので懺悔(?)です。
## 現状
usbharu.devでは、k8sを使ってMisskeyを構築しており、DBにCloudnative PostgreSQL、Redisは普通にDeploymentを使用して構築しています。ArgoCDとHelmのRelease機能を活用してyamlをコピペするだけでドメイン等含めて全自動で新しいMisskeyインスタンスが生えてくる状態になっています。
## 改良
[misskeyの設定をvaluesからできるように · usbharu/usbharu-lab@3f24732](https://github.com/usbharu/usbharu-lab/commit/3f247329f968bc692e3d5e3e4f24c09f48c3d6b0)
[メンテナンスページを出せるように · usbharu/usbharu-lab@6f7afdb](https://github.com/usbharu/usbharu-lab/commit/6f7afdb15307f26a66d3838edd6e1a864f20ae7e)
MisskeyのJobQueueに関する設定をhelmのvalues.yamlから変更できるようになりました。それと、Misskeyをメンテナンスしているときにアクセスが来たときに表示する、メンテナンスページをを簡単に表示できるようになりました。
[メンテナンスページのテストの様子](https://mk.yopo.work/notes/a2jrhk78vg)
それと、バックアップのスケジュールがUTCなのをすっかり忘れて昼間の12時にしていたのでタイムゾーンを設定するようにしました。
```yaml
spec:
timeZone: "Asia/Tokyo"
schedule: {{ cron式k8s版 }}
```
結果的にこのタイムゾーン設定忘れのお陰で救われるんですがそれはまた後ほど。
## やらかし
[negi by usbharu · Pull Request #7 · usbharu/usbharu-lab](https://github.com/usbharu/usbharu-lab/pull/7)
訳合って新しいMisskeyサーバーを生やしたときのPRです。このPRの中にやらかしが混じっています。
前述の通り、コピペするだけで新しくMisskeyを生やすことができるわけですが、正確にはコピペした後変更する必要がある場所があります。例えばドメイン(当然)とか、ArgoCDのApplication名とか。
HelmのRelease名を変えてArgoCDのApplicationの`metadata.name`を変更するのを忘れると、新しく作ったApplication(に常になるのか、優先順位がどうなってるのかは知らん)に上書きされます。当然元のApplicationは消えPostgreSQLのクラスタは削除されあらゆるデータが削除されます。
というのをやらかしました……夜10時ぐらいにPRをマージして、気づいたときには時既にお寿司🍣。元からあった自分のお一人様`misskey.usbharu.dev`が消えました。今まで数分のロールバックはありましたが、DB全部ふっ飛ばしたことは初めてです。幸いk8sの移行後ちゃんと自動バックアップを取るようにしていたので、バックアップが失敗していなければ数時間ロールバックしますが復旧できます。ファイルはオブジェクトストレージにアップロードしているので問題なし。通知とアンテナが消えることはいつものことなので気にしたら負けです。
朝3時に自動バックアップを設定していたので大体20時間ぐらい巻き戻るはず…だったんですが上に書いたようにタイムゾーン間違えてたので結果的には10時間の巻き戻りで済みました。その間にフォロー等はなかったので不整合も最低限です。
## 対策
[うっかり削除しちゃっても大丈夫なようにした · usbharu/usbharu-lab@f276d15](https://github.com/usbharu/usbharu-lab/commit/f276d150cf31aacf4b29308f43c20b19889ef134)
RedisとCloudnativePGのClusterのannotationsにArgoCDが自動でリソースを削除しないよう指示しました。うまく動くかは知りません。
```yaml
annotations:
argocd.argoproj.io/sync-options: Delete=false
```