Lakehosue, Jenkins 역할

Jeonghak Cho·2025년 8월 18일

Bigdata

목록 보기
27/30

Jenkins on Kubernetes

젠킨스 주요 개념

젠킨스(Jenkins)는 오픈소스 CI/CD(지속적 통합·지속적 배포) 자동화 서버로, 개발자가 소스 코드를 변경하면 빌드·테스트·배포 과정을 자동으로 실행해 주는 도구이다.

개념설명
CI (Continuous Integration)코드 변경 사항을 자주 통합하고, 자동으로 빌드 및 테스트하여 문제를 빠르게 발견
CD (Continuous Delivery/Deployment)검증된 코드를 자동으로 배포까지 이어가는 프로세스
파이프라인(Pipeline)빌드 → 테스트 → 배포 단계를 정의한 자동화 워크플로
노드(Node)작업을 수행하는 서버(마스터·에이전트 포함)
에이전트(Agent)실제 빌드나 테스트를 실행하는 실행 환경
플러그인(Plugin)Git, Docker, Kubernetes, Slack 등과의 연동을 확장하는 모듈

CI/CD 개요

CI/CD는 소프트웨어 개발과 배포 과정을 자동화하고 품질을 높이기 위한 핵심 DevOps 실천 방법이다.

CI/CD 용어

용어풀네임핵심 개념
CIContinuous Integration개발자가 자주(하루에도 여러 번) 코드를 통합하고 자동으로 빌드·테스트하여 문제를 조기 발견
CDContinuous Delivery / Continuous DeploymentCI 결과를 기반으로, 운영 환경까지 자동으로 전달·배포하는 단계

CI/CD 흐름

[개발자가 코드 변경] 
      ↓
[버전 관리 시스템(Git)에 푸시]
      ↓
[CI 서버(Jenkins, GitLab CI 등) 자동 빌드 & 테스트]
      ↓
[CD 단계: 스테이징 → 운영 환경 배포]

CD (Continuous Delivery / Deployment) 차이

구분Continuous DeliveryContinuous Deployment
배포 자동화 범위운영 직전(스테이징까지)운영까지 전부 자동
운영 배포 트리거사람이 승인 후 실행코드 통합 후 자동
장점안정성·통제력 높음완전 자동화, 릴리즈 속도 최상
사용 예금융권, 보수적인 조직스타트업, SaaS 서비스

CI/CD 파이프라인 예시

1. Git Push
2. 빌드 (Maven, Gradle, npm 등)
3. 단위 테스트
4. 코드 품질 검사 (SonarQube)
5. Docker 이미지 생성
6. 이미지 레지스트리에 푸시 (Harbor, ECR 등)
7. 스테이징 환경 배포
8. 운영 환경 배포 (승인 또는 자동)

CI/CD 장점

  • 개발 속도 향상: 빌드·테스트·배포 반복을 자동화
  • 품질 안정: 문제 조기 발견 및 수정
  • 릴리즈 빈도 증가: 하루에도 여러 번 배포 가능
  • 팀 협업 개선: 코드 충돌과 재작업 감소

Jenkins on Kubernetes 개요

데이터 파이프라인·CI/CD 환경에서 젠킨스를 쿠버네티스에서 운영하면, 전통적인 VM/온프레 설치 방식 대비 자동 확장, 컨테이너 기반 빌드, 배포·업데이트 자동화, 고가용성의 장점이 생긴다. 특히 Spark·Kafka·MinIO 같이 컨테이너로 운영하는 데이터 플랫폼과 함께 쓰면, 네트워크·스토리지·보안 측면에서 시너지가 크다.

온프레 VM 기반 Jenkins와 쿠버네티스 기반 Jenkins 비교

항목온프레 VM 기반 Jenkins쿠버네티스 기반 Jenkins
설치/업데이트수동 설치, 수동 버전 업그레이드 필요Helm Chart, Operator로 설치·업데이트 자동화
빌드 에이전트 확장고정된 빌드 서버 수, 확장시 수동 증설빌드 요청 시 Pod 자동 생성·삭제 (Auto-scaling)
리소스 활용 효율유휴 서버 리소스 낭비Job 끝나면 Pod 제거 → 리소스 회수
빌드 환경 다양성에이전트 OS/패키지 직접 설치 필요Job마다 다른 빌드 이미지 사용 가능 (Java, Python, Spark 등)
스토리지 관리로컬 디스크 또는 NFS 기반, 마이그레이션 번거로움PVC + S3/MinIO 연동으로 유연한 저장소 사용
배포 자동화 연계외부 스크립트, SSH, API 호출 필요ArgoCD/Tekton 등 GitOps 툴과 네이티브 연동
장애 복구서버 장애 시 수동 복구StatefulSet + PV로 자동 재배포 및 데이터 보존
네트워크 성능외부 서비스 접근 시 방화벽/라우팅 필요Spark, Kafka, MinIO 등 내부 서비스와 저지연 통신
운영 비용서버별 라이프사이클 관리, 고정 자원 유지비 발생필요 시만 리소스 사용 → 비용 절감 가능
보안 및 격리같은 서버에서 Job 간 환경 오염 가능성컨테이너 격리로 Job 환경 독립 보장

