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

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

Hayato Kawai
February 25, 2025
64

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

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

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 というデプロイ手法が便利 ◦

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