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
77
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
320
2023年度版! Chatwork流Kubernetesの運用方法
hanayo04
0
1.3k
Other Decks in Technology
See All in Technology
Tokyo RubyKaigi 12 - Scaling Ruby at GitHub
jhawthorn
2
210
横断SREの立ち上げと、AWSセキュリティへの取り組みの軌跡
rvirus0817
3
4.5k
Makuake*UPSIDER_LightningTalk
upsider_tech
0
200
[2024年10月版] Notebook 2.0のご紹介 / Notebook2.0
databricksjapan
0
1.6k
2025/1/29 BigData-JAWS 勉強会 #28 (re:Invent 2024 re:Cap)/new-feature-preview-q-in-quicksight-scenarios-tried-and-tested
emiki
0
310
panicを深ぼってみる
kworkdev
PRO
2
140
Skip Skip Run Run Run ♫
temoki
0
360
CNAPPから考えるAWSガバナンスの実践と最適化
yuobayashi
5
680
Zenn のウラガワ ~エンジニアのアウトプットを支える環境で Google Cloud が採用されているワケ~ #burikaigi #burikaigi_h
kongmingstrap
18
6.8k
GitLab SelfManagedをCodePipelineのソースに設定する/SetGitLabSelfManagedtoCodePipeline
norihiroishiyama
1
120
現実的なCompose化戦略 ~既存リスト画面の置き換え~
sansantech
PRO
0
160
インシデントキーメトリクスによるインシデント対応の改善 / Improving Incident Response using Incident Key Metrics
nari_ex
0
4k
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Making Projects Easy
brettharned
116
6k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
Speed Design
sergeychernyshev
25
760
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.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