Slide 1

Slide 1 text

- 2023/10/20 ゆる SRE 勉強会 #2 - Kubernetes アップデートのツラミで気付いた デプロイ手順のユガミ #yurusre 逆井(SAKASAI) @ k6s4i53rx 逆井(さかさい) 啓佑

Slide 2

Slide 2 text

自己紹介 - 2023/10/20 ゆる SRE 勉強会 #2 - 逆 井 啓 佑 さかさい ● 日系の SIer に所属しています ● 決済サービスを開発しています ○ バックエンドエンジニア ○ SRE ● 趣味:スノボとゴルフとお酒 逆井(SAKASAI) @ k6s4i53rx

Slide 3

Slide 3 text

はじめに - 2023/10/20 ゆる SRE 勉強会 #2 - SRE のイベント登壇初めてです。 どうぞ、よろしくお願いいたします。

Slide 4

Slide 4 text

はじめに - 2023/10/20 ゆる SRE 勉強会 #2 - みなさん Kubernetes 使っていますか...?

Slide 5

Slide 5 text

はじめに - 2023/10/20 ゆる SRE 勉強会 #2 - Kubernetes を使っていると、 アップデートが結構定期的にあります。

Slide 6

Slide 6 text

はじめに - 2023/10/20 ゆる SRE 勉強会 #2 - インフラを常に新しく保つ。 (私のチームでは) SRE のお仕事 になります。

Slide 7

Slide 7 text

はじめに - 2023/10/20 ゆる SRE 勉強会 #2 - 今回は Kubernetes のアップデート でぶち当たった軽いツラミを共有させてください。 Kubernetes 使ってないよ 🤔 って方もいると思うので、 かなり抽象化してお話しします。   ※ 私のサービスにおける K8s の良し悪しは今回のセッションでは議論しません。   ※ 既に K8s 運用してる方にとっては、当たり前だろ JK となる内容かもしれません。

Slide 8

Slide 8 text

アジェンダ - 2023/10/20 ゆる SRE 勉強会 #2 - ● Kubernetes のアップデートについて ● アップデートに向けた用意周到な準備(フラグ) ● 想定外事象発生。泥イベントと化す ● 問題解決 ● 結び、そして反省

Slide 9

Slide 9 text

Kubernetes のアップデートについて - 2023/10/20 ゆる SRE 勉強会 #2 - ● Kubernetes は 3 ヶ月に 1 度アップデート ○ 弊プロダクトは GKE を使っている ● 今まで v1.23, v1.24 のアップデート => とくに問題はなかった。作業感 ● ミッションクリティカルな決済サービスを扱っているので、 毎回!深夜帯に!手動で!アップデートを実施(通称アプデ祭り) 今回の 1.25 アプデは、 ほんの少しだけ "鬼門" があった。

Slide 10

Slide 10 text

v1.25 では何が違う? - 2023/10/20 ゆる SRE 勉強会 #2 - アプリチームがよく使ってる K8s API バージョンが幾つか非推奨に https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-25 ● K8s の操作は API ドリブン ● 今までアプデでも同様のことはあったが、基本的に使ってなく影響がなかった ● (備考) CronJob や PodSecurityPolicy PodDisruptionBudget が該当 Cronjob.yaml (一部省略) Cronjob.yaml (一部省略) beta1 batch/v1beta1 が廃止になった

Slide 11

Slide 11 text

v1.25 では何が違う? - 2023/10/20 ゆる SRE 勉強会 #2 - アップデート後に、 廃止された API を使ってデプロイしようとすると事故る 😄 ※ 通常 "testing" 環境で感知できます。

Slide 12

Slide 12 text

v1.25 では何が違う? - 2023/10/20 ゆる SRE 勉強会 #2 - ■ アップデートまでに 全スクラムチームに依頼、対応をしてもらう必要 がある ● チームもサービスもたくさんある ● (SRE チームで修正しきるのは不可能...)

Slide 13

Slide 13 text

■ アップデートまでに 全スクラムチームに依頼、対応をしてもらう必要 がある ● チームもサービスもたくさんある ● (SRE チームで修正しきるのは不可能...) v1.25 では何が違う? - 2023/10/20 ゆる SRE 勉強会 #2 - ■ マニフェストは Helm を使って、単一のリポジトリで管理している。 ● もしかしたら、各チーム自主的に修正してくれてるかも...?(淡い期待) ※ Kubernetes が廃止予定 API 使ってるとデプロイ時に警告 してくれる

