CI 로드 테스트: http-echo를 Kind와 k6로 수행
Source: Dev.to

솔루션 개요
- Kind – 현실적인 테스트 환경을 위한 다중 노드 Kubernetes 클러스터를 생성합니다.
- NGINX Ingress Controller – 호스트 이름에 따라 HTTP 요청을 다양한 서비스로 라우팅합니다.
- k6 – 상세한 메트릭과 성능 분석을 통해 부하 테스트를 수행합니다.
아키텍처
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ k6 Load Test │───▶│ NGINX Ingress │───▶│ http‑echo apps │
│ │ │ Controller │ │ │
│ - foo.localhost │ │ │ │ - foo service │
│ - bar.localhost │ │ (Port 80/443) │ │ - bar service │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ Kind Cluster │
│ │
│ - Control plane │
│ - Worker node │
└──────────────────┘
프로젝트 구조
kind-http-echo-test/
├── README.md # This documentation
├── kind-config.yaml # Kind cluster configuration
├── k8s/ # Kubernetes manifests
│ ├── http-echo-foo.yaml # Foo service deployment
│ └── http-echo-bar.yaml # Bar service deployment
└── loadtest/ # Load‑testing scripts
└── load-test.js # k6 load‑test script
전제 조건
CI 환경에 다음 도구들이 설치되어 있는지 확인하십시오:
CI 워크플로우
프로젝트는 기본 브랜치에 대한 각 풀 리퀘스트가 트리거될 때 자동화된 CI/CD 파이프라인을 목표로 합니다. 워크플로우는 네 개의 순차적인 단계로 구성됩니다.
단계 1 – 환경 설정
목적: CI 러너에 필요한 모든 도구와 종속성을 준비합니다 (AMD64 및 ARM64 에이전트를 모두 지원).
주요 작업
- 리포지토리를 체크아웃합니다.
- 패키지 관리자를 통해 k6 부하 테스트 도구를 설치합니다.
- 로컬 Kubernetes 클러스터용 Kind를 다운로드하고 설치합니다.
kubectl을 설정하여 클러스터를 관리합니다.- 필요한 권한 및 환경 변수를 구성합니다.
단계 2 – 클러스터 프로비저닝
목적: 테스트를 위한 완전한 Kubernetes 환경을 생성하고 구성합니다.
주요 작업
kind-config.yaml을 사용하여 다중 노드 Kind 클러스터를 생성합니다.- 요청 라우팅을 위해 NGINX Ingress Controller를 설치합니다.
- 모든 컨트롤 플레인 구성 요소가 준비될 때까지 대기합니다.
http‑echo애플리케이션(foo 및 bar 서비스)을 배포합니다.- 모든 파드가 실행 중이며 서비스에 접근 가능한지 확인합니다.
- 호스트명 기반 라우팅을 위한 Ingress 규칙을 구성합니다.
단계 3 – 부하 테스트
목적: 배포된 서비스에 대해 포괄적인 부하 테스트를 실행합니다.
주요 작업
- 엔드포인트 가용성을 확인하기 위해 헬스 체크 프로브를 수행합니다.
- 정의된 시나리오로 k6 스크립트(
load-test.js)를 실행합니다. - 실행 중 실시간 성능 메트릭을 모니터링합니다.
- JSON 형식으로 상세 테스트 결과를 생성합니다.
- foo와 bar 서비스 모두에 대한 사용자 정의 메트릭(응답 시간, 오류율, 처리량)을 수집합니다.
테스트 구성
| 단계 | 기간 | 가상 사용자 | 목적 |
|---|---|---|---|
| Ramp‑up | 10 s | 0 → 10 | 목표 부하로 점진적인 로드 증가 |
| Sustained | 30 s | 20 | 최대 성능 평가 |
| Ramp‑down | 10 s | 20 → 0 | 부드러운 로드 감소 |
성능 임계값
- Ramp‑up: 목표 부하에 도달하기 위한 10 초
- Sustained load: 최대 가상 사용자 수에서 30 초
- Ramp‑down: 부하를 0으로 감소시키는 10 초
- P95 응답 시간
참고: Goodnotes Take‑Home Assignment – DevOps Engineering
Note: 솔루션이 팀의 기대에 미치지 못했습니다.