はじめに
ArgoCDには4種類のSyncがあります。その違いがなんだか自分はあんまりわからず、とりあえず普通にsyncしたり、Out Of Syncの時に無理やりforce syncしたりみたいな感じで雑な使い方をしていました。(危ないことをしてしまっていた…)
このSyncの違いについて改めてまとめたのでその内容をこの記事で紹介していきます。
Syncについて
ArgoCDにおけるSyncとは
ArgoCDでSyncとはマニフェストファイルの変更を検知し、アプリケーション同期を行うことを意味します。マニフェストファイルにsyncPolicyを設定することで、自動でイメージを追跡することもできデプロイを行うことができ便利です。
基本的なSyncの動作フローを整理するとこのようになります。
- マニフェストの読み込み
- クラスタの現在の状態を確認
- 差分の検出
- バリデーションの実行
- 変更の適用
ArgoCDにはこの通常のSyncとは少し違ったSyncが四つ用意されています。それぞれについて紹介していきます。
Prune Sync
Prune Syncは追跡先のマニフェストから削除されたリソースをクラスタからも削除するというものです。
基本的にはこれらのリソースは誤って削除されないようにデフォルトではオフにされています。環境のクリーンアップだったり大規模リファクタリング時などのユースケースが考えられます。
Dry Run Sync
このSyncでは実際のリソースの変更は行わず、変更内容をシミュレーションするだけのものです。どのリソースが作成、更新、削除されるかを事前に確認可能であり、本番環境への大規模な変更前に確認用として使用することができます。
Apply Only Sync
このSyncはOut of Syncステータスのリソースのみを同期し、すでに同期されているリソースには変更を行いません。特定のコンポーネントの更新など部分的な変更を適応したい場合におすすめです。
Force Sync
これは最強のSyncで、通常の検証プロセスをバイパスし、リソースの状態に関係なく強制的に同期を行います。
通常ArgoCDはリソースのヘルスチェックや依存関係、整合性などを検証するのですが、Force Syncではこれを無視します。
そのため、このSyncはバリデーションエラー等を無視する必要があるくらい緊急の時に使うのが良いのだと思います。
まとめ
ここまで
最後にざっくりのSyncのイメージについて軽く共有してこの記事を締めたいと思います。皆さんは自分のように雑な使い方をしないようぜひこのイメージだけでも覚えていただけるとありがたいです。
- 普段の開発
- 普通のSync
- 検証用
- Dry Run Sync
- メンテナンス用
- Prune Sync
- 部分更新用
- Apply Only Sync
- 緊急時用
- Force Sync