Dataflow의 커스텀 컨테이너 문제 해결

이 문서에서는 Dataflow에서 커스텀 컨테이너를 사용할 때 발생할 수 있는 문제의 문제 해결 안내를 제공합니다. 컨테이너나 작업자가 시작되지 않는 문제에 중점을 둡니다. 작업자가 작업을 시작할 수 있고 작업을 진행 중인 경우 파이프라인 문제 해결을 위한 일반 지침을 따르세요.

지원을 요청하기 전에 컨테이너 이미지와 관련된 문제가 없는지 다음과 같이 확인해 보세요.

  • 컨테이너 이미지를 로컬에서 테스트하는 단계를 따릅니다.
  • 작업 로그 또는 작업자 로그에서 오류를 검색하고, 발견된 오류를 일반적인 오류 안내에서 찾아봅니다.
  • 파이프라인을 시작하는 데 사용하는 Apache Beam SDK 버전과 언어 버전이 커스텀 컨테이너 이미지의 SDK 버전과 일치하는지 확인합니다.
  • Java를 사용하는 경우 파이프라인을 시작하는 데 사용하는 Java 주 버전이 컨테이너 이미지에 설치된 버전과 일치하는지 확인합니다.
  • Python을 사용하는 경우 파이프라인을 실행하는 데 사용하는 Python 주-부 버전이 컨테이너 이미지에 설치된 버전과 일치하며 이미지에 충돌하는 종속 항목이 없는지 확인합니다. pip check를 실행하여 확인할 수 있습니다.

커스텀 컨테이너와 관련된 작업자 로그 찾기

로그 탐색기를 사용해서 Dataflow 작업자 로그에서 컨테이너와 관련된 오류 메시지를 찾습니다.

  1. 로그 이름을 선택합니다. 커스텀 컨테이너 시작 오류는 다음 중 하나에 속할 가능성이 높습니다.

    • dataflow.googleapis.com/kubelet
    • dataflow.googleapis.com/docker
    • dataflow.googleapis.com/worker-startup
    • dataflow.googleapis.com/harness-startup
  2. Dataflow Step 리소스를 선택하고 job_id를 지정합니다.

Error Syncing pod... 로그 메시지가 표시되면 일반적인 오류 안내를 따릅니다. 로그 탐색기에서 다음 쿼리를 사용하면 Dataflow 작업자 로그에서 이러한 로그 메시지를 쿼리할 수 있습니다.

resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"

일반적인 문제

커스텀 컨테이너를 사용할 때 일반적인 문제는 다음과 같습니다.

컨테이너 이미지를 가져올 수 없어 작업에 오류가 있거나 작업이 실패함

Dataflow 작업자는 커스텀 컨테이너 이미지에 액세스할 수 있어야 합니다. 잘못된 URL, 잘못 구성된 사용자 인증 정보 또는 네트워크 액세스 권한 누락으로 인해 작업자가 이미지를 가져올 수 없으면 작업자 시작이 실패합니다.

일괄 작업에서 어떠한 작업도 시작되지 않고 여러 작업자가 순차적으로 시작되지 못하면 Dataflow가 작업을 실패로 처리합니다. 그렇지 않으면 Dataflow는 오류를 로깅하지만 장기 실행 작업 상태를 유지하기 위해 추가적인 조치를 취하지 않습니다.

이 문제를 해결하는 방법에 대한 자세한 내용은 Dataflow 오류 문제 해결 페이지의 이미지 pull 요청 실패 오류를 참조하세요.

작업자가 시작되지 않거나 작업이 진행되지 않음

일부 경우에는 오류로 인해 SDK 컨테이너 시작에 실패할 때 Dataflow에서 오류가 영구적이거나 치명적인지 확인할 수 없습니다. 그런 후 Dataflow는 작업자를 다시 시작하려고 시도합니다.

명백한 오류는 없지만 dataflow.googleapis.com/kubelet[topologymanager] RemoveContainer INFO 수준 로그가 표시된다면 커스텀 컨테이너 이미지가 일찍 종료되어 장기 실행 작업자 SDK 프로세스가 시작되지 않은 경우입니다.

작업자가 성공적으로 시작되었지만 작업이 수행되지 않는 경우 오류로 인해 SDK 컨테이너가 시작되지 않을 수 있습니다. 이 경우 진단 권장사항에 다음과 같은 오류가 표시됩니다.

Failed to start container

또한 작업자 로그에는 다음과 같은 줄이 포함되지 않습니다.

Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness

작업자 로그에서 구체적인 오류를 찾은 후 일반적인 오류 안내를 확인하세요.

이러한 문제의 일반적인 원인은 다음과 같습니다.

  • 종속 항목 문제로 인한 pip 설치 오류와 같은 패키지 설치 문제. 포드 동기화 중 오류 ... 'StartContainer' 실패를 참조하세요.
  • 사용된 컨테이너가 작업자 VM의 CPU 아키텍처와 호환되지 않으면 exec format error와 같은 오류가 표시될 수 있습니다. 자세한 내용은 포드 동기화 중 오류 ... "StartContainer" 실패를 참조하세요.
  • 커스텀 명령어 인수 또는 Dockerfile에 설정된 ENTRYPOINT 오류가 있습니다. 예를 들어 커스텀 ENTRYPOINT는 기본 부팅 스크립트 /opt/apache/beam/boot를 시작하지 않거나 이 스크립트에 인수를 적절하게 전달하지 않습니다. 자세한 내용은 컨테이너 진입점 수정을 참조하세요.
  • 출시 환경과 런타임 환경 간에 Apache Beam SDK 버전이 일치하지 않을 때 오류가 발생합니다. 하나의 실패 모드에서 Apache Beam SDK 파이프라인 옵션에 설정된 기본값이 인식되지 않을 수 있습니다. 예를 들어 작업자 로그에 sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15')과 같은 오류가 표시될 수 있습니다. 문제를 해결하려면 컨테이너 이미지에 파이프라인을 출시하는 데 사용하는 것과 동일한 버전의 Apache Beam SDK를 설치하세요. 자세한 내용은 실행 환경을 런타임 환경과 호환되도록 만들기를 참조하세요.