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 이미지를 사용하는 클러스터의 첫 번째 노드 풀이면 노드 풀 생성이 타임아웃될 수 있습니다.

해결 방법

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

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

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

증상

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

원인

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

해결 방법

PLEG 실패에서 복구하고 재발을 방지하려면 다음 단계를 따르세요.

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

일관되지 않은 TerminationGracePeriod

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

증상

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

원인

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

해결 방법

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

네트워크 연결 문제

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

증상

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

원인

Windows Server 컨테이너 네트워킹은 종종 1500의 네트워크 MTU를 가정합니다. Google Cloud의 MTU인 1460과(와) 호환되지 않습니다.

해결 방법

컨테이너 네트워크 인터페이스 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 요청에 자세히 설명된 대로 최신 버전에서 크게 개선되었습니다.

다음 단계