Ansible Molecule with Kind - 도커를 활용한 쿠버네티스 자동화 테스트 작성
Ansible Molecule with KIND 소개
Ansible Molecule과 KIND (Kubernetes IN Docker)를 조합하여 쿠버네티스 자동화 테스트 환경을 구축하는 방법을 소개합니다.
개요
Ansible Molecule
Ansible Molecule은 Ansible Roles를 가상화 기술을 통해 고립된 환경에서 테스트할 수 있게 도와주는 프레임워크입니다. 다양한 드라이버를 지원하며, Kubernetes 환경에서는 Delegated 드라이버를 사용하여 KIND와 통합할 수 있습니다.
KIND (Kubernetes IN Docker)
KIND는 Kubernetes 클러스터를 Docker 컨테이너로 동작시켜주는 도구입니다. 로컬 환경에서 빠르고 가볍게 Kubernetes 클러스터를 생성할 수 있어 다음과 같은 용도로 활용됩니다:
- Helm Chart 테스트
- Kubernetes 리소스 배포 검증
- 어플리케이션 동작 확인
- CI/CD 파이프라인 통합 테스트
왜 Molecule + KIND인가?
| 장점 | 설명 |
|---|---|
| 빠른 피드백 | 로컬에서 몇 분 내에 전체 클러스터 테스트 가능 |
| 비용 절감 | 클라우드 리소스 없이 Kubernetes 테스트 수행 |
| 재현성 | 항상 동일한 테스트 환경 보장 |
| CI/CD 통합 | GitHub Actions, GitLab CI 등과 쉽게 통합 |
| 멱등성 검증 | Role이 여러 번 실행되어도 안전한지 확인 |
사전 요구사항
시스템 요구사항
- 운영체제: Linux, macOS, Windows (WSL2)
- 메모리: 최소 8GB RAM (16GB 권장)
- CPU: 최소 4코어
- 디스크: 최소 20GB 여유 공간
필수 설치 항목
1. Docker Engine 설치
| |
2. KIND 설치
| |
3. kubectl 설치
| |
4. Python 라이브러리 설치
| |
5. Ansible Collections 설치
| |
테스트 시나리오 작성 및 실행
Step 0: Ansible Role 생성
먼저 테스트할 Ansible Role을 생성합니다:
| |
Role의 meta/main.yml에 collection 의존성을 추가합니다:
| |
Role의 tasks/main.yml을 작성합니다:
| |
Step 1: Molecule Default 시나리오 초기화
| |
드라이버 선택 설명:
delegated: KIND와 같은 외부 도구를 사용할 때 선택합니다. Molecule이 직접 인스턴스를 관리하지 않고 사용자 정의 플레이북에 위임합니다.
Step 2: KIND Config 매니페스트 파일 생성
| |
| |
KIND 설정 설명:
| 옵션 | 설명 |
|---|---|
kubeProxyMode | kube-proxy 모드 (iptables, ipvs) |
podSubnet | Pod 네트워크 CIDR |
serviceSubnet | Service 네트워크 CIDR |
extraPortMappings | 호스트-컨테이너 포트 매핑 |
kubeadmConfigPatches | kubeadm 설정 패치 |
Step 3: Molecule Default 시나리오 설정 수정
| |
Step 4: Molecule Default 시나리오 생성 플레이북 수정
| |
Step 5: Molecule Default 시나리오 삭제 플레이북 수정
| |
Step 6: Molecule Default 시나리오 환경 구축 플레이북 수정
| |
Step 7: Molecule Default 시나리오 검증 플레이북 수정
| |
Step 8: Molecule Default 시나리오 테스트
| |
고급 구성
다중 클러스터 테스트
| |
Helm Chart 테스트
| |
CI/CD 통합
GitHub Actions
| |
문제 해결
KIND 클러스터 생성 실패
| |
메모리 부족 문제
| |
네트워크 문제
| |
주의사항
KIND 이미지 구성
KIND는 base 이미지와 node 이미지로 구성됩니다:
- Base 이미지: Ubuntu, systemd, containers 등 쿠버네티스가 동작할 수 있는 기반 프로그램이 설치된 이미지
- Node 이미지: Base 이미지를 기준으로 Kubernetes 클러스터 동작을 위한 이미지
Ubuntu 버전 등의 기반 패키지 버전을 실제 환경과 동일하게 맞추려면 KIND 문서를 참고하여 직접 이미지를 빌드해야 합니다.
| |
리소스 제한
KIND 클러스터는 Docker 컨테이너에서 실행되므로 호스트 시스템의 리소스를 공유합니다. 대규모 테스트 시 메모리와 CPU 사용량에 주의하세요.
결론
Ansible Molecule과 KIND를 조합하면 로컬 환경에서 완전한 Kubernetes 테스트 환경을 구축할 수 있습니다. 이를 통해:
- 개발 생산성 향상: 빠른 피드백 루프로 개발 속도 개선
- 비용 절감: 클라우드 리소스 없이 완전한 테스트 수행
- CI/CD 통합: 자동화된 파이프라인에서 안정적인 테스트 수행
- 코드 품질 향상: 체계적인 테스트로 Ansible Role 신뢰성 확보
이 조합을 활용하여 Kubernetes 자동화 코드의 품질을 한 단계 높이세요.