一般社団法人 全国個人事業主支援協会

COLUMN コラム

新年あけましておめでとうございます。

新年一発目として、今回は、Argo CD Application の Multi-Repo 機能 について紹介します。

Argo CD の「Multi-Repo」とは?

Argo CD の Application は、通常以下のように定義します。

1 Application = 1 Git Repository

しかし Argo CD では、
1つの Application で複数の Git Repository を参照することが可能です。

これを一般的に multi-repo 構成と呼びます。

 

なぜ Multi-Repo が必要になるのか?

実務では、以下のようなリポジトリ分割をしたくなるケースが多いです。

・よくあるリポジトリ分割例

種類 内容
infra repo 共通基盤(Ingress, Monitoring, CRD など)
app repo アプリケーション固有のマニフェスト
env repo 環境差分(dev / stg / prod)

このとき、

・infra は共通で使い回したい
・app チームは app repo だけ触ってほしい
・環境差分は別管理したい

といった要求が出てきます。

multi-repo を使うと、これを 1 Application にまとめられます

 

Multi-Repo の代表的な構成パターン

・パターン①:Helm Chart + values を別 Repo で管理

一番よく使われるパターンです。

repo A: Helm Chart
repo B: values.yaml(環境ごと)

“`yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
sources:
– repoURL: https://github.com/example/helm-charts
path: my-app
targetRevision: main
helm:
valueFiles:
– $values/values-prod.yaml
– repoURL: https://github.com/example/env-config
targetRevision: main
ref: values

“`

メリットは、

・Chart と values を完全分離できる

・環境差分を安全に管理できる

・GitOps 的にとても相性が良い

あたりになります。

・パターン②:共通マニフェスト + アプリ固有マニフェスト

repo A: common(namespace, network policy など)
repo B: app-specific

“`
spec:
sources:
– repoURL: https://github.com/example/common-manifests
path: base
– repoURL: https://github.com/example/app-manifests
path: overlays/prod
“`

メリットは、

・infra 共通化がしやすい

・app チームと infra チームの責務分離が明確

あたりになります。

 

Multi-Repo を使うメリット

・責務分離がしやすい
infra チーム:共通 repo
app チーム:アプリ repo

・レビューしやすい
環境差分だけの PR
values.yaml だけの変更が明確

・スケールしやすい
アプリが増えても infra は共通
マルチクラスタ構成とも相性が良い

 

注意点・ハマりどころ

・同期失敗時の切り分けが少し難しい
どの repo が原因か分かりにくい
Argo CD UI の Sources タブを見る習慣が必要

・ repo 間の依存関係に注意
common 側の変更で全 Application が影響を受ける可能性
バージョン固定(tag / branch)を推奨

・過剰に分けすぎない
「なんでも multi-repo」は逆に複雑

最初は Helm + values 分離から始めるのがおすすめになります。

 

どんな人におすすめ?

・GitOps を本格運用したい

・環境(dev / stg / prod)が複数ある

・infra / app のチームが分かれている

・マルチクラスタ運用をしている

→ 1つでも当てはまれば、multi-repo はかなり有効です

 

まとめ

Argo CD の multi-repo 機能は 実務でかなり使えます。
特に Helm Chart + values 分離は鉄板構成です。
責務分離・スケーラビリティ・レビュー性が向上しますので。
ただし、依存関係と運用ルールは要設計ですね。

GitOps を一段レベルアップさせたいなら、
ぜひ一度 multi-repo 構成を検討してみてください 🚀

The following two tabs change content below.

Kenneth Ozeki

インフラ周りを担当するITエンジニアです。 経験はオンプレ5年、クラウド7年ほど python, go などで簡単な運用ツールも作成してます

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア