ArgoCD가 계속 실패한 이유 — uid/resourceVersion 함정
ArgoCD가 계속 실패한 이유 — uid/resourceVersion 함정
ArgoCD를 Helm 기반 GitOps로 전환하고 나서, sync가 끝없이 실패했다. 에러 메시지는 전부 이거:
1
2
Operation cannot be fulfilled on deployments.apps "backend-unified":
the object has been modified; please apply your changes to the latest version
모든 리소스에서 동시에. 10개 넘는 Deployment, StatefulSet, Service가 전부.
원인
kubectl get -o yaml로 export한 매니페스트를 그대로 Git에 넣었다. 이 안에는 쿠버네티스가 자동으로 부여하는 메타데이터가 포함되어 있었다:
1
2
3
4
metadata:
uid: 6350474d-9151-44e7-8c0c-60e7782219cd
resourceVersion: "268292"
creationTimestamp: "2026-03-19T..."
ArgoCD가 이 값으로 apply를 시도하면, 클러스터의 현재 uid/resourceVersion과 달라서 충돌한다. Pod을 재시작할 때마다 uid가 바뀌니까, 한번 어긋나면 영원히 sync가 안 된다.
해결
매니페스트에서 클러스터 생성 메타데이터를 전부 제거했다:
1
2
3
4
5
6
skip_patterns = [
'resourceVersion:', 'uid:', 'creationTimestamp:',
'generation:', 'selfLink:',
'deployment.kubernetes.io/revision:',
'kubectl.kubernetes.io/last-applied-configuration:',
]
92줄 삭제. 이후에도 deployment.kubernetes.io/revision annotation 때문에 OutOfSync가 남아서, ArgoCD ignoreDifferences 설정으로 해결했다.
배운 것
kubectl get -o yaml 결과를 그대로 Git에 넣으면 안 된다. 깨끗한 매니페스트를 작성하거나, Helm 차트를 쓰거나, export 후 반드시 클러스터 메타데이터를 제거해야 한다.
결국 Helm 차트를 ArgoCD source로 직접 연결하는 구조로 전환했다. 수동 export 매니페스트는 삭제.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.