From 3031bc3007cee8c89fdc6df080b338bd32933361 Mon Sep 17 00:00:00 2001 From: usbharu Date: Mon, 6 Jan 2025 15:56:02 +0900 Subject: [PATCH] =?UTF-8?q?2025-01-06=E3=81=AE=E8=A8=98=E4=BA=8B=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/posts/2025-01-06/index.md | 68 +++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 content/posts/2025-01-06/index.md diff --git a/content/posts/2025-01-06/index.md b/content/posts/2025-01-06/index.md new file mode 100644 index 0000000..f7f507e --- /dev/null +++ b/content/posts/2025-01-06/index.md @@ -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 +``` \ No newline at end of file