コンテンツにスキップ

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 フィールドの差分を無視します。

1
2
3
4
5
6
spec:
  ignoreDifferences:
    - group: admissionregistration.k8s.io
      kind: ValidatingWebhookConfiguration
      jqPathExpressions:
        - ".webhooks[]?.clientConfig.caBundle"

上記の例では、jqPathExpressions を使用して対象のフィールドを指定しています。jqPathExpressions ではなく、jsonPointers を使用できます。次のように指定します。

1
2
3
4
5
6
spec:
  ignoreDifferences:
    - group: admissionregistration.k8s.io
      kind: ValidatingWebhookConfiguration
      jsonPointers:
        - "/webhooks/0/clientConfig/caBundle"

ignoreDifferences は対象のリソースの name と namespace を指定できます。ValidatingWebhookConfiguration リソースは cluster-scoped リソースなので、 namespace は指定していません。cluster-scoped リソースの場合は、namespace を指定してしまうとうまく動作しないので注意が必要です。