yeonghoon.kim

  • 게시판
  • 갤러리

OutOfSync와 Degraded 구분하기

김영훈 2026.06.28 12:30 조회 수 : 25

ArgoCD에서 OutOfSync나 Degraded가 보인다고 바로 sync 버튼을 누르거나 Pod를 지우면 안 됨.

먼저 상태 의미를 나눠서 봐야 함.

GitOps 기준.

Git 저장소
= 원하는 상태

Kubernetes 클러스터
= 실제 상태

ArgoCD
= 원하는 상태와 실제 상태를 비교하는 도구

기본 상태 의미.

Synced
= Git에 적힌 상태와 클러스터 실제 상태가 같음

OutOfSync
= Git과 클러스터 상태가 다름
= 무조건 장애는 아님

Healthy
= ArgoCD가 보기에는 리소스가 정상

Degraded
= 리소스가 정상 상태로 돌아가지 못함

Progressing
= 적용 중
= 배포 직후 잠깐은 정상일 수 있지만 오래 지속되면 확인 필요

먼저 전체 Application 상태 확인.

# ArgoCD Application의 sync와 health 상태를 확인한다.
kubectl -n argocd get app

또는 전체 리소스 이름으로 확인.

# ArgoCD Application의 sync와 health 상태를 확인한다.
kubectl -n argocd get applications.argoproj.io

문제가 있는 Application 상세 확인.

# 문제가 있는 ArgoCD Application 상세 상태를 확인한다.
kubectl -n argocd describe application <application-name>

여기서 확인할 것.

Sync Status
Health Status
자동 sync 여부
문제가 나는 리소스
최근 sync 시각
메시지
Git revision
Events

ArgoCD 자체 문제인지도 확인.

# argocd namespace의 Pod와 Service 상태를 확인한다.
kubectl -n argocd get pods,svc -o wide

argocd-repo-server가 이상하면 Git 저장소를 못 읽을 수 있음.

argocd-application-controller가 이상하면 Application 상태 계산이나 sync가 제대로 안 될 수 있음.

Git repo 상태 확인.

# cluster-apps repo의 현재 branch와 변경 상태를 확인한다.
cd /home/ioniere/gitlab-project-clones/ioniere/cluster-apps
git status --short --branch

최근 커밋 확인.

# cluster-apps repo의 최근 커밋 목록을 확인한다.
cd /home/ioniere/gitlab-project-clones/ioniere/cluster-apps
git log --oneline --decorate -n 10

의심 커밋 확인.

# 대상 커밋이 어떤 파일을 바꿨는지 확인한다.
git show --stat <commit-hash>
# 대상 커밋에서 특정 파일이 어떻게 바뀌었는지 확인한다.
git show <commit-hash> -- <file-path>

OutOfSync는 Git과 클러스터가 다르다는 뜻.

다음처럼 나눠서 봄.

Git 변경 직후 OutOfSync
= 아직 반영 전일 수 있음

직접 kubectl로 수정한 뒤 OutOfSync
= Git과 클러스터가 drift된 상태일 수 있음

자동 sync 실패 후 OutOfSync
= ArgoCD가 반영하려다 실패했을 수 있음

오래 지속되는 OutOfSync
= 의도한 상태와 실제 상태가 계속 다르므로 확인 필요

Degraded는 리소스가 정상 상태로 돌아가지 못한다는 뜻.

이때는 어떤 리소스가 문제인지 먼저 봐야 함.

Deployment / Pod 문제
= Pod 상태와 로그 확인

Ingress / Service 문제
= Ingress, Service, EndpointSlice 확인

PVC / StatefulSet 문제
= 저장소와 PVC 확인

NFS mount 문제
= NFS 경로와 mount 확인

최근 Git 변경 문제
= 변경 커밋 확인

자동 sync와 selfHeal도 구분해야 함.

automated sync
= Git 변경을 자동으로 클러스터에 반영

selfHeal
= 클러스터에서 직접 바뀐 리소스를 Git 기준으로 자동 원복

자동 sync가 켜져 있어도 selfHeal이 꺼져 있으면, 직접 kubectl edit, patch, scale로 만든 drift가 자동으로 원복되지 않을 수 있음.

반대로 selfHeal이 켜져 있으면 직접 수정한 내용이 오래 유지되지 않을 수 있음.

직접 수정했다면 나중에 정리해야 함.

서비스 복구에 필요한 변경
= 같은 내용을 Git에 반영

임시 확인이나 실수로 생긴 변경
= Git 기준으로 원복

정리 후에도 OutOfSync
= 어떤 리소스가 다른지 다시 확인

바로 하지 않을 것.

전체 Application 무작정 sync
전체 Application 무작정 delete
원인 확인 없는 force sync
argocd namespace 삭제
ArgoCD controller Pod 임의 삭제
Secret 값 출력
Git revert 대상 확인 없이 revert
운영 중인 리소스를 Git에 남기지 않고 직접 수정

정리.

OutOfSync는 장애 확정이 아니라 Git과 실제 상태가 다르다는 신호.

Degraded는 리소스가 정상화되지 못하는 상태.

ArgoCD 상태를 볼 때는 sync 상태, health 상태, Git revision, 최근 커밋, 직접 수정 여부를 같이 봐야 함.


  • 추천 0

  • 비추천 0
이 게시물을
목록

댓글 0

번호 제목 글쓴이 날짜 조회 수
19 DGX Kubernetes 구성 계획 김영훈 2026.06.08 25
18 Kubernetes 기본 클러스터, ingress-nginx 설치 김영훈 2026.06.09 15
17 Docker Compose 서비스를 Kubernetes로 이전(깃랩 도커 저장소 필요) [2] 김영훈 2026.06.10 20
16 yeonghoon.kim 배포 파일을 Helm Chart로 전환 [1] 김영훈 2026.06.12 18
15 SOPS age로 Kubernetes Secret 암복호화 김영훈 2026.06.15 23
14 ArgoCD와 GitOps 구조 준비 김영훈 2026.06.16 16
13 CoreDNS로 GitLab Registry 내부 주소 고정 김영훈 2026.06.17 19
12 복구 런북 초반 누락 사항 정리 김영훈 2026.06.17 15
11 SOPS Secret 복구와 ArgoCD root Application 적용 김영훈 2026.06.18 28
10 관측 스택과 앱 배포 저장소 구조 정리 김영훈 2026.06.19 23
9 ArgoCD 복구 중 GitLab 접근 문제 정리 김영훈 2026.06.22 26
8 ImagePullBackOff와 registry pull secret 누락 김영훈 2026.06.22 17
7 worker 재부팅 전 drain 절차 정리 김영훈 2026.06.26 20
6 control-plane 장애 시나리오 관찰 김영훈 2026.06.27 12
» OutOfSync와 Degraded 구분하기 김영훈 2026.06.28 25
4 Git revert는 기록을 지우는 게 아니라 되돌리는 기록을 남기는 것 김영훈 2026.06.29 19
3 Stateful과 Stateless 구분해보기 김영훈 2026.07.02 23
2 GitLab Registry PAT 만료로 이미지 Pull 실패 김영훈 2026.07.08 14
1 yeonghoon.kim php 업그레이드 김영훈 2026.07.09 0
쓰기 태그
 첫 페이지 8 9 10 11 12 13 14 15 16 17 끝 페이지