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
EKSとArgo Rolloutsで実現する「Chatwork」の新リリースプロセス
Search
hanayo04
November 15, 2024
Technology
0
180
EKSとArgo Rolloutsで実現する「Chatwork」の新リリースプロセス
2024/11/15 実践DevOps! 〜KAGとkubellの取り組み〜 でお話しした「EKSとArgo Rolloutsで実現する「Chatwork」の新リリースプロセス」の資料です
hanayo04
November 15, 2024
Tweet
Share
More Decks by hanayo04
See All by hanayo04
「Chatwork」のEKS環境を支えるhelmfileを使用したマニフェスト管理術
hanayo04
1
820
EKSバージョンアップ工数削減大作戦! ~Terraform化とE2Eテスト自動化~
hanayo04
1
490
2023年度版! Chatwork流Kubernetesの運用方法
hanayo04
0
1.5k
Other Decks in Technology
See All in Technology
実践データベース設計 ①データベース設計概論
recruitengineers
PRO
3
370
AIエージェントの開発に必須な「コンテキスト・エンジニアリング」とは何か──プロンプト・エンジニアリングとの違いを手がかりに考える
masayamoriofficial
0
410
ZOZOTOWNフロントエンドにおけるディレクトリの分割戦略
zozotech
PRO
18
5.5k
Claude Code x Androidアプリ 開発
kgmyshin
1
600
我々は雰囲気で仕事をしている / How can we do vibe coding as well
naospon
2
220
LLM時代の検索とコンテキストエンジニアリング
shibuiwilliam
2
1.1k
Understanding Go GC #coefl_go_jp
bengo4com
0
1.1k
実践アプリケーション設計 ②トランザクションスクリプトへの対応
recruitengineers
PRO
3
360
KiroでGameDay開催してみよう(準備編)
yuuuuuuu168
1
140
GitHub Copilot coding agent を推したい / AIDD Nagoya #1
tnir
4
4.7k
Preferred Networks (PFN) とLLM Post-Training チームの紹介 / 第4回 関東Kaggler会 スポンサーセッション
pfn
PRO
1
240
JOAI発表資料 @ 関東kaggler会
joai_committee
1
370
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Navigating Team Friction
lara
189
15k
Documentation Writing (for coders)
carmenintech
73
5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
570
Into the Great Unknown - MozCon
thekraken
40
2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Writing Fast Ruby
sferik
628
62k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
A Modern Web Designer's Workflow
chriscoyier
695
190k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.6k
Transcript
EKSとArgo Rolloutsで実現する 「Chatwork」の新リリースプロセス 株式会社 kubell コミュニケーションプラットフォーム本部 SRE部 桝谷 花世 2024年11月15日
自己紹介 桝谷 花世 (Masutani Hanayo) 所属 株式会社 kubell コミュニケーションプラットフォーム本部 SRE部 ~2023/09
SIerにて主にインフラ領域を担当 2023/10~ 株式会社kubell SRE部に入社 主にKubernetes周辺を担当 x: hnchn87
「Chatwork」とは ※※Nielsen NetView 及びNielsen Mobile NetView Customized Report 2024年4月度調べ月次利用者(MAU:Monthly Active
User)調査。 調査対象はChatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む41サービスを株式会社kubellにて選定。 効率的に情報共有できる グループチャット 仕事の見える化ができる タスク管理 見落としがなくなる ファイル管理 いつでも会議ができる ビデオ/音声通話
通常リリースフロー App Manifest EKS(app) EKS (manager) Manifest 1.Master merge 3.Push
2.Build 4.Update 5. Polling 7.Apply 開発者 6. Press the Sync button Service Pod Pod Pod Pod Pod Pod ver.1 ver.2 Rolling Update
問題点 何か問題があった場合に切り戻すのに時間がかかる 数百台のPodが起動している&Rolling Updateのため、 全てのPodが入れ替わるまでには時間がかかってしまう カナリアリリースがしたい ユーザー影響の大きい変更のリリース時は
カナリアリリース時のリリースフロー App Manifest EKS(app) EKS (manager) Manifest 1.Master merge 3.Push
2.Build 5. Polling 6.Apply 開発者 Service Pod Pod Pod ver.1 Service Pod Pod Pod SRE 4.Create ver.2 SRE 7.Modify the weight
問題点 気軽にカナリアリリースを選択出来ない 手順が煩雑なのでSREなしでは実施が難しい 準備も当日の実施も工数を使うので気軽にカナリアリリースを選択出来ない もっと気軽にカナリアリリースが出来たらいいなぁ・・・
Argo Rolloutsを導入 App Manifest EKS(app) EKS (manager) Manifest 1.Master merge
3.Push 2.Build 4.Update 5. Polling 7.Apply 開発者 6. Press the Sync button Service Pod Pod Pod Pod ver.1 ver.2 Argo Rollouts Canary
Argo Rolloutsとは Kubernetes上でのBlue-Green Deploymentやカナリアリリースなどの高度なデプロイメント戦略を サポートするためのオープンソースツール Argoプロジェクトの一部であり、クラウドネイティブなアプリケーションのデプロイメントをより柔軟か つ安全に行うための機能を提供する 「Chatwork」では既に Argo CDを使用していたため
親和性の高い Argo Rolloutsを カナリアリリースを実現するためのツールとして導入
カナリアリリース実現までに必要なこと Argo Rolloutsの導入 Deployment → Rolloutへの移行 開発者への使用方法の周知 STEP 1 STEP
2 STEP 3
カナリアリリース実現までに必要なこと Argo Rolloutsの導入 Deployment → Rolloutへの移行 開発者への使用方法の周知 STEP 1 STEP
2 STEP 3
Argo Rolloutsの導入 Argo RolloutsをInstall 各ClusterにArgo Rolloutsを公式のHelmを使用してInstall Argo Rolloutsのダッシュボードは無効化 開発者が見る場所を増やしたくなかったため values.yaml
dashboard: # -- Deploy dashboard server enabled: false Argo CDのダッシュボードに Argo Rolloutsのダッシュボードを統合 Argo CDのHelmのextensionsを有効にし、Argo Rolloutsのextensionを追加 extensions: enabled: true extensionList: - name: rollout-extension env: - name: EXTENSION_URL value: https://github.com/argoproj-labs/rollout-extension/releases/download/v0.3.5/extension.tar 指定方法がArgo CDのversionで 結構変わるので注意
Argo Rolloutsの導入 Rolloutリソースが作れるようになり、 Argo CDのダッシュボードでROLLOUTタブが追加された
カナリアリリース実現までに必要なこと Argo Rolloutsの導入 Deployment → Rolloutへの移行 開発者への使用方法の周知 STEP 1 STEP
2 STEP 3
Deployment → Rolloutへの移行 Rolloutリソースを作成 Deploymentの設定を参照したいのでWorkloadRefを使用 作成時はreplicaCountは0 apiVersion: argoproj.io/v1alpha1 kind: Rollout
spec: replicaCount: 0 strategy: canary: maxSurge: 25% maxUnavailable: 10% step: - setWeight: 25 - pause: {} - setWeight: 75 - pause: { duration: 30s } - setWeight: 100 workloadRef: apiVersion: apps/v1 kind: Deployment name: app stepブロックを定義しなければ RollingUpdateの挙動にすることも可能 apiVersion: apps/v1 kind: Deployment metadata: name: app labels:xxx spec: image: xxx replicaCount: 4 strategy: RollingUpdate: maxSurge: 25% maxUnavailable: 10% type: RollingUpdate
Deployment → Rolloutへの移行 DeploymentのHPAを停止 移行時に予期せぬAutoScaleが発生すると嫌なのでHPAを停止 RolloutのReplica数を増やし、 Rolloutリソースを起動 100%ではなくまずは全体の25%分を起動し、アクセスを流す メトリクスやログを確認し、問題がなさそうか確認 DeploymentのReplica数を減らす
Rolloutを増やしただけDeploymentを減らす メトリクスやログを確認し、問題がなさそうか確認 apiVersion: argoproj.io/v1alpha1 kind: Rollout spec: replicaCount: 1 strategy: canary: maxSurge: 25% maxUnavailable: 10% step: - setWeight: 25 - pause: {} - setWeight: 75 - pause: { duration: 30s } - setWeight: 100 workloadRef: apiVersion: apps/v1 kind: Deployment name: app
Deployment → Rolloutへの移行 全てがRolloutになるまで少しずつ Rolloutの割合を増やしていく RolloutのHPAを有効化 全てがRolloutに入れ替わったらHPAの参照先をRolloutにし、有効化 apiVersion: autoscaling/v2 kind:
HorizontalPodAutoscaler spec: scaleTargetRef: apiVersion: argoproj.io/v1alpha1 kind: Rollout name: app 移行完了! メトリクスやログを確認し問題なければ移行完了
カナリアリリースフロー カナリアリリースのステップを定義 開発者がやりたいカナリアリリースのステップを記載 apiVersion: argoproj.io/v1alpha1 kind: Rollout spec: ~~ #
step: # - setWeight: 25 # - pause: {} # - setWeight: 75 # - pause: { duration: 30s } # - setWeight: 100 apiVersion: argoproj.io/v1alpha1 kind: Rollout spec: ~~ step: - setWeight: 25 - pause: {} - setWeight: 75 - pause: { duration: 30s } - setWeight: 100 通常時はRolling Updateにしたいの でstepブロックはコメントアウト カナリアリリースしたい場合、 stepのコメントアウトを外し、 やりたい方法でstepを記載する
カナリアリリースフロー ArgoCDのダッシュボードから適用 yamlファイルをマージするとArgoCD側で変更を検知するので内容を確認し適用 適用したらダッシュボードのROLLOUTタブでSTEPが確認できるようになる
カナリアリリースフロー App Manifest EKS(app) EKS (manager) Manifest 1.Master merge 3.Push
2.Build 4.Update 5. Polling 7.Apply 開発者 6. Press the Sync button Service Pod Pod Pod Pod ver.1 ver.2 通常フローと同じ手順でリリース
カナリアリリースフロー ArgoCDのダッシュボードからカナリアリリースの Stepを進める 中断(前のverに戻す) 最後まで進める 再起動 次のStepに進める
カナリアリリース実現までに必要なこと Argo Rolloutsの導入 Deployment → Rolloutへの移行 開発者への使用方法の周知 STEP 1 STEP
2 STEP 3
開発者への使用方法の周知 チャット・定例での周知 &手順書の公開 チャット・定例でカナリアリリースが簡単にできるようになった旨を周知&手順書の公開をしたが、実 際には使ってもらえず。。。 各チームへデモを実施 簡単なデモを実施し、実際の作業を見てもらった すると、便利そう!という声をもらえたり、実際に使用してくれるチームも出てきた
今後の展望 StepのOn/OffをArgoCDのダッシュボード上で出来るように 「Chatwork」では1つのApplicationを複数チームが触っているかつ、 開発チームは基本的にはArgo CDのダッシュボードを触るだけでリリースを行っているため StepのOn/Offや定義の変更をArgo CDのダッシュボード上で完結出来るようになれば もっと多くのチームに使用してもらうことが出来そう Datadogと連携 「Chatwork」ではDatadogを監視ツールとして採用している
Argo RolloutsとDatadogを連携し、メトリクスベースでステップを進められるようにしたい
働くをもっと楽しく、創造的に 25