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
170
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
650
EKSバージョンアップ工数削減大作戦! ~Terraform化とE2Eテスト自動化~
hanayo04
1
480
2023年度版! Chatwork流Kubernetesの運用方法
hanayo04
0
1.5k
Other Decks in Technology
See All in Technology
ユーザー理解の爆速化とPdMの価値
kakehashi
PRO
1
110
【CEDEC2025】LLMを活用したゲーム開発支援と、生成AIの利活用を進める組織的な取り組み
cygames
PRO
1
1.7k
マルチモーダル基盤モデルに基づく動画と音の解析技術
lycorptech_jp
PRO
2
270
Amazon CloudWatchのメトリクスインターバルについて / Metrics interval matters
ymotongpoo
3
290
会社もクラウドも違うけど 通じたコスト削減テクニック/Cost optimization strategies effective regardless of company or cloud provider
aeonpeople
2
380
TypeScript 上達の道
ysknsid25
23
4.8k
Kiro Hookを Terraformで検証
ao_inoue
0
140
Turn Your Community into a Fundraising Catalyst for Black Philanthropy Month
auctria
PRO
0
200
SAE J1939シミュレーション環境構築
daikiokazaki
1
190
大規模イベントを支える ABEMA の アーキテクチャ 変遷 2025
nagapad
5
520
AI時代の知識創造 ─GeminiとSECIモデルで読み解く “暗黙知”と創造の境界線
nyagasan
0
160
DatabricksのOLTPデータベース『Lakebase』に詳しくなろう!
inoutk
0
160
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
53
7.7k
Adopting Sorbet at Scale
ufuk
77
9.5k
Practical Orchestrator
shlominoach
189
11k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
860
Code Reviewing Like a Champion
maltzj
524
40k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Bash Introduction
62gerente
613
210k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
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