Square-KR Kubernetes GitOps monorepo. ArgoCD App-of-Apps로 클러스터 리소스를 배포하며, 네트워킹은 Cilium Gateway API, 애플리케이션 배포는 Argo Rollouts, 시크릿 관리는 External Secrets + AWS SSM Parameter Store를 사용한다.
.
├── bootstrap/ # 초기 부트스트랩: Cilium, ArgoCD
├── system/ # 공통 시스템 컴포넌트: cert-manager, external-secrets, argo-rollouts, reloader
├── networking/ # Gateway API 및 공통 HTTP redirect
├── platform/ # 공용 데이터 레이어: Valkey
├── observability/ # Datadog operator + DatadogAgent
├── projects/ # 서비스 배포 정의 (현재 notification-backend 중심)
├── charts/app/ # 공통 애플리케이션 Helm chart
├── root.yaml # 최상위 ArgoCD root Application
└── bootstrap.sh # 새 클러스터 초기 설치 스크립트
| 작업 | 위치 | 메모 |
|---|---|---|
| 클러스터 부트스트랩 수정 | bootstrap/, bootstrap.sh |
Cilium/ArgoCD 설치 순서와 초기 secret 생성 |
| 루트 App-of-Apps 수정 | root.yaml |
**/_application.yaml만 수집 |
| 시스템 컴포넌트 수정 | system/ |
cert-manager, external-secrets, argo-rollouts, reloader |
| 공통 게이트웨이 수정 | networking/gateway/ |
infra 네임스페이스에 Gateway/HTTPRoute 배포 |
| 공용 캐시 수정 | platform/valkey/ |
dev, prod 환경별 ApplicationSet |
| 모니터링 수정 | observability/datadog/ |
Datadog operator + DatadogAgent + ExternalSecret |
| 서비스 배포 수정 | projects/ |
현재 notification-backend ApplicationSet 및 env 값 |
| 공통 앱 템플릿 수정 | charts/app/ |
Rollout/Service/HPA/PDB 공통 chart |
ArgoCD sync wave 순서는 다음과 같다.
| Wave | 구성 | 목적 |
|---|---|---|
| 0 | system/cert-manager |
인증서 및 Gateway TLS 선행 |
| 1 | system/* |
External Secrets, Reloader, Argo Rollouts |
| 2 | networking/* |
Gateway 및 HTTP -> HTTPS redirect |
| 3 | platform/* |
공용 데이터 계층 |
| 4 | observability/* |
Datadog 수집기 |
| 5 | projects/* |
서비스 배포 |
root.yaml: 저장소 최상위 root Application_application.yaml: 상위 App-of-Apps 엔트리application.yaml: 단일 컴포넌트용 Applicationapplicationset.yaml: 환경별 또는 반복 배포용 ApplicationSet
주의:
root.yaml는**/_application.yaml만 수집한다.- 각 도메인 폴더의
_application.yaml는 하위의application.yaml,applicationset.yaml를 수집한다.
argocd: ArgoCD control planekube-system: Cilium, cert-manager, external-secrets, reloader, argo-rolloutsinfra: Gateway API 공통 리소스datadog: Datadog operator 및 agentdev,prod: 애플리케이션/플랫폼 워크로드
- AWS SSM Parameter Store를 단일
ClusterSecretStore(aws-ssm)로 참조한다. - 서비스 시크릿은
/{env}/{service}/{KEY}패턴을 사용한다. - 인프라 공용 시크릿은
/infrastructure/...경로를 사용한다. - GHCR pull secret은 서비스별 파일이 아니라
system/external-secrets/ghcr-pull-secret.yaml에서 생성한다.
- 서비스 워크로드는
Deployment대신 ArgoRollout을 사용한다. - 공통 배포 로직은
charts/app에 두고, 서비스 차이는projects/{service}/{env}/values.yaml에서 오버라이드한다. - 서비스별 env 파일에는 보통
values.yaml,external-secret.yaml이 있고, 필요할 때만 추가 매니페스트를 둔다.
- 현재
projects/에는notification-backend배포 정의가 남아 있다. - 현재 서비스 환경 디렉터리는
projects/notification-backend/dev/만 존재한다. - 공통 게이트웨이는
sqr.krapex와*.sqr.krwildcard HTTPS listener를 제공한다. - Datadog은
us5.datadoghq.com사이트를 사용하며 APM, 로그 수집, OTEL collector를 활성화한다. - Cilium은 Gateway API와 Hubble을 활성화한 상태로 부트스트랩된다.
| 피해야 할 것 | 대신 해야 할 것 |
|---|---|
| YAML에 시크릿 직접 하드코딩 | ExternalSecret + AWS SSM 사용 |
서비스 하나 때문에 charts/app/ 직접 수정 |
먼저 values.yaml 오버라이드 가능 여부 확인 |
서비스별 pull-secret.yaml 복제 |
공용 ghcr-pull-secret 재사용 |
루트에서 application.yaml를 직접 추가 |
도메인별 _application.yaml 아래에 연결 |
서비스 워크로드를 Deployment로 작성 |
공통 chart의 Rollout 경로 유지 |
# 새 클러스터 부트스트랩
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
./bootstrap.sh
# ArgoCD UI 접속
kubectl port-forward svc/argocd-server -n argocd 8080:443
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath='{.data.password}' | base64 -d
# 특정 ArgoCD 앱 강제 sync
kubectl -n argocd patch app <app-name> -p '{"operation":{"sync":{}}}' --type merge
# Cilium 상태 확인
kubectl -n kube-system exec -it ds/cilium -- cilium status- 문서 언어는 한국어 기준으로 유지한다.
helmfile diff를 쓰려면helm-diff플러그인이 필요하다.- Cloudflare proxied 구성을 전제로 NLB source IP 보존은 비활성화한다.