LabHub

CAPA — Argo 프로젝트 인증 어소시에이트 · Argo CD 핵심 · 실습

Application 매니페스트 조립하기

LabHub 에서 이어서 보기

목표

Argo CD Application 매니페스트를 필드 하나씩 쌓아 완성하고, 그 앱이 배포하게 될 네임스페이스와 디플로이먼트를 실제 클러스터에 올려 Argo CD 가 자기 리소스를 알아보는 방식까지 손으로 확인합니다.

왜 중요한가

Application 은 "무엇을(source) 어디에(destination) 어떤 규칙으로(syncPolicy) 맞출 것인가" 를 적은 선언문입니다. 필드 이름을 외우는 것보다 각 필드가 어떤 사고를 막으려고 생겼는지 아는 것이 중요합니다. prune 을 켜지 않으면 Git 에서 지운 리소스가 클러스터에 영원히 남고, selfHeal 을 켜면 손으로 고친 값이 되돌아가며, ignoreDifferences 없이 HPA 를 쓰면 Argo CD 와 HPA 가 replicas 를 두고 끝없이 싸웁니다. 이 실습에서 만드는 파일은 그 사고들을 하나씩 예방하는 순서로 쌓입니다.

단계

1. /root/capa-app/ 디렉터리를 만들고 그 안에 application.yaml 을 만드세요. apiVersion 은 argoproj.io/v1alpha1, kind 는 Application, metadata.nameguestbook, metadata.namespaceargocd 입니다.
2. 같은 파일에 spec.projectcapa-demo 로, spec.source.repoURLhttps://gitea.homelab.internal/platform/guestbook.git, spec.source.targetRevisionmain, spec.source.pathoverlays/prod 로 채우세요.
3. spec.destination.serverhttps://kubernetes.default.svc, spec.destination.namespacecapa-guestbook 으로 지정하세요. destination.name 은 쓰지 마세요.
4. spec.syncPolicy.automated.prunespec.syncPolicy.automated.selfHeal 을 둘 다 true 로 두고, spec.syncPolicy.syncOptionsCreateNamespace=truePruneLast=true 두 항목을 넣으세요.
5. spec.syncPolicy.retry.limit5, spec.syncPolicy.retry.backoff.duration5s, factor2, maxDuration3m 으로 지정하세요.
6. spec.ignoreDifferences 의 첫 항목에 group: apps, kind: Deployment, jsonPointers/spec/replicas 를 넣어 HPA 가 관리하는 필드를 비교에서 빼세요.
7. 클러스터에 네임스페이스 capa-guestbook 을 실제로 만들고 라벨 app.kubernetes.io/part-of=capa 를 붙이세요.
8. 네임스페이스 capa-guestbook 에 디플로이먼트 guestbook-ui 를 실제로 만드세요. replicas2, 컨테이너 이미지는 nginx:1.27, 그리고 디플로이먼트 자신의 어노테이션으로 argocd.argoproj.io/tracking-id 를 Argo CD 형식에 맞게 붙이세요. 앱 이름은 guestbook 입니다.

참고

단계 8개

  1. 작업 디렉터리와 Application 골격
  2. source — 무엇을 가져올 것인가
  3. destination — 어디에 놓을 것인가
  4. 자동 동기화와 syncOptions
  5. 재시도 백오프 설계
  6. HPA 가 관리하는 필드를 diff 에서 빼기
  7. 대상 네임스페이스를 실제로 만들기
  8. 추적 어노테이션까지 붙인 디플로이먼트