대규모 GKE 클러스터 계획


이 페이지에서는 대규모 클러스터를 계획하고 설계할 때 따를 수 있는 권장사항을 설명합니다.

대규모 GKE 클러스터를 계획하는 이유

Kubernetes를 포함한 모든 컴퓨터 시스템에는 아키텍처상의 몇 가지 한도가 있습니다. 이 한도를 초과하면 클러스터 성능에 영향을 주거나 다운타임이 발생할 수도 있습니다. 권장사항에 따라 권장 조치를 실행하여 클러스터가 규모에 맞춰 안정적으로 워크로드를 실행하도록 합니다.

여러 클러스터 간 워크로드 분할 권장사항

하나의 큰 클러스터에서 워크로드를 실행할 수 있습니다. 이 접근 방식은 여러 클러스터를 사용할 때보다 관리하기 쉽고 비용 효율적이며 리소스 사용률도 더 우수합니다. 하지만 워크로드를 여러 클러스터로 분할해야 하는 경우도 있습니다.

  • 멀티 클러스터 사용 사례를 검토하여 여러 클러스터를 사용하는 경우의 일반적인 요구사항과 시나리오를 자세히 알아보세요.
  • 또한 확장성 관점에서 아래 섹션에 설명된 한도 중 하나 또는 GKE 할당량 중 하나를 초과할 가능성이 있는 경우 클러스터를 분할합니다. GKE 한도에 도달할 위험을 낮추면 다운타임 또는 기타 안정성 문제의 위험을 줄일 수 있습니다.

클러스터를 분할하기로 결정한 경우 Fleet 관리를 사용하여 멀티 클러스터 Fleet 관리를 간소화합니다.

한도 및 권장사항

아키텍처에서 대규모 GKE 클러스터를 지원하도록 하려면 다음 한도 및 관련 권장사항을 검토하세요. 이러한 한도를 초과하면 클러스터 성능 저하 또는 안정성 문제가 발생할 수 있습니다.

이러한 권장사항은 설치된 확장 프로그램이 없는 모든 기본 Kubernetes 클러스터에 적용됩니다. 웹훅 또는 커스텀 리소스 정의(CRD)를 사용하여 Kubernetes 클러스터를 확장하는 것이 일반적이지만 클러스터 확장성을 제한할 수 있습니다.

다음 표는 기본 GKE 할당량 및 한도를 확장합니다. 또한 대규모 클러스터에 대한 오픈소스 Kubernetes 한도에 익숙해져야 합니다.

표에 나온 GKE 버전 요구사항은 노드와 제어 영역 모두에 적용됩니다.

GKE 한도 설명 권장사항
etcd 데이터베이스 크기 etcd 데이터베이스의 최대 크기는 6GB입니다. 수만 개의 리소스가 포함된 초대형 클러스터를 실행하는 경우 etcd 인스턴스가 이 한도를 초과할 수 있습니다. Google Cloud 콘솔에서 클러스터의 사용률 수준을 확인할 수 있습니다. 이 한도를 초과하면 GKE에서 해당 etcd 인스턴스가 비정상으로 표시될 수 있습니다. 그 결과 클러스터 제어 영역이 응답하지 않습니다.

이 한도를 초과하는 경우 Google Cloud 지원팀에 문의하세요.

유형별 etcd 객체의 총 크기 제공된 리소스 유형의 모든 객체의 총 크기는 800MB를 초과해서는 안 됩니다. 예를 들어 750MB의 포드 인스턴스와 750MB의 보안 비밀을 만들 수 있지만 850MB의 보안 비밀은 만들 수 없습니다. 800MB 넘게 객체를 만들면 Kubernetes 또는 맞춤설정된 컨트롤러가 초기화되지 않아 중단이 발생할 수 있습니다.

etcd에 저장되는 각 유형의 모든 객체의 총 크기를 800MB 아래로 유지하세요. 이러한 제한은 특히 많은 수의 크기가 큰 보안 비밀 또는 ConfigMap 또는 대용량 CRD를 사용하는 클러스터에 적용될 수 있습니다.

