GitLab CI + Kubernetes: 자동 확장 및 무중단 배포의 마법 🚀
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- DevOps 엔지니어 및 클라우드 아키텍트
- 무중단 배포, 자동 확장, 인프라 코드화(IaC)에 관심 있는 개발자
- 중간~고급 수준의 기술 이해도 필요
핵심 요약
- GitLab CI/CD + Kubernetes 연동으로 Zero Downtime Deployments와 자동 확장(Horizontal Pod Autoscaler)을 구현할 수 있음.
- GitOps 패턴을 통해 인프라를 코드로 관리하며,
GitLab Agent
를 활용한 보안한 클러스터 연결 가능. .gitlab-ci.yml
파이프라인을 통해 Docker 빌드 → 배포 → 자동 확장까지 하나의 흐름으로 처리.
섹션별 세부 요약
- Kubernetes 클러스터 연결 설정
- GitLab의 Infrastructure > Kubernetes 메뉴에서 클러스터 추가.
kubeconfig
파일 직접 입력 또는 GitLab이 자동 생성 가능.GitLab Agent
설치 명령어:
```bash
helm upgrade --install gitlab-agent gitlab/gitlab-agent \
--namespace gitlab-agent \
--set image.tag=v16.0.0 \
--set config.token=YOUR_AGENT_TOKEN
```
- CI/CD 파이프라인 구성
.gitlab-ci.yml
에서 Docker 빌드 → Kubernetes 배포 → HPA 적용 순서로 구성.- 예시 스크립트:
```yaml
deploy:
stage: deploy
script:
- kubectl apply -f kubernetes/deployment.yaml
- kubectl apply -f kubernetes/hpa.yaml
```
- Horizontal Pod Autoscaler(HPA) 설정
hpa.yaml
파일을 통해 CPU 사용률 50% 기준으로 2~10개 Pod 자동 확장 설정.- 예시 설정:
```yaml
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
```
- 클라우드 클러스터 자동 확장
- AWS/GCP 클러스터에서 Cluster Autoscaler 사용 시, Pod 스케줄 불가 시 자동 노드 추가.
- 롤백 테스트:
```bash
kubectl rollout undo deployment/myapp
```
- 실무 사례: Acme Corp의 성공
- Black Friday 트래픽 폭주 시 10배 증가 처리.
- Canary Deployments 및 Spot 인스턴스 사용으로 비용 절감.
- GitLab 모니터링으로 메모리 누수 사전 감지.
결론
- GitLab CI/CD + Kubernetes는 자동 확장, 무중단 배포, GitOps를 통해 운영 부담을 최소화함.
- 실무 적용 시 .gitlab-ci.yml
파이프라인과 hpa.yaml
설정 파일을 그대로 활용하고, RBAC 권한 제한으로 보안 강화.
- Slack과 연동한 ChatOps를 통해 채팅으로 배포 트리거 가능.