Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
段階的リリースを実現する kube canary
Search
Hayato Kawai
February 25, 2025
1
200
段階的リリースを実現する kube canary
Wantedly Tech Night #8 での登壇資料です
イベントページ:
https://wantedly.connpass.com/event/341010/
Hayato Kawai
February 25, 2025
Tweet
Share
More Decks by Hayato Kawai
See All by Hayato Kawai
Data Access Control で実現するより細かい権限制御
fohte
0
120
Datadog が支える Wantedly のシステム運用
fohte
0
52
Devin や Cursor などの生成 AI ツール導入に向けて何を取り組んだのか
fohte
2
270
Datadog Network Monitoring を活用して NAT Gateway 課金を 80 % 削減した話
fohte
2
690
Trace Metrics と Istio Metrics でサービス健全性を監視する
fohte
0
480
巨大 tfstate に立ち向かう技術
fohte
1
970
RubyKaigi で LT 初登壇したきっかけと感想
fohte
1
1.3k
Datadog Logs を活用して SLO 監視基盤を構築する
fohte
3
2.7k
The Journey of rubocop-daemon into RuboCop
fohte
1
1.5k
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
A designer walks into a library…
pauljervisheath
209
24k
Making Projects Easy
brettharned
120
6.4k
Music & Morning Musume
bryan
46
6.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Side Projects
sachag
455
43k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Rails Girls Zürich Keynote
gr2m
95
14k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Transcript
© 2025 Wantedly, Inc. 段階的リリースを実現する kube canary Wantedly Tech Night
#8 2025-02-25 - Hayato Kawai (@fohte)
© 2025 Wantedly, Inc. 自己紹介 名前 Fohte (ふぉーて) 本名: 川井
颯人 (Hayato Kawai) 所属 ウォンテッドリー株式会社 Infra Squad 趣味 🎮 🎹
© 2025 Wantedly, Inc. 持ち帰ってほしいこと • canary release というデプロイ手法が便利 ◦
ウォンテッドリーではこれを実現するためのツールを内製している
© 2025 Wantedly, Inc. canary release とはなにか
© 2025 Wantedly, Inc. canary release って何? • 新しいバージョンの実装を、 本番環境に部分的に反映していく
リリース手法 ◦ 本番稼動している既存バージョンのトラフィックの数 % だけ新しいバージョンのものを流す • 「カナリアリリース」とも呼ばれる 新 バージョン 旧来 バージョン エンドユーザー 3 % 97 %
© 2025 Wantedly, Inc. どういうときに便利か • 影響範囲の広い変更をリリースしたいとき ◦ 仮にバグがあったとしてもユーザー影響が最小限に抑えられる •
テスト環境で検証しきれないとき ◦ 本番で検証したほうがよい場面もある ▪ 本番にしかデータがない、リアルユーザーの操作が再現しきれない等
© 2025 Wantedly, Inc. どういうときに便利かざっくりとした例 • パッケージ/ライブラリのバージョンを上げるとき • 大きなリリースをしようとしているとき •
影響が見えていなくて不安なとき
© 2025 Wantedly, Inc. 実際に便利だった事例 • Ruby, Rails をアップグレードするとき ◦
影響範囲が大きい & 全てを調査するのは大変 ◦ テスト環境でざっくり確認して問題なさそう => 本番で検証というフロー
© 2025 Wantedly, Inc. kube canary の利用イメージ
© 2025 Wantedly, Inc. ウォンテッドリーでは kube canary コマンドを用意している • kube
canary start <rev> で <rev> に指定したもの が canary release (デプロイ) される ◦ rev: ブランチ、commit hash master を canary release する例
© 2025 Wantedly, Inc. 工夫ポイント: モニタリング用の dashboard を用意している Datadog に
canary release の 状況を確認するための dashboard を用意 canary start 時に dashboard のリンクを出して アクセスしやすいように
© 2025 Wantedly, Inc. k8s レイヤーでのモニタリング • 内部的には canary pod
が 1 つ立っているだけなので 普通の pod と同じ debug ができる ◦ kubectl get po や kubectl log <pod> で見られる (普通の pod と同じ)
© 2025 Wantedly, Inc. kube canary stop • kube canary
stop で canary release を終了する ◦ canary release で問題ないことを確認できたら canary stop → master に merge してデプロイする、というイメージ canary stop する例
© 2025 Wantedly, Inc. kube canary の内部実装
© 2025 Wantedly, Inc. kube canary start をしてからユーザーからリクエストされるまでの流れ
© 2025 Wantedly, Inc. kube canary start をしてからユーザーからリクエストされるまでの流れ
© 2025 Wantedly, Inc. canary stop の流れ
© 2025 Wantedly, Inc. deployment-duplicator • 既存の Deployment に少しパッチを当てた Deployment
を複製する custom controller ◦ どういうパッチを当てるかは DeploymentCopy manifest に書く ◦ この manifest を呼んで deployment-duplicator が Deployment を複製 実装は公開しています https://github.com/wantedly/deployment-duplicator
© 2025 Wantedly, Inc. 補足: 現状の canary release の設計は改善の余地がある •
本当は右の図のように canary の 割合をコントロールしたい 新 バージョン 旧来 バージョン (master) エンドユーザー 3 % 97 %
© 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 %) になる エンドユーザー
© 2025 Wantedly, Inc. 持ち帰ってほしいこと • canary release というデプロイ手法が便利 ◦
ウォンテッドリーではこれを実現するためのツールを内製している