はじめに
ArgoCDのrefreshには普通のrefreshとhard refreshがあります。この違いってみなさんご存知ですか?自分は知りませんでしたし、会社の手順書に言われるがまま押していました。今回は自分なりに調べたことをまとめていきます。
この下三角、結構当たり判定がシビアだと思うのは私だけなんですかね
Argo CDのrefresh機能とは
Argo CDのrefresh機能は最新のアプリケーションのimageとkubernetes上の実際の状態を同期するための機能です。
ざっくりとした処理フローは以下のようになっています。
- ソースの監視
- Application Controllerが定期的にソースの変更を確認します
- 例えばGitリポジトリの場合なら最新のコミットIDをチェックしたりします
- Application Controllerが定期的にソースの変更を確認します
- 変更検出とキャッシュ管理
- ソースに変更が検出された場合
- マニフェストを際レンダリング
- 変更がない場合
- 既存のキャッシュを継続して使用
- ソースに変更が検出された場合
- マニフェストを処理
- 新しいマニフェストとKubernetes上の実際の状態を比較
- 差分があればOutOfSyncに、なければSynced状態にする
- 新しいマニフェストとKubernetes上の実際の状態を比較
- AutoSync
- AutoSyncが有効の場合には自動的に動機を実行する
refreshとhard refreshの違い
- refresh
ソースコードの変更があった場合にのみマニフェストを再生成します。
Gitの新しいコミットをデプロイするときや、Helmチャートの新しいバージョンをでブロイする場合のユースケースとなることが多いです。
3分ごとに自動実行されて、かなり軽量な操作となっています。 - hard refresh
マニフェストキャッシュを強制的に無効化して、変更の有無に関わらずマニフェストを再生成します。
リソース消費が大きくrefreshよりも長い時間がかかります。
ユースケースとしてはSecret Managerからの新しい値を読み込んだり、Helmチャートのバージョンを変更せずコードを変更したり等が考えられます。
主な参考文献
https://github.com/argoproj/argo-cd/discussions/12237
https://argocd-vault-plugin.readthedocs.io/en/v1.3.1/usage/