이미지를 가져올 때 포드에서 ‘ pull QPS exceeded ’ 오류가 발생하는 이유는 무엇인가요?
포드가 시작될 때, “ pull QPS exceeded ”와 같은 메시지와 함께 이미지 가져오기 작업이 제한되고 있음을 나타내는 오류가 표시될 수 있습니다.
컨테이너 이미지를 가져와야 하는 파드를 배포할 때 다음과 같은 증상이 나타날 수 있습니다:
- 포드 시작 시 ‘
pull QPS exceeded’가 포함된 오류 메시지 - 특히 여러 개의 큰 이미지를 가져올 때 느린 이미지 가져오기 시간
- 파드가
Running상태에 도달하는 데 예상보다 오래 걸립니다 - 이미지 풀 작업이 스로틀링되거나 속도가 제한되는 것처럼 보이는 경우
pull QPS exceeded 오류와 함께 이미지 불러오기 속도가 느려지는 가장 유력한 원인은 VPC 워커 노드가 디스크 I/O 대역폭 한계에 도달했기 때문입니다.
VPC 워커 노드는 구성에 따라 대역폭 제한이 다릅니다:
- 표준 워커 노드(보조 스토리지 제외): 디스크 I/O 작업 시 393Mbps(초당 49MB )로 제한됨
- 보조 스토리지가 있는 워커 노드: 선택한 스토리지 계층에 따라 대역폭 제한이 더 높음
여러 개의 파드가 동시에 대용량 컨테이너 이미지를 가져오려고 시도하는 경우:
- 각 이미지 풀 작업은 디스크 I/O 대역폭을 소비합니다
- 결합된 대역폭 수요로 인해 초당 49MB 제한이 빠르게 포화될 수 있습니다
- 한도에 도달하면 이미지 풀 작업 속도가 크게 느려집니다
- Kubernetes 작업 속도를 조절하기 때문에 ‘
pull QPS exceeded’ 오류가 발생할 수 있습니다
VPC 워커 노드 대역폭 제한에 도달했는지 확인하려면 IBM Cloud 모니터링 기능을 사용하세요.
디스크 I/O 대역폭 확인
-
클러스터의 OpenShift 콘솔에서 관찰 → 메트릭으로 이동합니다.
-
다음 Prometheus 쿼리를 사용하여 디스크 읽기 및 쓰기 속도를 모니터링하세요:
irate(node_disk_read_bytes_total[2m]) + irate(node_disk_written_bytes_total[2m]) -
결과를 해석합니다:
- 49M (초당 49MB )에 근접하거나 이에 근접하는 값을 표시하는 디바이스가 있다면 대역폭 제한에 도달한 것입니다.
- 이미지 풀 작업 중 이 한계치 또는 그 근처에서 값이 지속되면 대역폭 포화 상태를 확인합니다.
- 이 한도까지 여러 번 급증하면 대역폭 제약이 반복된다는 의미입니다.
이미지 풀 시간 확인
이미지 가져오기 시간을 직접 확인할 수도 있습니다:
oc get events -A | grep -E "Successfully pulled image"
이 명령은 각 이미지 풀에 걸린 시간을 표시하여 느린 풀을 식별하는 데 도움이 됩니다.
문제 해결
기본 솔루션: 보조 스토리지와 함께 워커 풀 사용
권장되는 솔루션은 보조 스토리지가 연결된 워커 풀을 사용하는 것입니다. 10iops-tier 을 사용하는 보조 스토리지는 부팅 디스크와 경쟁하지 않는 전용 I/O 대역폭을 제공하므로 동시 이미지 풀의 처리량이 훨씬 증가하고 파드 시작 시간이 빨라집니다.
-
보조 스토리지로 새 작업자 풀을 만듭니다.
- 새 워커 풀을 만들 때 보조 저장소가 있는 플레이버를 선택합니다.
- 최적의 성능을 위해
10iops-tier스토리지 옵션 중 하나를 사용하세요.
-
워크로드 마이그레이션 를 새 풀에 추가합니다.
-
마이그레이션이 완료된 후 기존 작업자 풀을 비우고 제거합니다.
추가 고려사항
보조 스토리지로 업그레이드하는 것이 기본 솔루션이지만, 다른 방법을 사용할 수도 있습니다:
- 이미지 크기 줄이기
- 다단계 빌드 사용 및 레이어 최소화
- 이미지 캐싱 사용
- 자주 사용하는 이미지를 워커 노드에 미리 풀링하기
- 최적화 imagePullPolicy
- 불필요한 풀을 줄이도록 포드 사양을 구성하세요:
- 이미지가 노드에 아직 존재하지 않는 경우에만
imagePullPolicy: IfNotPresent을 사용하여 이미지를 가져옵니다. - 특별히 매번 최신 버전을 가져와야 하는 경우가 아니라면
imagePullPolicy: Always을 사용하지 마세요. - 프로덕션 워크로드의 경우
IfNotPresent과 결합된latest이 아닌 특정 이미지 태그를 사용하여 풀을 최소화하세요.
- 이미지가 노드에 아직 존재하지 않는 경우에만
- 모니터링 및 알림 설정
- 초당 49MB에 육박하는 높은 디스크 I/O 속도가 지속될 경우 알림을 설정하세요.
- 배포 지표의 일부로 이미지 풀 시간을 모니터링하세요.
- 포드 시작 시간을 추적하여 성능 저하를 파악하세요.