• 문제 상황

      k8s kafka pod 재생성.png

      k8s kafak 에러 로그.png

    • k8s 배포 후 kafka pod가 정상 구동되지 않고 CrashLoopBackOff 상태에 빠지며 RESTARTS 횟수가 계속 증가함 (그림 1 참조)

    • kubectl logs 확인 결과, **"**port is deprecated. Please use listeners**"** 라는 에러 메시지가 출력되며 프로세스가 종료됨 (그림 2 참조)

  • 원인

    • K8s의 Service Discovery 기능과 Kafka Docker 이미지의 설정 스크립트가 충돌하면서 발생
    • K8s는 Service를 생성하면, 해당 서비스와 연결된 Pod들에게 [SERVICE_NAME]_PORT 형태의 환경 변수를 자동으로 주입
    • Kafka Docker 이미지는 KAFKA_PORT라는 환경 변수를 Kafka의 포트 번호 값으로 판단
    • Kafka Docker 이미지가 기대하는 숫자값과 달리 K8s가 주입한 Kafka의 URL이 주입되어 에러 발생
  • 해결

    • kafka.yaml 에서 enableServiceLinks: false 을 추가하여 환경 변수 자동 주입 기능을 끔
    • 변경 후 Pod가 정상적으로 Running 상태로 전환된 것과 로그 에러 소멸 확인
  • 참고 자료

    https://kubernetes.io/ko/docs/concepts/services-networking/service/#환경-변수

    https://github.com/wurstmeister/kafka-docker/issues/122