Jenkins HA 체크리스트

아래는 쿠버네티스 Jenkins HA 배포 전 점검 해야할 항목들이다.

구분점검 항목
아키텍처 설계Jenkins 마스터를 StatefulSet으로 구성
JENKINS_HOME이 PV에 마운트됨
빌드 에이전트 Pod Template 설정 완료
운영/테스트/개발 Namespace 분리
스토리지 & 백업StorageClass와 PVC 정책 검증 완료
Jenkins 설정/플러그인/Job 데이터 백업 자동화 구성
PVC 스냅샷 또는 S3/MinIO 백업 정책 적용
빌드 아티팩트용 별도 버킷 구성
네트워크 & 보안Ingress + HTTPS 적용
내부 서비스 접근은 K8s Service로만 허용
RBAC 최소 권한 부여
Jenkins Secret을 K8s Secret 또는 Vault로 관리
에이전트 운영Job별 빌드 이미지 지정 가능
빌드 완료 후 에이전트 Pod 자동 삭제 확인
Kaniko/Buildah/BuildKit 등 빌드 툴 포함 이미지 준비
GPU/특수 노드 라벨링 설정 완료
모니터링 & 로깅Prometheus + Grafana 메트릭 수집 구성
빌드 상태/큐 길이/실패율 대시보드 생성
Jenkins 로그 중앙집중 관리(Loki/ELK) 구성
고가용성 & 장애 대응HPA로 에이전트 자동 확장
PodDisruptionBudget 적용
마스터 장애 시 자동 재배포 테스트 완료
DR 시나리오 문서화
CI/CD 연계Git webhook → Jenkins 빌드 → ArgoCD 연동 테스트 완료
빌드 캐시를 S3/MinIO로 공유하도록 구성

Lakehouse 에서 Jenkins 활용

Jenkins가 배포·스케줄링·검증·운영까지 전부 오케스트레이션한다. Kafka, Spark, Iceberg, MinIO, Trino 같은 오픈소스 조합에서 Jenkins가 “Glue” 역할을 한다.

데이터 파이프라인 CI/CD

Kafka → Spark → Iceberg로 가는 처리 코드를 자동으로 빌드·배포한다.

코드 배포

  • Spark/Flink/Trino 쿼리나 ETL 스크립트를 Git에서 받아 빌드 후 Docker 이미지 생성
  • Kubernetes나 YARN(있다면)에 Job 제출

자동 테스트

  • 개발 브랜치에서 Pull Request 시, Jenkins가 샘플 데이터로 Spark Job을 실행해 실패 여부 확인
[Git Commit][Jenkins Build Spark JAR][Push to Harbor][kubectl spark-submit][Iceberg 테이블 업데이트]

데이터 적재·갱신 자동화

Kafka에 들어온 스트리밍 데이터를 주기적으로 Iceberg에 적재하거나 최적화하는 작업을 스케줄링한다.

배치 적재

예를 들어, 매 1시간마다 Kafka Topic → Spark Batch → Iceberg Append

데이터 유지관리

  • Iceberg VACUUM 또는 OPTIMIZE 명령 주기적 실행
  • 스냅샷 삭제, 파티션 재작성(Compaction) 같은 작업을 Jenkins Job으로 등록

데이터 품질 검증

  • Spark로 처리한 데이터가 Iceberg에 반영되기 전에 품질 검증을 수행
  • Great Expectations, Deequ 등으로 데이터 검증
 “NULL 값 없음, ID 중복 없음” 검사 실패 시 Jenkins 파이프라인 중단
  • 품질 통과 시만 Iceberg에 Commit

인프라·플랫폼 관리 자동화

Lakehouse 구성 요소(Kafka, Spark, MinIO, Hive Metastore 등) 환경 자체를 관리한다.

  • Helm + Jenkins → Kubernetes에 Kafka, Spark, MinIO 배포
  • Terraform + Jenkins → S3 버킷, 네트워크, 서버 자원 생성
  • ConfigMap, Secret, ACL 업데이트 자동화

운영·모니터링 연동

데이터 파이프라인 실행 결과를 모니터링하고, 문제 시 알림을 보낸다.

  • Spark Job 실행 로그를 수집해 Slack, Teams 알림
  • Kafka Lag 모니터링 + 특정 임계값 초과 시 Jenkins가 Spark Job 재기동
  • Iceberg 테이블 변경 로그를 S3에서 읽어와 Slack 알림

0개의 댓글