GKE Dataplane V2가 사용 설정되지 않은 클러스터의 서비스 수 다음 중 하나가 발생하면 kube-proxy에 사용되는 iptable 성능이 저하됩니다.
  • 서비스가 너무 많습니다.
  • 서비스 이면의 백엔드 수가 높습니다.

GKE Dataplane V2를 사용 설정하면 이 한도가 사라집니다.

클러스터에서 서비스 수를 10,000 아래로 유지하세요.

자세한 내용은 서비스를 사용하여 애플리케이션 노출을 참조하세요.

네임스페이스당 서비스 수 서비스에 대해 생성되는 환경 변수 수가 셸 한도를 초과할 수 있습니다. 이로 인해 시작 시 포드가 다운됩니다.

네임스페이스당 서비스 수를 5,000 아래로 유지하세요.

환경 변수를 채우지 않도록 선택할 수 있습니다. PodSpec에서 enableServiceLinks를 false로 설정하는 방법은 문서를 참조하세요.

자세한 내용은 서비스를 사용하여 애플리케이션 노출을 참조하세요.

GKE Dataplane V2가 사용 설정되지 않은 클러스터의 단일 서비스 이면의 포드 수

모든 노드에서 서비스 변경사항을 모니터링하기 위해 감시를 사용하는 kube-proxy가 실행됩니다. 클러스터가 클수록 에이전트에서 처리하는 변경 관련 데이터가 많습니다. 특히 노드가 500개를 초과하는 클러스터에서 볼 수 있습니다.

엔드포인트에 대한 정보는 별도의 EndpointSlices 간에 분할됩니다. 이러한 분할은 각 변경 시 전송되는 데이터 양을 줄여줍니다.

엔드포인트 객체는 계속 구성요소에 사용할 수 있지만 포드 1,000개를 초과하는 엔드포인트는 자동으로 잘립니다.

단일 서비스 이면의 포드 수를 10,000개 미만으로 유지합니다.

자세한 내용은 서비스를 사용하여 애플리케이션 노출을 참조하세요.

GKE Dataplane V2가 사용 설정된 클러스터의 단일 서비스 이면의 포드 수

GKE Dataplane V2에는 단일 서비스에서 노출되는 포드 수에 대한 한도가 포함됩니다.

GKE Dataplane V2를 사용할 때와 동일한 한도가 Autopilot 클러스터에 적용됩니다.

GKE 1.23 이하에서는 단일 서비스 이면의 포드 수를 1,000개 미만으로 유지합니다.

GKE 1.24 이상에서는 단일 서비스 이면의 포드 수를 10,000개 미만으로 유지합니다.

자세한 내용은 서비스를 사용하여 애플리케이션 노출을 참조하세요.

헤드리스 서비스당 DNS 레코드 수

헤드리스 서비스당 DNS 레코드 수는 kube-dnsCloud DNS 모두에서 제한됩니다.

헤드리스 서비스당 DNS 레코드 수를 kube-dns의 경우 1,000개 미만, Cloud DNS의 경우 3,500/2,000 (IPv4/IPv6) 미만으로 유지합니다.

모든 서비스 엔드포인트 수 모든 서비스의 엔드포인트 수가 한도에 도달할 수 있습니다. 이로 인해 프로그래밍 지연 시간이 늘거나 새 엔드포인트를 아예 프로그래밍하지 못할 수 있습니다.

모든 서비스의 모든 엔드포인트 수를 64,000개 미만으로 유지합니다.

GKE의 기본 데이터 영역인 GKE Dataplane V2는 현재 모든 서비스에서 엔드포인트가 64,000개로 제한된 eBPF 맵을 사용합니다.

클러스터당 수평형 포드 자동 확장 처리 객체 수

수평형 포드 자동 확장 처리(HPA)는 15초마다 처리됩니다.