Slide 14

Slide 14 text

■ アップデートまでに 全スクラムチームに依頼、対応をしてもらう必要 がある ● チームもサービスもたくさんある ● (SRE チームで修正しきるのは不可能...) v1.25 では何が違う? - 2023/10/20 ゆる SRE 勉強会 #2 - ■ マニフェストは Helm を使って、単一のリポジトリで管理している。 ● もしかしたら、各チーム自主的に修正してくれてるかも...?(淡い期待) ※ Kubernetes が廃止予定 API 使ってるとデプロイ時に警告 してくれる ほとんどのサービスで非推奨 API が使われていた。儚い。

Slide 15

Slide 15 text

v1.25 では何が違う? - 2023/10/20 ゆる SRE 勉強会 #2 - 全スクラムチームにお願いし、対応をしてもらう必要がある ● 10 チーム程度。各チーム平均 10 個強のサービスを保有 ● (SRE チームで修正しきるのは不可能...) マニフェストは Helm を使って、単一のリポジトリで管理している。 ● もしかしたら、各チーム自主的に修正してくれてるかも...?(淡い期待) ※ Kubernetes が廃止予定 API 使ってるとデプロイ時に警告してくれる ● 使っていた。ほとんどのサービスで非推奨 API があったンゴ やるしかねぇ

Slide 16

Slide 16 text

用意周到な準備(フラグ) - 2023/10/20 ゆる SRE 勉強会 #2 - ① どのチームがどのサービスを保有してるのかわからないから、 全てのサービスに対して、どのファイルのどの箇所を修正すればいいかを整理 ● Helm リポジトリをフル目スキャン ● pluto という非推奨 API 使用を検出するツールを駆使 https://github.com/FairwindsOps/pluto

Slide 17

Slide 17 text

用意周到な準備(フラグ) - 2023/10/20 ゆる SRE 勉強会 #2 - ① どのチームがどのサービスを保有してるのかわからないから、 全てのサービスに対して、どのファイルのどの箇所を修正すればいいかを整理 ● Helm リポジトリをフル目スキャン ● pluto という非推奨 API 使用を検出するツールを駆使 https://github.com/FairwindsOps/pluto ② 10程度チームに依頼。問い合わせを捌くマンになる

Slide 18

Slide 18 text

① どのチームがどのサービスを保有してるのかわからないから、 全てのサービスに対して、どのファイルのどの箇所を修正すればいいかを整理 ● Helm リポジトリをフル目スキャン ● pluto という非推奨 API 使用を検出するツールを駆使 https://github.com/FairwindsOps/pluto ② 10程度チームに依頼。問い合わせを捌くマンになる ③ なんとかアプデまでに全修正 Done.   アプデも特に問題なく終了。調整が大変だったけど、作業ゲーだったぜ... 用意周到な準備(フラグ) - 2023/10/20 ゆる SRE 勉強会 #2 -

Slide 19

Slide 19 text

用意周到な準備 - 2023/10/20 ゆる SRE 勉強会 #2 - どのチームがどのサービスを保有してるのかわからないから、 全てのサービスに対して、どのファイルのどの箇所を修正すればいいかを洗い出し ● Helm リポジトリをサーフィン ● pluto という非推奨 API 使用を検出するツールを駆使 https://github.com/FairwindsOps/pluto 問い合わせなどにも対応し、なんとかアプデまでに修正 Done. アプデも特に問題なく終了。調整が大変だったけど、今回も作業で終わった... 次の日、 開発チームから一件のメンションが。

Slide 20

Slide 20 text

用意周到な準備 - 2023/10/20 ゆる SRE 勉強会 #2 - どのチームがどのサービスを保有してるのかわからないから、 全てのサービスに対して、どのファイルのどの箇所を修正すればいいかを洗い出し ● Helm リポジトリをサーフィン ● pluto という非推奨 API 使用を検出するツールを駆使 https://github.com/FairwindsOps/pluto 問い合わせなどにも対応し、なんとかアプデまでに修正 Done. アプデも特に問題なく終了。調整が大変だったけど、今回も作業で終わった... 「API 更新したのに、デプロイに失敗します。」

Slide 21

Slide 21 text

● 複数チームから デプロイエラーが出ると鬼メンション ● 確かにマニフェストは更新されている。 でもデプロイすると非推奨 API を使っているというエラーが... v1.25 に上げたときに起きた想定外の事象 - 2023/10/20 ゆる SRE 勉強会 #2 - STDERR: Error: UPGRADE FAILED: unable to build kubernetes objects from current release manifest: resource mapping not found for name: "***" namespace: "***" from "": no matches for kind "CronJob" in version "batch/v1beta1" ensure CRDs are installed first

