Slide 1

Slide 1 text

© 2025 Wantedly, Inc. 段階的リリースを実現する kube canary Wantedly Tech Night #8 2025-02-25 - Hayato Kawai (@fohte)

Slide 2

Slide 2 text

© 2025 Wantedly, Inc. 自己紹介 名前 Fohte (ふぉーて) 本名: 川井 颯人 (Hayato Kawai) 所属 ウォンテッドリー株式会社 Infra Squad 趣味 🎮 🎹

Slide 3

Slide 3 text

© 2025 Wantedly, Inc. 持ち帰ってほしいこと ● canary release というデプロイ手法が便利 ○ ウォンテッドリーではこれを実現するためのツールを内製している

Slide 4

Slide 4 text

© 2025 Wantedly, Inc. canary release とはなにか

Slide 5

Slide 5 text

© 2025 Wantedly, Inc. canary release って何? ● 新しいバージョンの実装を、 本番環境に部分的に反映していく リリース手法 ○ 本番稼動している既存バージョンのトラフィックの数 % だけ新しいバージョンのものを流す ● 「カナリアリリース」とも呼ばれる 新 バージョン 旧来 バージョン エンドユーザー 3 % 97 %

Slide 6

Slide 6 text

© 2025 Wantedly, Inc. どういうときに便利か ● 影響範囲の広い変更をリリースしたいとき ○ 仮にバグがあったとしてもユーザー影響が最小限に抑えられる ● テスト環境で検証しきれないとき ○ 本番で検証したほうがよい場面もある ■ 本番にしかデータがない、リアルユーザーの操作が再現しきれない等

Slide 7

Slide 7 text

© 2025 Wantedly, Inc. どういうときに便利かざっくりとした例 ● パッケージ/ライブラリのバージョンを上げるとき ● 大きなリリースをしようとしているとき ● 影響が見えていなくて不安なとき

Slide 8

Slide 8 text

© 2025 Wantedly, Inc. 実際に便利だった事例 ● Ruby, Rails をアップグレードするとき ○ 影響範囲が大きい & 全てを調査するのは大変 ○ テスト環境でざっくり確認して問題なさそう => 本番で検証というフロー

Slide 9

Slide 9 text

© 2025 Wantedly, Inc. kube canary の利用イメージ

Slide 10

Slide 10 text

© 2025 Wantedly, Inc. ウォンテッドリーでは kube canary コマンドを用意している ● kube canary start で に指定したもの が canary release (デプロイ) される ○ rev: ブランチ、commit hash master を canary release する例

Slide 11

Slide 11 text

© 2025 Wantedly, Inc. 工夫ポイント: モニタリング用の dashboard を用意している Datadog に canary release の 状況を確認するための dashboard を用意 canary start 時に dashboard のリンクを出して アクセスしやすいように

Slide 12

Slide 12 text

© 2025 Wantedly, Inc. k8s レイヤーでのモニタリング ● 内部的には canary pod が 1 つ立っているだけなので 普通の pod と同じ debug ができる ○ kubectl get po や kubectl log で見られる (普通の pod と同じ)

Slide 13

Slide 13 text

© 2025 Wantedly, Inc. kube canary stop ● kube canary stop で canary release を終了する ○ canary release で問題ないことを確認できたら canary stop → master に merge してデプロイする、というイメージ canary stop する例

Slide 14

Slide 14 text

© 2025 Wantedly, Inc. kube canary の内部実装

Slide 15

Slide 15 text

© 2025 Wantedly, Inc. kube canary start をしてからユーザーからリクエストされるまでの流れ

Slide 16

Slide 16 text

© 2025 Wantedly, Inc. kube canary start をしてからユーザーからリクエストされるまでの流れ

Slide 17

Slide 17 text

© 2025 Wantedly, Inc. canary stop の流れ

Slide 18

Slide 18 text

© 2025 Wantedly, Inc. deployment-duplicator ● 既存の Deployment に少しパッチを当てた Deployment を複製する custom controller ○ どういうパッチを当てるかは DeploymentCopy manifest に書く ○ この manifest を呼んで deployment-duplicator が Deployment を複製 実装は公開しています https://github.com/wantedly/deployment-duplicator

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

© 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 %) になる エンドユーザー

Slide 21

Slide 21 text

© 2025 Wantedly, Inc. 持ち帰ってほしいこと ● canary release というデプロイ手法が便利 ○ ウォンテッドリーではこれを実現するためのツールを内製している