HPA 객체가 300개를 초과하면 선형적으로 성능이 저하될 수 있습니다.

HPA 객체 수를 이 한도 이내로 유지하세요. 그렇지 않으면 HPA 처리 빈도가 선형적으로 저하될 수 있습니다. 예를 들어 GKE 1.22에서 2,000개의 HPA가 있으면 단일 HPA가 1분 40초마다 다시 처리됩니다.

자세한 내용은 리소스 사용률에 따른 자동 확장수평형 포드 자동 확장 확장성을 참조하세요.

노드당 포드 수 GKE에는 노드당 포드 256개라는 하드 한도가 있습니다. 단, 포드당 평균 컨테이너가 2개 이하인 것으로 가정합니다. 포드당 컨테이너 수를 늘리면 GKE가 컨테이너당 리소스를 더 할당하므로 이 한도가 줄어들 수 있습니다.

10개의 포드당 vCPU가 최소 하나 이상인 워커 노드를 사용하는 것이 좋습니다.

자세한 내용은 클러스터 또는 노드 풀 수동 업그레이드를 참조하세요.

포드 변경 비율

Kubernetes에는 확장 요청에 대한 응답으로 포드(포드 제거)를 만들거나 삭제하는 비율에 영향을 주는 내부 한도가 있습니다. 서비스의 일부인 포드 삭제와 같은 추가 요소도 이러한 포드 제거 비율에 영향을 줄 수 있습니다.

노드 수가 최대 500개인 클러스터의 경우 평균적으로 초당 포드 생성 비율은 20개, 초당 포드 삭제 비율은 20개입니다.

노드 수가 500개를 초과할 경우 평균적으로 초당 포드 생성 비율은 100개, 초당 포드 삭제 비율은 100개입니다.

워크로드 확장 방법을 계획할 때 포드 생성 및 삭제 비율 한도를 고려하세요.

포드는 다른 리소스 유형과 동일한 삭제 처리량을 공유합니다(예: EndpointSlices). 서비스의 일부로 포드를 정의할 때 삭제 처리량을 줄일 수 있습니다.

클러스터 자동 확장 처리가 활용률이 낮은 노드에서 포드를 효과적으로 삭제할 수 있도록 하려면 PodDisruptionBudgets와 지나치게 긴 종료 시간 유예 기간을 피하는 것이 좋습니다.

와일드 카드 톨러레이션(toleration)도 삭제 중인 노드에 워크로드를 예약할 수 있으므로 권장하지 않습니다.

열려 있는 감시

노드는 포드에 대해 구성하는 모든 보안 비밀ConfigMaps에 대해 감시를 만듭니다. 모든 노드에서 생성되는 감시 조합의 총량에 따라 클러스터 제어 영역에 상당한 부하가 발생할 수 있습니다.

클러스터당 감시 수를 200,000개 넘게 설정하면 클러스터의 초기화 시간에 영향을 줄 수 있습니다. 이 문제로 인해 제어 영역이 자주 재시작될 수 있습니다.

많은 수의 감시로 인해 발생하는 문제 가능성 및 심각도를 낮추도록 노드를 더 크게 정의하세요. 포드 밀도가 높을수록(노드를 더 크게 하고 개수를 줄일수록) 감시 수가 줄어들고 문제 심각도가 완화될 수 있습니다.

자세한 내용은 머신 시리즈 비교를 참조하세요.

애플리케이션 레이어 보안 비밀 암호화가 사용 설정된 경우의 클러스터당 보안 비밀 수 애플리케이션 레이어 보안 비밀 암호화가 사용 설정되었으면 클러스터 시작 중 클러스터가 모든 보안 비밀을 복호화해야 합니다. 보안 비밀을 30,000개 넘게 저장하면 시작 또는 업그레이드 중 클러스터가 불안정해져 워크로드가 중단될 수 있습니다.

애플리케이션 레이어 보안 비밀 암호화를 사용할 때 보안 비밀을 30,000개 미만으로 저장하세요.