Slide 22

Slide 22 text

● 調査をすると、開発チームには二通りのアプリデプロイ方法 ○ Helmfile コマンドを使ったデプロイ ○ Argo CD を使ったデプロイ ● 鬼メンションをしてきたのは Helmfile コマンド使ってるチーム ○ Argo CD 経由のチームは無傷だった v1.25 に上げたときに起きた想定外の事象 - 2023/10/20 ゆる SRE 勉強会 #2 -

Slide 23

Slide 23 text

原因と解決方法 - 2023/10/20 ゆる SRE 勉強会 #2 - (マニアック余談...) ※ 常識かもしれません Helmfile コマンドでは、 前回のデプロイ時の履歴(マニフェスト)を参照する。 その履歴に 廃止になった API の痕跡が残ってしまっていた。 => Helmfile が内部で、廃止 API を呼ぼうとして怒られていた。。。

Slide 24

Slide 24 text

原因と解決方法 - 2023/10/20 ゆる SRE 勉強会 #2 - Helmfile コマンドでは、 前回のデプロイ時の履歴(マニフェスト)を参照する。 その履歴に 廃止になった API の痕跡が残ってしまっていた。 Helmfile が内部で、廃止 API を呼ぼうとして怒られていた。。。 そんなの知らないよ...

Slide 25

Slide 25 text

原因と解決方法 - 2023/10/20 ゆる SRE 勉強会 #2 - 「「「Helm の公式ドキュメントに記載がありました。」」」 https://helm.sh/docs/topics/kubernetes_apis/

Slide 26

Slide 26 text

原因と解決方法 - 2023/10/20 ゆる SRE 勉強会 #2 - 「「「Helm の公式ドキュメントに記載がありました。」」」 https://helm.sh/docs/topics/kubernetes_apis/ これによると、履歴に廃止 API が残ってデプロイが失敗してしまうことは仕様

Slide 27

Slide 27 text

原因と解決方法 - 2023/10/20 ゆる SRE 勉強会 #2 - 「「「Helm の公式ドキュメントに記載がありました。」」」 https://helm.sh/docs/topics/kubernetes_apis/ これによると、履歴に廃止 API が残ってデプロイが失敗してしまうことは仕様 推奨のアプデ方法としては、   (イ) アプデ前に推奨 API でデプロイを行う   (ロ) 万が一 (イ) の対応前にアプデしてしまっていたら、      "履歴" の 廃止 API バージョンの記述を削除してから再度デプロイを行う

Slide 28

Slide 28 text

原因と解決方法 - 2023/10/20 ゆる SRE 勉強会 #2 - 「「「Helm の公式ドキュメントに記載がありました。」」」 https://helm.sh/docs/topics/kubernetes_apis/ これによると、履歴に廃止 API が残ってデプロイが失敗してしまうことは仕様 推奨のアプデ方法としては、   (イ) アプデ前に推奨 API でデプロイを行う   (ロ) 万が一 (イ) の対応前にアプデしてしまっていたら、      "履歴" の 廃止 API バージョンの記述を削除してから再度デプロイを行う   => うまくいきました 🤗 🤗 🤗

Slide 29

Slide 29 text

今回の泥イベントでの気付き - 2023/10/20 ゆる SRE 勉強会 #2 - ● 各チームでデプロイ方式が混在している(大規模で混沌化) ○ 検討中だけど、Argo CD の運用に寄せていきたい(SSoT) ● 今回は "testing" 環境だったので、 若干燃えたけど、ここで検知できたのは正攻法としてポジティブに捉える ● Production 環境アプデの際には、 Helmfile コマンドを使っているチームは、 アプデ前に新しいバージョンでデプロイすること を周知していく

Slide 30

Slide 30 text

● 今回の LT では、 "Kubernetes 運用ツラミ 100 選" のうち 1 つをご紹介しました 😉 & 今回の事象に関しては、Kubernetes はあんまり悪くない ● 次は "Kubernetes 運用のウレシミ" 話ができれば!(願望) まとめ - 2023/10/20 ゆる SRE 勉強会 #2 -

Slide 31

Slide 31 text

記載されている会社名、商品名、 またはサービス名は、各社の商標登録または商標です。 - 2023/10/20 ゆる SRE 勉強会 #2 -