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

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

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 -
    Kubernetes アップデートのツラミで気付いた
    デプロイ手順のユガミ
    #yurusre
    逆井(SAKASAI) @ k6s4i53rx
    逆井(さかさい) 啓佑

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. 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
    が廃止になった

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  21. ● 複数チームから デプロイエラーが出ると鬼メンション
    ● 確かにマニフェストは更新されている。
    でもデプロイすると非推奨 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide