CI_CD
Kafka Connect + 커스텀 SMT GitOps 통합 관리 전략 (InitContainer)
ipxy
2025. 4. 18. 16:09
728x90
initContainer는 Pod의 메인 컨테이너가 시작되기 전에 실행되는 준비용 컨테이너입니다.
즉, Kafka Connect가 실행되기 전에 SMT JAR을 다운로드하거나, 초기화 작업을 처리할 수 있습니다.
🎯 InitContainer 활용 목적 (Kafka Connect SMT에 적용 시)
사용 | 이유 설명 |
📥 SMT JAR 원격 다운로드 | S3, GitHub, HTTP 서버 등에서 jar 파일 다운로드 |
🔁 동적 SMT 교체 가능 | CI에서 JAR을 올려두고, initContainer가 다운 |
📦 Docker 이미지에 SMT 포함 안 해도 됨 | 이미지 관리 간편화 |
🔧 CI/CD 연동 가능 | 버전 태그로 URL만 바꾸면 자동 배포 가능 |
📁 예제 구조
kafka-connect-gitops/
├── helm/
│ └── kafka-connect-values.yaml
├── connectors/
│ └── custom-source.json
├── scripts/
│ └── build-and-publish-smt.sh # CI에서 JAR S3 업로드
⚙️ Helm values.yaml 예제 (InitContainer 방식)
pluginPaths: "/opt/kafka/plugins,/opt/kafka/custom-smt"
extraVolumeMounts:
- name: custom-smt
mountPath: /opt/kafka/custom-smt
extraVolumes:
- name: custom-smt
emptyDir: {}
initContainers:
- name: download-smt
image: curlimages/curl:latest
command:
- sh
- -c
- |
echo "📥 SMT 다운로드 시작..."
curl -L -o /smt/kafka-connect-custom-smt.jar https://my-s3-bucket/smt/kafka-connect-custom-smt.jar
echo "✅ SMT 다운로드 완료"
volumeMounts:
- name: custom-smt
mountPath: /smt
emptyDir는 Pod가 살아있는 동안 유지되는 임시 볼륨입니다.
✅ 장점
항목 | 장점 |
💡 유연성 | JAR 버전 교체 쉬움 (URL만 바꾸면 됨) |
📦 경량 배포 | Kafka Connect 이미지를 수정할 필요 없음 |
🔁 GitOps 친화적 | SMT 버전도 Git으로 관리 가능 |
🔧 Helm에서 관리 쉬움 | values.yaml로 모두 통합 가능 |
🔐 보안 URL 대응 가능 | presigned S3 URL 등도 사용 가능 |
⚠️ 주의사항
주의점 | 설명 |
💀 Pod 재시작 시마다 다운로드 | 이미지 캐싱이 아님 → 외부 서버 다운 시 영향 |
🔄 SMT 변경은 rollout 필요 | SMT를 바꾸려면 Kafka Connect 재시작 필수 |
📡 네트워크 필요 | curl 실행을 위해 네트워크 연결 필요 (내부망에서 호스팅 가능) |
🛠 SMT 배포 파이프라인 예시
- CI/CD에서 SMT JAR 빌드 후 S3/HTTP 서버에 업로드
- Helm values.yaml의 SMT 다운로드 URL 업데이트
- GitOps 도구(ArgoCD 등)가 자동 배포
- Kafka Connect 재시작되며 SMT 자동 반영
✅ 결론: InitContainer 방식이 적합한 경우
조건 | 설명 |
SMT를 자주 교체해야 함 | 버전화해서 URL 교체만 하면 반영됨 |
Kafka Connect 이미지 건드리고 싶지 않음 | SMT는 외부에서 동적으로 받음 |
GitOps + CI/CD 전략을 쓰고 있음 | SMT도 코드로 관리 가능 |
공유 PVC나 RWX 스토리지 인프라 없음 | emptyDir만으로도 충분 |
728x90