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
72
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
EKSバージョンアップ工数削減大作戦! ~Terraform化とE2Eテスト自動化~
hanayo04
1
290
2023年度版! Chatwork流Kubernetesの運用方法
hanayo04
0
1.2k
Other Decks in Technology
See All in Technology
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
350
開発生産性向上! 育成を「改善」と捉えるエンジニア育成戦略
shoota
2
730
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.5k
サーバーなしでWordPress運用、できますよ。
sogaoh
PRO
0
150
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
5
320
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
260
20240513 - 框裡框外_文學院學生如何在AI世代安身立命 @ 淡江大學
dpys
0
430
ガバナンスを支える新サービス / New Services to Support Governance
sejima1105
1
590
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
230
AWS re:Invent 2024 Recap in ZOZO - Serverless で好きなものをしゃべってみた
chongmyungpark
0
590
Working as a Server-side Engineer at LY Corporation
lycorp_recruit_jp
0
460
クレカ・銀行連携機能における “状態”との向き合い方 / SmartBank Engineer LT Event
smartbank
2
120
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
521
39k
How GitHub (no longer) Works
holman
311
140k
Gamification - CAS2011
davidbonilla
80
5.1k
Become a Pro
speakerdeck
PRO
26
5.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
Documentation Writing (for coders)
carmenintech
67
4.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
How to Ace a Technical Interview
jacobian
276
23k
The Cost Of JavaScript in 2023
addyosmani
46
7k
Fireside Chat
paigeccino
34
3.1k
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