스꾸딩에서 진행 중인 각종 실험적 프로젝트(ProSeed, 주당, 인프라팀 온보딩 등)를 진행하는 쿠버네티스 클러스터 및 인프라를 관리 합니다. 이는 개발 및 테스트 환경으로 사용되며 다른 서비스들(특히 코드당)과는 별도로 운영됩니다.
- 클러스터 이름: Lab
- 클러스터 유형: K3s
- 노드: 10번 서버(컨트롤 플레인 + 워커 노드)
- 자세한 설명은 내부 Notion 문서를 참고해주세요.
k8s/
├── argocd/
│ ├── applications/
│ │ ├── infra/ # 인프라 컴포넌트
│ │ ├── observability/ # 모니터링 스택
│ │ └── proseed/ # 프로젝트별 앱
│ └── values.yaml
├── aws-credentials/ # AWS 자격증명 (SealedSecret)
├── cert-manager/ # TLS 인증서 자동 발급
├── external-secrets/ # AWS Secrets Manager 연동
├── reflector/ # Secret 복제
├── observability/ # Prometheus, Grafana, Loki, Tempo
└── dashboard/ # Kubernetes Dashboard
| 컴포넌트 | 설명 | 문서 |
|---|---|---|
| ArgoCD | GitOps CD | README |
| ArgoCD Image Updater | 자동 이미지 업데이트 | - |
| Cert Manager | Let's Encrypt 인증서 | README |
| External Secrets | AWS Secrets Manager 동기화 | README |
| Reflector | Secret/ConfigMap 복제 | README |
| Sealed Secrets | Git에 암호화된 Secret 저장 | README |
자세한 내용은 README를 참고하세요.
| 컴포넌트 | 용도 |
|---|---|
| OpenTelemetry Collector | 텔레메트리 수집/분배 |
| Prometheus | 메트릭 저장 |
| Loki | 로그 저장 |
| Tempo | 트레이스 저장 |
| Promtail | 노드 로그 수집 |
| Grafana | 대시보드 |
- 별도의 레포지토리 생성
- 프로젝트별로 독립된 레포지토리를 생성합니다.
- 예: ProSeed 프로젝트의 경우
skkuding/proseed레포지토리 생성
- 쿠버네티스 매니페스트 작성
- 앱 배포를 위한 쿠버네티스 매니페스트 파일을 위에서 생성한 레포지토리에 작성합니다.
- 매니페스트 파일은 Helm 차트, Kustomize, 또는 순수 YAML 파일 형식으로 작성할 수 있습니다.
- Argo CD 애플리케이션 생성
- Argo CD가 관리하는 애플리케이션 디렉토리(
k8s/argocd/applications)에 새 애플리케이션 매니페스트 파일(kind: Application)을 생성합니다. - Argo CD 애플리케이션은 앱의 레포지토리와 매니페스트 경로를 참조하도록 설정합니다.
- Argo CD가 관리하는 애플리케이션 디렉토리(
각 프로젝트는 namespace 단위로 격리하여 배포합니다. namespace 이름은 프로젝트명과 동일하게 설정합니다.
예: ProSeed 프로젝트의 경우 proseed 네임스페이스 생성
클러스터 내 리소스는 반드시 IaC(Infrastructure as Code) 도구를 사용하여 관리합니다. 이는 팀원들이 리소스 구성을 쉽게 이해하고 재현할 수 있도록 돕기 위함입니다. 만약 IaC 도구를 사용하지 않고 리소스를 생성해야 하는 경우, 반드시 해당 리소스의 생성 및 관리 방법을 문서화하여 공유해야 합니다. 그렇지 않다면 언제든 예고 없이 삭제될 수 있습니다.
- 사용 도구: YAML manifests, Helm charts, Kustomize, Terraform 등
각 네임스페이스에는 적절한 리소스 쿼터(Resource Quota)와 리소스 제한(Resource Limits)을 설정하여 클러스터 자원의 과도한 사용을 방지합니다. 이는 다른 프로젝트에 영향을 미치지 않도록 하기 위함입니다.
- 예: CPU, 메모리, 스토리지 등 현재는 리소스 쿼터 및 제한이 설정되어 있지 않습니다. 필요 시 설정을 추가할 예정입니다.
코드당과는 다르게 production, staging 환경을 구분하지 않습니다. 모든 배포는 동일한 환경에서 이루어지며, 각 프로젝트 내에서 자체적으로 환경을 구분하여 관리합니다.