Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetesアップデートのツラミから学んだデプロイ手順のユガミ / Challenge...

Kubernetesアップデートのツラミから学んだデプロイ手順のユガミ / Challenges Learned from Kubernetes Update

こちらに参加させていただいたときの LT 資料です。
https://yuru-sre.connpass.com/event/299001/

逆井(さかさい)

October 20, 2023
Tweet

More Decks by 逆井(さかさい)

Other Decks in Technology

Transcript

  1. 自己紹介 - 2023/10/20 ゆる SRE 勉強会 #2 - 逆 井

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

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

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

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

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

    アップデートまでに 全スクラムチームに依頼、対応をしてもらう必要 がある • チームもサービスもたくさんある • (SRE チームで修正しきるのは不可能...)
  8. ▪ アップデートまでに 全スクラムチームに依頼、対応をしてもらう必要 がある • チームもサービスもたくさんある • (SRE チームで修正しきるのは不可能...) v1.25

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

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

    • 10 チーム程度。各チーム平均 10 個強のサービスを保有 • (SRE チームで修正しきるのは不可能...) マニフェストは Helm を使って、単一のリポジトリで管理している。 • もしかしたら、各チーム自主的に修正してくれてるかも...?(淡い期待) ※ Kubernetes が廃止予定 API 使ってるとデプロイ時に警告してくれる • 使っていた。ほとんどのサービスで非推奨 API があったンゴ やるしかねぇ
  11. 用意周到な準備(フラグ) - 2023/10/20 ゆる SRE 勉強会 #2 - ① どのチームがどのサービスを保有してるのかわからないから、

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

    全てのサービスに対して、どのファイルのどの箇所を修正すればいいかを整理 • Helm リポジトリをフル目スキャン • pluto という非推奨 API 使用を検出するツールを駆使 https://github.com/FairwindsOps/pluto ② 10程度チームに依頼。問い合わせを捌くマンになる
  13. ① どのチームがどのサービスを保有してるのかわからないから、 全てのサービスに対して、どのファイルのどの箇所を修正すればいいかを整理 • Helm リポジトリをフル目スキャン • pluto という非推奨 API

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

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

    • Helm リポジトリをサーフィン • pluto という非推奨 API 使用を検出するツールを駆使 https://github.com/FairwindsOps/pluto 問い合わせなどにも対応し、なんとかアプデまでに修正 Done. アプデも特に問題なく終了。調整が大変だったけど、今回も作業で終わった... 「API 更新したのに、デプロイに失敗します。」
  16. • 複数チームから デプロイエラーが出ると鬼メンション • 確かにマニフェストは更新されている。 でもデプロイすると非推奨 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
  17. • 調査をすると、開発チームには二通りのアプリデプロイ方法 ◦ Helmfile コマンドを使ったデプロイ ◦ Argo CD を使ったデプロイ •

    鬼メンションをしてきたのは Helmfile コマンド使ってるチーム ◦ Argo CD 経由のチームは無傷だった v1.25 に上げたときに起きた想定外の事象 - 2023/10/20 ゆる SRE 勉強会 #2 -
  18. 原因と解決方法 - 2023/10/20 ゆる SRE 勉強会 #2 - (マニアック余談...) ※

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

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

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

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

    https://helm.sh/docs/topics/kubernetes_apis/ これによると、履歴に廃止 API が残ってデプロイが失敗してしまうことは仕様 推奨のアプデ方法としては、   (イ) アプデ前に推奨 API でデプロイを行う   (ロ) 万が一 (イ) の対応前にアプデしてしまっていたら、      "履歴" の 廃止 API バージョンの記述を削除してから再度デプロイを行う   => うまくいきました 🤗 🤗 🤗
  23. 今回の泥イベントでの気付き - 2023/10/20 ゆる SRE 勉強会 #2 - • 各チームでデプロイ方式が混在している(大規模で混沌化)

    ◦ 検討中だけど、Argo CD の運用に寄せていきたい(SSoT) • 今回は "testing" 環境だったので、 若干燃えたけど、ここで検知できたのは正攻法としてポジティブに捉える • Production 環境アプデの際には、 Helmfile コマンドを使っているチームは、 アプデ前に新しいバージョンでデプロイすること を周知していく
  24. • 今回の LT では、 "Kubernetes 運用ツラミ 100 選" のうち 1

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