Windows Server 노드 풀 문제 해결

Google Kubernetes Engine (GKE)에서 Windows Server 노드 풀을 실행할 때 포드가 시작되지 않거나, Windows 컨테이너 이미지를 가져오는 중 오류가 발생하거나, 네트워크 연결 문제가 발생하거나, 노드가 시작되지 않는 등의 문제가 발생할 수 있습니다.

이 문서를 사용하여 이러한 일반적인 문제를 진단 및 해결하고 Windows 기반 애플리케이션을 안정적으로 실행하세요.

이 정보는 Windows 노드 풀로 GKE 클러스터를 관리하는 플랫폼 관리자 및 운영자와 GKE에서 Windows 기반 애플리케이션을 배포하고 실행하는 애플리케이션 개발자에게 중요합니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE 사용자 역할 및 태스크를 참조하세요.

일반적인 안내는 포드 디버깅 및 서비스 디버깅에 대한 Kubernetes 문서를 참고하세요.

Containerd 노드 문제

containerd 노드 이미지를 사용하는 경우 문제를 해결하는 방법에 대한 자세한 내용은 Windows Server 노드 풀의 문제를 참고하세요.

Windows 포드 시작 실패

기본 이미지와 Windows Server 호스트 OS 버전 간의 비호환성으로 인해 포드가 시작되지 않을 수 있습니다.

증상

  • Windows 포드가 시작되지 않습니다.
  • 노드가 NotReady 상태를 보고합니다.

원인

컨테이너 이미지가 호스트 노드의 Windows Server 버전과 호환되지 않는 이전의 기본 Windows 이미지에 빌드되었습니다.

해결 방법

2020년 3월 이후의 Windows 업데이트가 포함된 기본 Windows 이미지를 사용하여 컨테이너 이미지를 빌드합니다. Microsoft 컨테이너 호환성에 대한 자세한 내용은 2020년 2월 Windows Server 컨테이너 비호환성 문제에 대한 Microsoft 문서를 참조하세요.

이미지 가져오기 오류

Windows Server 컨테이너 이미지는 Linux 이미지보다 훨씬 큰 경우가 많아 시간 초과가 발생할 수 있습니다.

증상

  • Failed to pull image 또는 context cancelled과 같은 오류 메시지
  • 포드에 ErrImagePull 상태가 표시됩니다.

원인

Windows Server 서버 컨테이너 이미지와 이를 구성하는 개별 레이어는 클 수 있습니다. 크기로 인해 컨테이너 레이어를 다운로드하고 추출할 때 kubelet 에이전트가 시간 초과되고 실패할 수 있습니다.

해결 방법

이러한 이미지 가져오기 실패를 해결하려면 다음 해결 방법을 시도해 보세요.

  • 노드 CPU 늘리기: 컨테이너 추출은 코어에서 병렬로 실행되므로 코어가 많은 머신 유형을 사용하면 전체 풀 시간이 줄어듭니다.
  • 이미지 레이어 최적화: Docker 레이어 캐싱을 개선하고 이미지 가져오기 재시도가 성공할 가능성을 높이려면 애플리케이션 계층을 더 작은 레이어로 나눕니다. 자세한 내용은 Docker 스토리지 드라이버 문서의 이미지 및 레이어를 참고하세요.
  • 수동 가져오기 사용: 포드를 만들기 전에 Windows Server 노드에 연결하고 컨테이너 이미지에서 수동으로 docker pull 명령어를 실행합니다.

일반적인 도움말은 이미지 가져오기 문제 해결을 참고하세요.

지원 종료된 이미지 계열

GKE는 공급업체 지원이 종료되면 이전 Windows Server 이미지 패밀리를 주기적으로 지원 중단합니다. 이 지원 중단으로 인해 해당 이미지를 사용하여 노드 풀을 만들 수 없습니다.

증상

Windows 이미지로 노드 풀을 만들면 다음과 비슷한 오류가 발생합니다.

WINDOWS_SAC image family for 1.18.20-gke.501 has reached end of life, newer
versions are still available.

원인

선택한 Windows Server 이미지 계열이 더 이상 GKE에서 지원되지 않습니다.

해결 방법

사용 가능하고 지원되는 Windows 이미지를 선택합니다. GKE 및 Windows 버전 매핑에 설명된 대로 gcloud container get-server-config 명령어를 사용하여 GKE Windows 노드 이미지의 지원 종료 날짜를 확인할 수 있습니다.

노드 풀 생성 중 시간 초과

여러 Windows Server 노드를 동시에 초기화하면 시간 초과가 발생할 수 있습니다.

증상

노드 풀 생성 작업이 완료되기 전에 시간이 초과됩니다.

원인

다수의 노드 (예: 500)를 만들며 Windows Server 이미지를 사용하는 클러스터의 첫 번째 노드 풀이면 노드 풀 생성이 타임아웃될 수 있습니다.

해결 방법

