🦑
ArgoCDのSync / Refresh について
ArgoCDのSync / Refreshについて毎回忘れるのでメモしておく。なるべく公式のディスカッションを参考にして整理したつもり。
Sync (同期)
- アプリケーションの現在の状態(Live state)を、Gitリポジトリで定義された目標状態(Target state)に一致させる操作
- 具体的には、Kubernetesクラスタに対して必要な変更を適用する
- 同期ステータス(Sync status)は、Live stateがTarget stateと一致しているかを示す
Refresh (更新)
-
Refresh
- ソースの変更(例:Gitの新しいコミット、Helmの新バージョン)を検知する
- デフォルトで3分ごとに実行
- ソースに変更がある場合のみ、マニフェストを再生成
- Application Controllerによって要求される
- ソースの変更(例:Gitの新しいコミット、Helmの新バージョン)を検知する
-
Hard Refresh
- アプリケーションのマニフェストキャッシュを強制的に無効化
- ソースの変更有無に関わらず、マニフェストを強制的に再生成
- デフォルトで24時間ごとにキャッシュが期限切れになり実行
- ユースケース例:Helmチャートのコードを変更したが、バージョン番号は変更していない場合
処理の流れ:
Git Repository (target state)
↓
マニフェスト生成(kustomize build等)
↓
生成されたマニフェスト(target stateの具体的な表現形式)
Example:
# Gitリポジトリ内(これがtarget state)
kustomization.yaml:
- patches:
- replica count: 3
# 生成されたマニフェスト(target stateの表現形式)
deployment.yaml:
replicas: 3
ArgoCDの2つの重要なキャッシュ
-
Revision Cache
- 目的:Gitリポジトリへの過剰な問い合わせを防ぐ
- 保存内容:
git ls-remote
の結果(GitリファレンスとSHA) - キャッシュキー:リポジトリ名
- デフォルトの有効期間:3分
- 例:
git ls-remote の結果: cfb24701d... HEAD b80f8cdca... refs/heads/gh-pages cfb24701d... refs/heads/master
-
Manifest Cache
- 目的:マニフェスト生成の処理負荷を軽減
- 保存内容:生成されたKubernetesマニフェスト
- キャッシュキー:Gitコミットハッシュを含む
- デフォルトの有効期間:24時間
Refreshの動作と影響
-
Normal Refresh
- Revision Cacheを無効化
-
git ls-remote
を実行してリファレンスを更新
-
Hard Refresh
- Revision Cacheを無効化
- Manifest Cacheも無効化
- 完全な再生成が行われる
重要な概念の整理
-
Target State
- Gitリポジトリに定義された望ましい状態
- kustomization.yaml、values.yaml等の定義
-
Desired Manifest
- Target Stateから生成された具体的なKubernetesマニフェスト
- kustomize buildやhelm templateの結果
- ArgoCDが内部でキャッシュする対象
-
Refreshの役割
- Normal Refresh: ソースの変更確認、変更があれば新しいDesired Manifestを生成
- Hard Refresh: キャッシュを無視して強制的にDesired Manifestを再生成
-
Syncの役割
- キャッシュされたDesired Manifestを使用して、クラスタの状態(Live State)を更新
Discussion