DMM.com プラットフォーム開発本部におけるArgoCDの導入と運用
会員限定コンテンツです。無料登録すると制限なしでお読みいただけます。
レビュー投稿日の情報になります
合同会社DMM.com / jumpe1
メンバー / SRE
最終更新日投稿日
アーキテクチャ
導入の背景・解決したかった問題
導入背景
DMM.com プラットフォーム開発本部 MSAグループ プラットフォームチームでは、120人規模の開発組織にマイクロサービス基盤を提供しています。 マイクロサービス基盤としては、マルチテナントのKubernetesクラスタを提供しており利用者の開発効率向上の目的でそれに付随した様々なエコシステムを提供しています。
CDツールとしてSpinnakerを利用していましたが、以下の課題を抱えていました。
ツール導入前の課題
- ビルトイン機能がユースケースと合わず作り込みが必要:デプロイ前のマニフェストへのパッチ適用ができない、Spring Expression Language(SpEL)を使うとポータビリティが損なわれるなど、かゆいところに手が届かない状況
- ノイジーネイバー問題:SpinnakerのコンポーネントがDisk I/Oを詰まらせ、同一ノードの他アプリケーションの性能を悪化させる
- halyardによる複雑な更新作業:専用のCLIツールとStatefulSetの管理が必要で、設定ファイルも別途管理する必要がある
- マイクロサービス構成による運用負荷:10個以上のコンポーネントで構成され、トラブルシュート時の認知負荷が高い
比較検討したサービス
- Spinnaker(既存)
- ArgoCD
- Flux
比較した軸
- マルチクラスタ対応:複数のKubernetesクラスタに対してデプロイが実行できること
- 他社での利用実績:本番環境での稼働実績があること
- 作り込み不要:ビルトイン機能でユースケースを満たせること
- imageフィールド置換機能:Deployment等のimageフィールドを何らかの形で自動置換できること
選定理由
Fluxは、シンプルなCDツールで小規模組織には適していそうだが、マルチクラスター非対応、WebUIの不在、UIからのロールバック機能がないなど、我々の要件を満たせなかった。
ArgoCDについては、imageフィールド置換機能を自前実装する必要があったがSpinnakerの運用負荷を継続するよりも総合的なコストが低いと判断した。ビルトイン機能が充実しており、マルチクラスタ対応、優れたGUI、シンプルな管理が可能で、我々のユースケースに合っていた。
導入の成果
どのような成果が得られたか
- ユースケースに即した運用が可能に:ArgoCDのビルトイン機能やシンプルなカスタマイズで、マニフェストのパッチ適用が容易となった。
- ノイジーネイバー問題の解消:Disk I/Oの詰まりが発生せず同一ノード上の他アプリケーションに悪影響を与えなくなった
- 運用管理の簡素化:Spinnakerのhalyard運用からConfigMAPベースの変更管理へ移行し、運用が楽になった
- 認知負荷の軽減:10以上のコンポーネントで構成されるSpinnakerからArgoCDに移行したことでトラブルシュートや日常運用の認知負荷を低減できた
導入時の苦労・悩み
導入する上で技術的な大きな障害はなくスムーズに進められました。ただし、以下の点で調整が必要だった:
- 不足機能(imageフィールド置換機能)の実装が必要だったこと
- Spinnakerからの移行時に一時的に並行運用を行ったこと
導入に向けた社内への説明
上長・チームへの説明
導入推進時は、Spinnakerで抱えていた主要な課題がArgoCDで解決できることを説明しました。
具体的には、ビルトイン機能の不足による作り込みの必要性、ノイジーネイバー問題によるサービス影響、複雑な運用による高い負荷が解消され、より安定的なCD環境を実現できることを伝えました。
活用方法
- 開発チーム:日常的なデプロイ、GUI上でデプロイ状態の確認、Podのログ確認、リソースのデバッグ
- Platformチーム:週次でArgoCDの脆弱性確認、4半期に1度のバージョンアップ対応
よく使う機能
- Sync機能によるGitOpsベースのデプロイ
- ArgoCD GUIでのリソース状態確認・ログ表示
- GUI経由でのDeployment再起動・リソース削除
- 通知機能(Slack連携)によるデプロイステータスの共有
ツールの良い点
- Kubernetes専用設計:SpinnakerのようなマルチプラットフォームCDツールではなく、Kubernetesに特化した設計で必要な機能が充実
- リソース管理の一元化:すべてがKubernetesリソースとして管理でき、halyardのような専用管理ツールが不要
- 優れたGUI:全リソースの状態確認、Secret伏せ字表示、デバッグ機能など開発者フレンドリーな設計
- モノレポ構成のプラクティス:モノレポ構成によるパフォーマンス劣化を軽減する機能やプラクティスが用意されている
- CNCFプロジェクト:将来性と継続的な改善が期待できる(現在はGraduatedステータス)
ツールの課題点
- ビルトイン機能でimageフィールドを置換できない:GitOps思想によりSpinnakerのようなimageフィールド置換機能がなかった。公式の別コンポーネント「ArgoCD Image Updater」も検討したが、我々はkustomizeやhelmを使わないマニフェストをApplicationの参照先としている都合で利用不可だっため、GARへのイメージpush時の自動imageフィールド置換CIを別途構築する必要があった
- 通知設定の難しさ:api-serverとの一時的な通信エラーやカスタムリソースの瞬間的なエラーによる不要な通知が発生することがあったのでチューニングの必要があった
合同会社DMM.com / jumpe1
メンバー / SRE
よく見られているレビュー
合同会社DMM.com / jumpe1
メンバー / SRE
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法