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 배포 파이프라인 예시

  1. CI/CD에서 SMT JAR 빌드 후 S3/HTTP 서버에 업로드
  2. Helm values.yaml의 SMT 다운로드 URL 업데이트
  3. GitOps 도구(ArgoCD 등)가 자동 배포
  4. Kafka Connect 재시작되며 SMT 자동 반영

✅ 결론: InitContainer 방식이 적합한 경우

 

조건  설명
SMT를 자주 교체해야 함 버전화해서 URL 교체만 하면 반영됨
Kafka Connect 이미지 건드리고 싶지 않음 SMT는 외부에서 동적으로 받음
GitOps + CI/CD 전략을 쓰고 있음 SMT도 코드로 관리 가능
공유 PVC나 RWX 스토리지 인프라 없음 emptyDir만으로도 충분

 

728x90