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

段階的リリースを実現する kube canary

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Hayato Kawai Hayato Kawai
February 25, 2025
230

段階的リリースを実現する kube canary

Wantedly Tech Night #8 での登壇資料です
イベントページ: https://wantedly.connpass.com/event/341010/

Avatar for Hayato Kawai

Hayato Kawai

February 25, 2025
Tweet

Transcript

  1. © 2025 Wantedly, Inc. 自己紹介 名前 Fohte (ふぉーて) 本名: 川井

    颯人 (Hayato Kawai) 所属 ウォンテッドリー株式会社 Infra Squad 趣味 🎮 🎹
  2. © 2025 Wantedly, Inc. 持ち帰ってほしいこと • canary release というデプロイ手法が便利 ◦

    ウォンテッドリーではこれを実現するためのツールを内製している
  3. © 2025 Wantedly, Inc. canary release って何? • 新しいバージョンの実装を、 本番環境に部分的に反映していく

    リリース手法 ◦ 本番稼動している既存バージョンのトラフィックの数 % だけ新しいバージョンのものを流す • 「カナリアリリース」とも呼ばれる 新 バージョン 旧来 バージョン エンドユーザー 3 % 97 %
  4. © 2025 Wantedly, Inc. どういうときに便利か • 影響範囲の広い変更をリリースしたいとき ◦ 仮にバグがあったとしてもユーザー影響が最小限に抑えられる •

    テスト環境で検証しきれないとき ◦ 本番で検証したほうがよい場面もある ▪ 本番にしかデータがない、リアルユーザーの操作が再現しきれない等
  5. © 2025 Wantedly, Inc. 実際に便利だった事例 • Ruby, Rails をアップグレードするとき ◦

    影響範囲が大きい & 全てを調査するのは大変 ◦ テスト環境でざっくり確認して問題なさそう => 本番で検証というフロー
  6. © 2025 Wantedly, Inc. ウォンテッドリーでは kube canary コマンドを用意している • kube

    canary start <rev> で <rev> に指定したもの が canary release (デプロイ) される ◦ rev: ブランチ、commit hash master を canary release する例
  7. © 2025 Wantedly, Inc. 工夫ポイント: モニタリング用の dashboard を用意している Datadog に

    canary release の 状況を確認するための dashboard を用意 canary start 時に dashboard のリンクを出して アクセスしやすいように
  8. © 2025 Wantedly, Inc. k8s レイヤーでのモニタリング • 内部的には canary pod

    が 1 つ立っているだけなので 普通の pod と同じ debug ができる ◦ kubectl get po や kubectl log <pod> で見られる (普通の pod と同じ)
  9. © 2025 Wantedly, Inc. kube canary stop • kube canary

    stop で canary release を終了する ◦ canary release で問題ないことを確認できたら canary stop → master に merge してデプロイする、というイメージ canary stop する例
  10. © 2025 Wantedly, Inc. deployment-duplicator • 既存の Deployment に少しパッチを当てた Deployment

    を複製する custom controller ◦ どういうパッチを当てるかは DeploymentCopy manifest に書く ◦ この manifest を呼んで deployment-duplicator が Deployment を複製 実装は公開しています https://github.com/wantedly/deployment-duplicator
  11. © 2025 Wantedly, Inc. 補足: 現状の canary release の設計は改善の余地がある •

    本当は右の図のように canary の 割合をコントロールしたい 新 バージョン 旧来 バージョン (master) エンドユーザー 3 % 97 %
  12. © 2025 Wantedly, Inc. namespace 補足: 現状の canary release の設計は改善の余地がある

    • 実際はただ pod が立っているだけ ◦ たくさんある pod からランダムにリクエストされる ◦ 旧来バージョンの pod の中に 1 pod だけ canary pod が立つ ◦ つまり: もともと 40 pods ある namespace だと 1/40 (2.5 %) の確率で canary にリクエストされる ▪ 3 pods なら 1/3 (33.3 %) になる エンドユーザー
  13. © 2025 Wantedly, Inc. 持ち帰ってほしいこと • canary release というデプロイ手法が便利 ◦

    ウォンテッドリーではこれを実現するためのツールを内製している