Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ameba CI/CD: Terraform and Argo CD Improvements
Search
Kumo Ishikawa
July 11, 2025
3.3k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ameba CI/CD: Terraform and Argo CD Improvements
Kumo Ishikawa
July 11, 2025
More Decks by Kumo Ishikawa
See All by Kumo Ishikawa
Platform Engineering as a Product: Criteria for Improvement and Multi-Tenant Design
kumorn5s
0
600
「OSSがあるなら自作するな」は AI時代も正しいか ── Build vs Adopt の新しい判断基準
kumorn5s
7
3.5k
Efficient EKS Pod Communication: A Practical Implementation Using Cloudflare Zero Trust and CoreDNS
kumorn5s
2
490
Ameba Falco Security
kumorn5s
0
90
PEK2025: Multi-Tenancy Design in Ameba
kumorn5s
1
1.6k
Amebaにおける Platform Engineeringの実践
kumorn5s
7
1.6k
同一クラスタ上でのFluxCDとArgoCDのリソース最適化の話
kumorn5s
0
710
HA構成のArgoCD パフォーマンス最適化への道
kumorn5s
3
750
Featured
See All Featured
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
420
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Skip the Path - Find Your Career Trail
mkilby
1
220
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Producing Creativity
orderedlist
PRO
348
41k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
HDC tutorial
michielstock
2
860
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Transcript
数万リソースのCI/CDを爆速に! Terraform・ArgoCD 改善の全記録 石川 雲 Kumo Ishikawa
•2023年11月中途入社 •横断組織 Service Reliability Group (SRG)所属 •Ameba Platform 担当 •得意領域
Security Multi-Tenant・Zero Trust・Runtime Monitoring CI/CD ArgoCD・FluxCD・Terraform PipeCD Contribute (Auth) 石川 雲 Kumo Ishikawa
本セッションの内容 Ameba PlatformにおけるCI/CDの進化と運用改善 具体的には... ❏ CI/CDの構成 と2022年以降に顕在化した課題の解決 ❏ Terraform /
ArgoCD / FluxCDの パフォーマンス最適化 事例 ❏ ArgoCD上の Resource Tracking と生成Resource の扱い ❏ CI/CD後の Workflow自動化 に向けた検討
1.CI/CDの概要 2.CIの課題と解決 Terraformの処理最適化 3.CDの課題と解決 その1 ArgoCD・FluxCDの運用改善 その2 生成Resourceのステータス その3 Post
Release Workflowの導入 4.まとめ
CI/CDの概要
背景 Amebaシステム刷新 ❏ 2019年からオンプレミスからAWS移行 ❏ 共通開発者基盤Ameba Platformの立ち上げ ❏ 共通開発者基盤の一部: CI/CD基盤
背景 Amebaシステム刷新 ❏ 2019年からオンプレミスからAWS移行 ❏ 共通開発者基盤Ameba Platformの立ち上げ ❏ 共通開発者基盤の一部: CI/CD基盤
今日の補足資料は 全てXで投稿する予定
CI/CD基盤の歴史 当初設計の主な要件(2019) ❏ 認知負荷を軽減できる技術選定 ❏ GitOps原則「レポジトリ = 状態」 ❏ シンプルなCI/CDトリガーとイベント設計
❏ CI/CDパイプラインのコード化 ❏ 専属担当者を不要とする設計(全員が担当者)
CI/CDの構成 3つの部分 ❏ Product ❏ Shared ❏ Platform
CI/CDの構成 - CI (Product) CI (Product) ❏ Image Push ❏
ECRへ ❏ Test ❏ Code管理 CD (Product) ❏ Platformへ ❏ 手動実行 ❏ CDN操作 ❏ Schema操作
CI/CDの構成 - CI (Shared) CI (Shared) ❏ Terraform ❏ CDN
❏ DNS ❏ AWS ❏ GHA利用
CI/CDの構成 - CD(Platform) CD(Platform) ❏ FluxCD ❏ Image Tag ❏
ArgoCD ❏ KubeVela ❏ CR -> Raw
KubeVela: アプリケーション定義モデル KubeVelaとは ❏ OAMモデルを使用して開発者のデプロイを簡素化し、 拡張性を実現するツール ❏ 事前に定義したyamlで、必要なKuberentes Manifestを生成 する
CI/CDの構成 - 責任分界点 開発者(Product) ❏ Product Side ❏ Shared Side
❏ Terraform ❏ Manifest ❏ Platform Side ❏ ArgoCD 開発者(Platform) ❏ Shared Side ❏ Platform Side
CIの課題と解決
Terraformの構成(旧) Github Actions 構成 ❏ Plan/Apply全部On: Push ❏ Env Matrixで全環境を一括同時実行
❏ 1環境に1Runner
Terraformの構成(旧) Github Actions 構成 ❏ Runnerで、モジュール単位ごとにマルチスレッドで実行 ❏ Runner内は1000行のシェルスクリプト
Terraformの構成(旧) tfstate State構成 ❏ S3 Backend利用 ❏ Workspace利用 ❏ Env名=
Workspace名 ❏ マイクロサービス単位でState分け
Terraformの構成(旧) モジュール構成 ❏ Env/とModules/のクラシックな構成
Terraformの構成(旧) モジュール構成 ❏ マイクロサービス単位でモジュール分け ❏ Platformも単独のモジュール
Terraformの構成(旧) モジュール構成 ❏ 各マイクロサービスの各環境は独自のモジュールを利用 ❏ Env/<Service>以下はResource書かない
CIの課題 Platform利用者の声 ❏ PlanとApplyが非常に遅い ❏ 一部リソース(RDSなど)の適用が遅すぎる ❏ Applyの範囲が広すぎて、他のAppのDriftを適用してしまった
CIの課題 データで見てみると Plan ❏ 平均時間:741.2s (12.4min ) ❏ 中央値: 347.0s
(5.8min ) ❏ p75: 363.0s (6.1min ) Apply ❏ 平均時間:387.4s (6.5min ) ❏ 中央値: 335.0s (5.6min ) ❏ p75: 417.0s (7.0min )
CIの課題 原因 ❏ 一部AWS側APIが遅い ❏ RDS・EC2などの変更自体は時間かかる ❏ リソースの増加とStateの肥大化 ❏ 不適切なCI構成
2022 2024 Platform Module 300KB~400KB 1.1MB~1.2MB MicroService Module (avg) 50KB~60KB 200KB~300KB
CIの課題 不適切なCI構成 一つのRunnerでService数のスレッ ド数で並列実行 ⇨ Runner CPU利用率常に100%
CIの課題と解決: Terraformの処理最適化
Terraformの速度を上げる方法 一般的な方法 遅いCloud Resourceの分離 ❏ 極端に遅いCloud Resourceは個別のモジュール・Terraform以外で管理 tfstateの分割 ❏ 使いやすい程度で分割(~500KB)
並列処理数を上げる ❏ Runner性能とリソース間依存/順序によって効果がない場合がある Providerダウンロード時間を減らす ❏ ProviderのCache設定
Terraformの速度を上げる方法 トリック Planファイルを利用してApply ❏ terraform apply -auto-approve xxx.tfplan ❏ Applyがとても速くなるが、tfplanの最新性を保つ必要がある
Targetを指定する ❏ terraform apply -target="module.eks_addon" ❏ 単体ターゲットの定期実行に向いてる Refreshを無効化 ❏ terraform plan -refresh=false ❏ stateが大きい場合、ある程度時間を削減できる
Amebaでの対策 単体モジュールの速度ではなく、CI全体の実行速度にフォーカス 1. 現行モジュール分けを維持し、変更があったモジュールだけ Terraform操作を行う 2. モジュール単位でRunnerを分け て同時実行 3. その上で、単体モジュールの実行速度を上げる
Amebaでの対策 具体的には ❏ 一部Cloud ResourceをTerraformから廃止検討 ❏ EKS EC2 AutoScalingGroup、Karpenterへ移行 ❏
Auroraなどは検討中 ❏ Planファイルを利用してApply ❏ Runnerの上限まで並列処理数を上げる ❏ 大きいState: 10(Default) ❏ 小さいState: 30 ❏ Providerファイルのキャッシング
構成図の変化
Amebaでの対策
Amebaでの対策
Amebaでの対策 差分発生した Moduleを対象 にMatrix生成
Amebaでの対策 Applyも同じ くMatrix生成
Amebaでの対策 Plan FileはArtifactで共 有
ドリフトによる遅延 一部のドリフトによってTerraformの実行が遅くなることもある ❏ EC2 Image ID (ASG) の自動変更 ❏ 適用すると10min~20minかかる
❏ 1週間に一度、このドリフトに遭遇する不幸が発生する
ドリフトによる遅延 対策 ❏ ドリフトを検知する定期実行Healthcheck ❏ EC2 AMI IDの自動変更が発生したら、Applyまで自動的に適用する
改善結果 実行時間: 最大9割削減、平均7割削減を達成
改善結果 改善前(2024/2) Plan ❏ 平均時間:741.2s (12.4min ) ❏ 中央値: 347.0s
(5.8min ) ❏ p75: 363.0s (6.1min ) Apply ❏ 平均時間:387.4s (6.5min ) ❏ 中央値: 335.0s (5.6min ) ❏ p75: 417.0s (7.0min ) 改善後(2025/5) Plan ❏ 平均時間:234.0s (3.9min ) ❏ 中央値: 72.1s (1.2min ) ❏ p75: 117.6s (1.9min ) Apply ❏ 平均時間:251s (4.2min ) ❏ 中央値: 99.2s (1.7min ) ❏ p75:195.0s (3.3min ) 実行時間: 最大9割削減、平均7割削減を達成
Terraformに関するまとめ キーポイント ❏ 差分ベースで必要のModuleを絞る ❏ Runnerの並列化を利用する ❏ Runner単体の性能を最大限まで利用する
CDの課題と解決
CDの課題と解決 その1 ArgoCD・FluxCDの運用改善
CDの構成 CD(Platform) ❏ FluxCD ❏ Image Tag ❏ ArgoCD ❏
KubeVela ❏ CR -> Raw
CDの課題 ❏ ArgoCD: ❏ 同期が遅い ❏ ImagePush -> AutoSync ->
Sync完了まで20~30分かかる ❏ 画面が遅い ❏ UI上、Filterをかけないと画面がフリーズして動かない ❏ FluxCD: ❏ FluxCDの動きが遅く、ImageTag更新が止まる
CDの課題 ArgoCD Core Componentの状態 ❏ ApplicationControllerは平常時でもカツカツ状態 ❏ CPU 95%、メモリ 90%使用(Limit)
❏ 2/3のRepoServerとRedis Proxyは1分単位で再起動繰り返す ❏ 全体Applicationの45%はProgressing・Status Unknown FluxCD Componentの状態 ❏ ECR更新のタイミングで、ImageXXXControllerがOOM Killedで再起動
CDの課題 原因: リソース総数の増加 ❏ リソース数合計: 10k(2022) -> 35k(2024) ❏ 1
MicroServiceのKubernetesリソース数 ❏ 平均: 100(2022) -> 500 (2024) ❏ 一部: 2000~3000
ArgoCDのパフォーマンス改善
ArgoCDのパフォーマンス改善 最も効果的な方法 ❏ 各コンポーネントの水平スケーリング ❏ パフォーマンス改善に大きく貢献: ApplicationControllerとRepoServer ❏ MonoRepo対策 ❏
意外と軽視されがち
ArgoCDのパフォーマンス改善 水平スケーリング Application Controller ❏ Shardingの分割単位: クラスタ ❏ Shardへ自動・手動クラスタ指定 Repo
Server・API Server ❏ スケールすることでパフォーマンス激的に改善 Redis ❏ 3つという前提 Dexなど ❏ スケールすると不整合が起きる
ArgoCDのパフォーマンス改善 MonoRepo問題とは ❏ MonoRepo運用 ❏ 複数のArgoCD Applicationが単一のGit Repoをポーリングしている ❏ 専用のManifest用Repo
❏ ArgoCD特性 ❏ 新しいコミットが同期されると、そのRepoに関する全てのキャッシュが再作成される ❏ MonoRepoの場合 ❏ デプロイ対象のManifestだけでなく、それ以外のManifestの変更があっても キャッシュが再作成される ❏ Repo内のAppが数十個以上の場合、パフォーマンスに大きな影響
ArgoCDのパフォーマンス改善 MonoRepo対策 ❏ Git Webhook ❏ Annotation: manifest-generate-paths
ArgoCDのパフォーマンス改善 パラメータチューニング Application Controller ❏ 調整(Reconcile)期間: デフォルト3min ❏ timeout.reconciliation ❏
短すぎるとWorkQueueの処理待ち件数が滞留して常にピーク状態、適切に伸ばす ❏ Processor数: ❏ controller.status.processors (appRefreshQueue: Application状態監視) ❏ controller.operation.processors (appOperationQueue: Kubernetesリソース操作) ❏ 上げるとWorkQueueの処理効率が上がる ❏ 調整Jitter: ❏ timeout.reconciliation.jitter ❏ 複数Appの実行タイミングを乱数化、スパイク回避 ❏ timeout.reconciliationが3min, jitterが1minの場合: 調整間隔区間が[3min, 3min+1min]
ArgoCDのパフォーマンス改善 パラメータチューニング Repo Server ❏ キャッシュ期間: ❏ reposerver.repo.cache.expiration ❏ ディスクI/O効率に影響、短すぎるとTimeout発生、適切に伸ばす
❏ 並列数: ❏ --parallelismlimit ❏ Helm/KustomizeなどのManifest生成効率に影響、適切に上げる
Amebaの改善 Application Controller ❏ Reconcile Timeout: 3min -> 5min ❏
Processor数: status/operation 3倍 ❏ Reconcile Jitter: 1min (Reconcile Timeout: 5min~6min) ❏ Shareds: 1台運用 -> 1クラスタ = 1Shard運用 Repo Server ❏ キャッシュ期間: 24h -> 48h ❏ Replicas: 3 -> 6
構成図の変化
各Core Component(2022) 2022: デフォルトHA構成運用 ❏ ApplicationController ❏ HAデフォルト1台 ❏ RepoServer
❏ HAデフォルト3台 ❏ Redis ❏ HAデフォルト3台
各Core Component(2024) 2024: 1 Shard = 1 Cluster
改善結果 ArgoCD Work Queueの処理待ち件数と処理時間激減
改善結果 ArgoCD Work Queueの処理待ち件数と処理時間激減 処理待ち件数がほぼ0に 処理時間が7割減
FluxCDのパフォーマンス改善
FluxCDのパフォーマンス改善 水平スケーリング ❏ 全Controller対象 ❏ Flux Custom Resourceを各Shardへアサイン ❏ 手動アサインしかない
Amebaでは ❏ リソース量が多いAppを新しいShardに指定
構成図の変化
構成図の変化 2022: デフォルト構成 ❏ Reflector ❏ ECRのタグを監視し、ImagePolicy通りに記録 ❏ Automation ❏
ImageUpdateAutomation設定通り、Manifestのタグを更新
構成図の変化 2024: リソース量が多いAppを新しいShardに指定
構成図の変化 2024: リソース量が多いAppを新しいShardに指定 FluxCDのダウンタイムが0になった
CDの課題と解決 その2 生成Resourceのステータス
ArgoCD Applicationの構成 ❏ Delivery ❏ Service ❏ Generated
CDの課題 GitOps定義内の範囲: ❏ ArgoCD App ❏ KubeVela App(CR) GitOps定義外の範囲: ❏
Raw Resource ❏ KubeVela生成 Gitにないため、 Prune Statusになる
CDの課題 生成リソースのOutOfSync問題 ❏ ApplicationのStatusが OutOfSync に ❏ Prune対象とされるため、 削除されるリスク
CDの課題 ソリューションは二つ 1. Annotationを利用してPruneをスキップ 2. Tracking IDを導入して、意図的にNon SelfReferencing Resourceに誘導
ソリューション 1 Annotationを利用してPruneをスキップ OutOfSyncの表記が変わらない PruneSkipped Statusになり、 Pruneされない 一部のリソースがOutOfSyncになって も、 全体のStatusがHealthy
ソリューション 2 Tracking IDを導入して、意図的にNon SelfReferencing Resourceに誘導 ❏ Tracking IDとは argocd.argoproj.io/tracking-id:
<application-name>:<group>/<kind>:<namespace>/<name>
ソリューション 2 Tracking IDを導入して、意図的にNon SelfReferencing Resourceに誘導 ❏ Tracking IDとは ❏
全てのリソースに一意的なTracking IDが存在 ❏ Tracking IDを間違って利用するリソースはNon SelfReferencing Resource
ソリューション 2 Tracking IDを導入して、意図的にNon SelfReferencing Resourceに誘導 1. Tracking IDを導入し、KubeVela Custom
ResourceにTracking IDが生成 される 2. 生成ResourceにKubeVela Custom ResourceのAnnotationをコピー させる 3. 本来持つべきTracking IDと一致しない ため、NonSelfReferencingと判断される
ソリューション 2 Tracking IDを導入して、意図的にNon SelfReferencing Resourceに誘導 1. Tracking IDを導入し、KubeVela Custom
ResourceにTracking IDが生成 される 2. 生成ResourceにKubeVela Custom ResourceのAnnotationをコピー させる 3. 本来持つべきTracking IDと一致しない ため、NonSelfReferencingと判断される
ソリューション 2 Tracking IDを導入して、意図的にNon SelfReferencing Resourceに誘導 1. Tracking IDを導入し、KubeVela Custom
ResourceにTracking IDが生成 される 2. 生成ResourceにKubeVela Custom ResourceのAnnotationをコピー させる 3. 本来持つべきTracking IDと一致しない ため、NonSelfReferencingと判断される
ソリューション 2 Tracking IDを導入して、意図的にNon SelfReferencing Resourceに誘導 1. Tracking IDを導入し、KubeVela Custom
ResourceにTracking IDが生成 される 2. 生成ResourceにKubeVela Custom ResourceのAnnotationをコピー させる 3. 本来持つべきTracking IDと一致しない ため、NonSelfReferencingと判断される Non Self-Referencing ResourceのStatusは Unknown UI表示のみ、Pruneされない
ソリューション 2 生成 App全体が OutOfSync
ソリューション 2 生成 見た目が 良くなった 運用者の 心理的負担を軽減する
ソリューション 2 推測 ❏ GitにないManifestに対するStatus Checkは、Application Controllerの負 荷増加と関係している可能性がある ❏ 意図的にUnknown
Statusにすることで、負荷低減の可能性も考えられる 測るタイミングを逃してしまったので、知っている方がいれば教えてください
CDの課題と解決 その3 PostReleaseWorkflowの導入
CDの課題 PostSync問題 ❏ 当初設計: Sync後に何かを実行したい ❏ CDN Cache Purge ❏
Assets処理 ❏ ArgoCD Resource Hookでは解決できない ❏ ArgoCD Application単位、リソース単位ではない
CDの課題 GitOps定義内の範囲: ❏ ArgoCD App ❏ KubeVela App(CR) GitOps定義外の範囲: ❏
Raw Resource ❏ KubeVela生成 Resourcehook のトリガー単位 望ましい トリガー単位
ソリューション 検討したソリューション ❏ Argo Events・Argo Workflow (運用負荷が高い) ❏ ArgoCD Notification
+ Webhook Server (自由度が低い) ❏ KubeVela Application Workflow (バランス案、最終的に選定)
ソリューション Post Release Workflow
構成図の変化
従来のCD (Product) ❏ 手動実行 ❏ CDN操作 ❏ Schema操作
Post Release Workflow ❏ 手動実行 ❏ CDN操作 ❏ Schema操作 CDへ統合可能
ソリューション デメリット ❏ 複合条件が難しい ❏ 今後、人的リソース次第に、Argo Workflowの導入を検討中
まとめ
まとめ ❏ Ameba Platform CI/CDの全体像・細部まで紹介 ❏ CIとCDのパフォーマンスなどの改善 ❏ Terraform CIの高速化
❏ ArgoCD/FluxCDのスケーリング・パラメータチューニング ❏ ArgoCD上生成リソースのステータスハンドリング ❏ ArgoCDとKubeVelaを活用したPost Release Workflow
採用情報 26卒 本選考 中途採用(SRG)
ありがとうございました