ArgoCD で Kubernetes リソースの差分を無視する¶
Argo CD は宣言的な GitOps ツールで、Kubernetes の継続的デリバリーを実現します。Argo CD は、Git リポジトリに保存された Kubernetes マニフェストと実際の Kubernetes クラスタの状態を比較し、差分があればあるべき状態に修正します。 しかし、特定のリソースやフィールドの差分を無視したい場合があります。この記事では、Argo CD で Kubernetes リソースの差分を無視する方法について説明します。
ignoreDifferences の設定¶
Argo CD では、クラスタの状態をあるべき状態に保ちますが、あるべき状態が競合してリソースの上書きが繰り返されることがあります。上書きが繰り返されると、outOfSync
状態になり sync が未完了になります。これを防ぐために、Argo CD では ignoreDifferences
を使用して特定のリソースやフィールドの差分を無視できます。差分を無視することで、リソースの上書きが繰り返されることを防ぎ、正常に sync を完了できます。
ignoreDifferences
には特定のアプリケーションを対象にした設定と、システム全体に適用される設定があります。
アプリケーションレベルの設定¶
アプリケーションレベルの設定は、特定のアプリケーションに対して差分を無視する設定です。次のように spec.ignoreDifferences
を指定します。次の例では、ValidatingWebhookConfiguration
リソースの caBundle
フィールドの差分を無視します。ValidatingWebhookConfiguration
リソースの caBundle
フィールドの差分を無視します。
上記の例では、jqPathExpressions を使用して対象のフィールドを指定しています。jqPathExpressions ではなく、jsonPointers を使用できます。次のように指定します。
ignoreDifferences は対象のリソースの name と namespace を指定できます。ValidatingWebhookConfiguration リソースは cluster-scoped リソースなので、 namespace は指定していません。cluster-scoped リソースの場合は、namespace を指定してしまうとうまく動作しないので注意が必要です。