노드 풀을 만들 때 초기 노드 수를 줄입니다. 노드 풀이 생성된 후 노드 수를 늘릴 수 있습니다.

PLEG is not healthy 오류와 함께 NotReady 상태가 된 Windows 노드

단일 노드에서 여러 Windows 컨테이너를 빠르게 예약하면 포드 수명 주기 이벤트 생성기 (PLEG)가 과부하될 수 있습니다.

증상

  • Windows 노드가 NotReady 상태가 됩니다.
  • 이벤트 또는 로그에 PLEG is not healthy 오류 메시지가 표시됩니다.

원인

여러 포드가 단일 Windows 노드에서 매우 빠르게 시작될 때 알려진 Kubernetes 문제가 발생합니다.

해결 방법

PLEG 오류를 복구하고 재발을 방지하려면 다음 단계를 따르세요.

  • 영향을 받는 Windows Server 노드를 다시 시작합니다.
  • Windows 포드 생성을 30초마다 포드 1개 이하로 제한합니다.

일관성 없음 TerminationGracePeriod

Windows 컨테이너 종료 타이머와 Kubernetes 유예 기간 설정 간의 차이로 인해 컨테이너가 예기치 않게 종료될 수 있습니다.

증상

TerminationGracePeriodSeconds 필드에 구성된 기간이 만료되기 전에 Windows에서 컨테이너를 강제 종료합니다.

원인

컨테이너의 내부 Windows 시스템 제한 시간이 Kubernetes 포드 매니페스트에 지정된 유예 기간과 다릅니다.

해결 방법

이미지 빌드 시간에 컨테이너 로컬 레지스트리 키를 수정하여 Windows 컨테이너 제한 시간을 수정합니다. 포드 매니페스트의 TerminationGracePeriodSeconds 필드를 적절하게 정렬합니다.

네트워크 연결 문제

Windows Server 컨테이너 네트워킹과 Google Cloud 네트워크 간의 최대 전송 단위 (MTU) 크기 불일치로 인해 패킷이 손실될 수 있습니다.

증상

Windows Server 컨테이너 내에서 실행되는 애플리케이션에 네트워크 연결 실패 또는 패킷 삭제가 발생합니다.

원인

Windows Server 컨테이너 네트워킹은 Google Cloud의 MTU인 1460과 호환되지 않는 1500의 네트워크 MTU를 가정하는 경우가 많습니다.

해결 방법

컨테이너 네트워크 인터페이스 MTU와 Windows Server 노드 네트워크 인터페이스 MTU 값을 모두 1460 이하로 구성합니다. 자세한 내용은 Compute Engine 문서의 Windows 컨테이너의 알려진 문제를 참조하세요.

노드 시작 문제

새 Windows Server 인스턴스에서 초기화 스크립트를 완료하거나 컨트롤 플레인에 등록하지 못할 수 있습니다.

증상

Windows Server 노드가 초기화되지 않거나 클러스터에 가입하지 못합니다.

원인

노드 초기화 중에 오류가 발생하면 노드가 시작되거나 클러스터에 참여할 수 없습니다.

해결 방법

문제를 일으키는 시작 오류를 확인하려면 노드의 직렬 포트 출력을 검토하세요.

gcloud compute instances get-serial-port-output NODE_NAME \
    --zone=COMPUTE_ZONE

다음을 바꿉니다.

1.24 이하 버전을 실행하는 클러스터가 있는 Windows 노드에서 간헐적으로 연결할 수 없는 서비스

버전 1.24 이하를 실행하는 클러스터에서 kube-proxy 구성요소를 다시 시작하면 호스트 네트워크 서비스(HNS) 부하 분산기 규칙이 다시 처리되는 동안 임시 네트워크 라우팅 지연이 발생합니다.

증상

Windows 노드에서 실행되는 포드에서 서비스에 간헐적으로 연결할 수 없습니다.

원인

버전 1.24 이하를 실행하는 GKE 클러스터의 경우 이벤트로 인해 Windows 노드에서 kube-proxy 구성요소가 다시 시작되면(예: 노드 시작, 노드 업그레이드, 수동 다시 시작) 구성요소가 모든 HNS 부하 분산기 규칙을 동기화하고 다시 만들어야 합니다. 클러스터에 이러한 규칙이 많은 경우 규칙당 약 30초 동안 처리하는 데 상당한 지연이 발생할 수 있습니다. 이 동기화 지연 중에 해당 노드에서 실행되는 포드에서 서비스에 간헐적으로 연결할 수 없습니다. 자세한 내용은 GitHub의 원래 문제를 참고하세요.

해결 방법

클러스터 컨트롤 플레인을 버전 1.25 이상으로 업그레이드합니다. 이 동작은 최신 버전에서 크게 개선되었으며, 자세한 내용은 GitHub의 pull 요청을 참고하세요.

다음 단계

  • 문서에서 문제 해결 방법을 찾을 수 없으면 지원 받기를 참조하여 다음 주제에 대한 조언을 포함한 추가 도움을 요청하세요.