ArgoCDの管理からリソースを外す方法

モチベーション

「ArgoCDで管理してたけど、管理から外したくなった。リソースは消したくない」ということがありました。

Sync Options の “No Prune Resources” や “No Resource Deletion” かと思ったのですがドキュメントを読んだ感じでは、前者は「削除はしないが管理下に置いたまま」、後者は「Applicationを消した時に消さない」という風に読めます。実際に挙動を確かめたわけではないので違うかもしれませんが。

ArgoCDがリソースを認識する方法

ArgoCDはデフォルトで app.kubernetes.io/instance というラベルによってリソースを認識します。

https://argo-cd.readthedocs.io/en/stable/user-guide/resource_tracking/

このラベルは argocd-cm ConfigMapを変更することで異なるラベルやアノテーションを使うようにすることも可能です。

ArgoCDの管理からリソースを外す方法

上記の通り、ArgoCDは特定のラベルやアノテーションをもとに管理するリソースを認識するため、このラベルやアノテーションを削除することでArgoCDの管理から外すことができます。

具体的には kubectl label コマンドや kubectl annotate コマンドを使います。

例えば app.kubernetes.io/instance というラベルでリソースを認識している時に特定のPodをArgoCDの管理から外すには以下のようにします。

$ kubectl label pod ${pod-name} app.kubernetes.io/instance-

マニフェストファイルがある場合はOutOfSyncの状態になるので、マニフェストファイルを消すことでArgoCDから見えなくなります。