AWS용 GKE의 단계적 노드 종료

버전 1.26부터 AWS용 GKE에서 단계적 노드 종료를 자동으로 사용 설정합니다. 이 기능은 노드 종료 중에 포드의 단계적 종료를 관리합니다. 단계적 종료를 사용하면 포드에서 상태를 저장하고 노드가 종료되기 전에 리소스를 해제할 수 있습니다. 포드를 종료하는 이 방법은 데이터 손실 위험을 최소화합니다. 또한 종료 중인 포드에 의존하거나 상호작용하는 다른 포드 및 서비스에 대한 중단 위험을 최소화하므로 클러스터 복원력이 향상됩니다.

작동 방식

예약된 유지보수, 노드 확장 또는 하드웨어 문제와 같은 이벤트가 노드 종료를 트리거합니다. kubelet 구성요소에서 이벤트를 감지하고 지정된 기간 동안 시스템 종료를 지연하도록 systemd에 지시하여 단계적 노드 종료 프로세스를 시작합니다. 이 지연으로 인해 노드에서 실행 중인 포드가 드레이닝되고 제거될 때까지 시간이 걸립니다.

단계적 노드 종료 목표는 노드가 종료되기 전에 비시스템 포드와 중요 시스템 포드 모두를 단계적으로 종료하는 것이며 다음과 같은 기본 설정이 사용됩니다.

  • ShutdownGracePeriod: 30초
  • ShutdownGracePeriodCriticalPods: 15초

이러한 설정은 비시스템 포드가 강제로 중지되기 전에 15초 동안 단계적으로 종료되도록 합니다. 중요 시스템 포드는 비시스템 포드가 종료된 후 15초 동안 종료됩니다. 하지만 이 기능은 최선의 방식으로 작동하므로 지정된 30초 내에 노드가 단계적으로 종료되지 않을 수도 있습니다.

트리거 및 제한사항

단계적 노드 종료를 트리거하는 이벤트에는 다음과 같은 계획된 이벤트가 포함됩니다.

  • 사용자 명령에 따른 종료
  • 인스턴스 종료
  • 예약된 유지보수
  • 클러스터 축소

이러한 시나리오에서 kubelet은 노드 종료 이벤트를 감지하고 단계적 노드 종료 프로세스를 시작합니다.

반대로 단계적 노드 종료는 종료 명령어가 kubelet 구성요소에서 사용하는 systemd 차단 잠금 메커니즘을 트리거하지 않으면 활성화될 수 없습니다. 이러한 종류의 상황에 대한 예시에 다음이 포함됩니다.

  • 네트워크 연결 해제
  • 하드웨어 오작동
  • 메모리 또는 CPU와 같은 리소스 부족
  • 예기치 않은 정전

이러한 경우 노드가 갑자기 종료되어 중단 또는 데이터 손실이 발생할 수 있습니다.