자세한 내용은 애플리케이션 레이어에서 보안 비밀 암호화를 참조하세요.

노드당 로그 대역폭

각 노드에서 Cloud Logging API로 전송되는 최대 로그 양에는 한도가 있습니다. 기본 한도는 부하에 따라 100Kbps에서 500Kbps 사이입니다. 대용량 Logging 에이전트 구성을 배포하여 10Mbps로 한도를 늘릴 수 있습니다. 이 한도를 초과하면 로그 항목이 삭제될 수 있습니다.

기본 한도 이내로 유지되도록 Logging을 구성하거나 처리량이 높은 Logging 에이전트를 구성합니다.

자세한 내용은 Logging 에이전트 처리량 증가를 참조하세요.

Backup for GKE 한도

Backup for GKE를 사용하여 GKE 워크로드를 백업 및 복원할 수 있습니다.

Backup for GKE에는 백업 계획을 정의할 때 주의해야 하는 한도가 적용됩니다.

Backup for GKE 한도를 검토하세요.

워크로드가 이러한 한도를 초과할 가능성이 있는 경우 백업을 여러 개 만들어 파티션을 나누고 한도를 초과하지 않게 하는 것이 좋습니다.

구성 커넥터 한도

구성 커넥터를 사용하여 Kubernetes를 통해 Google Cloud 리소스를 관리할 수 있습니다. 구성 커넥터에는 두 가지 작업 모드가 있습니다.

  • 클러스터 모드로, GKE 클러스터별로 단일 구성 커넥터 인스턴스가 있는 경우입니다.

    이 모드에서는 단일 구성 커넥터 인스턴스가 모든 리소스를 로드합니다.

  • 네임스페이스 모드에서는 클러스터 내의 각 네임스페이스에 개별 구성 커넥터 인스턴스가 포함됩니다.

    이 모드에서는 네임스페이스를 통해 관리형 리소스를 분할할 수 있습니다. 이 설정은 단일 구성 커넥터 인스턴스가 관리해야 하는 리소스 양을 줄여주고, CPU 및 메모리 사용량을 줄여줍니다.

모드마다 확장성 특성 및 제한사항이 다릅니다.

각 구성 커넥터 인스턴스에는 CPU 요청 0.1개와 메모리 한도 512MB가 있습니다. 따라서 다수의 관리형 리소스까지 제대로 확장되지 않습니다. 단일 구성 커넥터 인스턴스당 Google Cloud 리소스는 25,000개를 초과하지 않는 것이 좋습니다. 이 제한은 리소스 유형 및 특정 사용 사례에 따라 사용되는 메모리 양이 달라지기 때문에 참조용으로만 사용됩니다.

다수의 관리형 리소스를 관리할 때는 네임스페이스 모드를 사용하여 각 구성 커넥터 인스턴스에서 처리되는 리소스 수를 제한하는 것이 좋습니다.

네임스페이스 모드에서 구성 커넥터로 최대 500개까지 네임스페이스를 사용하는 것이 좋습니다. 각 구성 커넥터 인스턴스는 kube-apiserver에 대한 다수의 watch 연결을 엽니다. 이러한 인스턴스가 많으면 watch 연결을 다시 초기화해야 하는 경우 특히 제어 영역 업그레이드 중 GKE 클러스터 제어 영역에 과부하가 발생할 수 있습니다.
클러스터 제어 영역에 사용할 수 있는 CPU와 메모리는 처음에 클러스터의 노드 수를 기반으로 하므로 새 GKE 클러스터에서 네임스페이스 500개가 추가로 제한될 수 있습니다. 클러스터는 사용률에 따라 사용 가능한 CPU 및 메모리를 조정하는 데 시간이 필요합니다.

다수의 GKE 클러스터를 사용하여 위에 지정된 한도에 맞게 나눌 수 없는 리소스 수를 관리하는 것이 좋습니다.

자세한 내용은 구성 컨트롤러 확장성 가이드라인을 참조하세요.

다음 단계