GitOps 와 ArgoCD · 드리프트와 self-heal · 퀴즈
퀴즈: 드리프트와 self-heal
문항 7개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
`selfHeal: true` 인 앱에서 `kubectl scale` 로 replicas 를 늘렸습니다. 어떻게 되나요?
- 저장소가 자동으로 갱신되어 새 값이 커밋으로 남는다
- 그 앱이 OutOfSync 로 표시된 채 그대로 남는다
- 소유자가 아니라며 scale 명령 자체가 거부된다
- 다음 리컨실 주기에 저장소에 적힌 값으로 되돌아간다
`prune` 이 삭제 대상을 판정하는 기준은?
- 마지막 동기화 시각 이후에 새로 만들어진 모든 오브젝트
- GitOps 관련 라벨이나 어노테이션이 하나도 없는 오브젝트
- 이 앱이 소유한 것으로 표시돼 있으나 렌더된 매니페스트에는 없는 오브젝트
- Application 이 지정한 네임스페이스 밖에 있는 오브젝트
`source.path` 를 빈 디렉터리로 잘못 바꾼 커밋이 병합됐고 `prune: true` 입니다. 가장 직접적인 방어 장치는?
- `revisionHistoryLimit` 을 늘려 되돌릴 리비전을 넉넉히 남긴다
- `retry.limit` 을 0 으로 두어 잘못된 동기화가 반복되지 않게 한다
- `CreateNamespace=true` 를 켜서 지워진 네임스페이스가 곧바로 되살아나게 한다
- `syncPolicy.automated.allowEmpty: false` 로 빈 렌더 결과를 거부한다
어떤 Application 이 `Synced` 이면서 동시에 `Degraded` 입니다. 무슨 뜻인가요?
- 저장소와 클러스터의 내용이 서로 어긋나 있다는 신호다
- 적용이 아직 끝나지 않고 동기화가 진행 중이라는 뜻이다
- 두 상태가 함께 나올 수 없으므로 표시가 잘못된 버그다
- 저장소가 시킨 대로 적용은 됐지만 리소스가 정상 동작하지 못하고 있다
diff 단계에서 `resourceVersion`, `uid`, `managedFields`, `status` 를 걷어내는 정규화가 없다면?
- 전처리 단계가 사라져 diff 계산이 오히려 조금 빨라진다
- 소유 표시를 읽지 못해 prune 이 아예 동작하지 않는다
- 아무것도 바꾸지 않아도 매번 차이가 있다고 보고돼 끝없이 동기화한다
- 동기화 단계가 건너뛰어져 sync 훅이 실행되지 않는다
이 실습 환경에서 만든 Application 이 스스로 `Synced` 가 되지 않는 이유는?
- Application CRD 를 잘못 적용해 스키마가 반쯤만 등록됐기 때문
- 이 환경에는 ArgoCD Application Controller 가 실행되지 않기 때문
- Application 오브젝트가 `argocd` 네임스페이스에 있지 않기 때문
- 가리키는 저장소에 원격이 없어 상태 필드를 채우지 못하기 때문
프로덕션 Application 에 대해 흔히 쓰이는 절충안으로 가장 적절한 것은?
- 환경을 가리지 않고 둘 다 켜 두어 저장소와 클러스터를 언제나 완전히 일치시켜 둔다
- prune 과 selfHeal 을 모두 끄고 배포는 사람이 승인하는 수동 동기화로만 진행한다
- selfHeal 은 켜되 prune 은 신중히 다루거나 수동 동기화로 두어, 실수로 병합된 삭제가 즉시 반영되지 않게 한다
- prune 만 켜고 selfHeal 은 꺼서 삭제는 따라가되 손으로 바꾼 값은 남겨 둔다