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
RAID6 を楔形文字で組んで現代人を怖がらせましょう(実装編)
mimifuwa
0
290
LLMエージェント時代に適応した開発フロー
hiragram
1
380
Goss: New Production-Ready Go Binding for Faiss #coefl_go_jp
bengo4com
0
1.1k
2025新卒研修・Webアプリケーションセキュリティ #弁護士ドットコム
bengo4com
3
10k
メルカリIBIS:AIが拓く次世代インシデント対応
0gm
2
520
夢の印税生活 / Life on Royalties
tmtms
0
280
Gaze-LLE: Gaze Target Estimation via Large-Scale Learned Encoders
kzykmyzw
0
310
イオン店舗一覧ページのパフォーマンスチューニング事例 / Performance tuning example for AEON store list page
aeonpeople
1
220
Amazon Bedrock AgentCore でプロモーション用動画生成エージェントを開発する
nasuvitz
6
400
モノレポにおけるエラー管理 ~Runbook自動生成とチームメンションの最適化
biwashi
0
540
ZOZOTOWNフロントエンドにおけるディレクトリの分割戦略
zozotech
PRO
14
4.9k
Yahoo!ニュースにおけるソフトウェア開発
lycorptech_jp
PRO
0
280
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
431
65k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
A Modern Web Designer's Workflow
chriscoyier
695
190k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
183
54k
The Cult of Friendly URLs
andyhume
79
6.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Documentation Writing (for coders)
carmenintech
73
5k
A Tale of Four Properties
chriscoyier
160
23k
Raft: Consensus for Rubyists
vanstee
140
7.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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