노드당 최대 포드 수 구성

이 페이지에서는 Google Kubernetes Engine (GKE)의 Standard 클러스터에서 노드당 최대 포드 수를 구성하여 포드에 대한 충분한 예약 용량을 확보하기 위해 클러스터 리소스를 최적화하는 방법을 설명합니다. 이 페이지는 포드, CIDR 블록 크기, 노드 수 간의 관계가 GKE가 클러스터 내에서 포드를 예약하고 IP 주소를 할당하는 방식에 미치는 영향을 이해하는 데 도움이 됩니다. 이 페이지에는 노드당 최대 포드 수의 제한사항 및 기본값에 대한 세부정보도 포함됩니다.

이 페이지는 클라우드 리소스를 프로비저닝 및 구성하고, 앱 및 서비스를 배포하며, 클라우드 배포의 네트워킹을 관리하는 운영자, 클라우드 설계자, 개발자, 네트워크 엔지니어에게 도움이 됩니다. Google Cloud콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE 사용자 역할 및 태스크를 참고하세요.

이 페이지를 읽기 전에 Autopilot 클러스터 대신 GKE Standard를 사용해야 하는 경우Kubernetes 네트워킹 모델을 숙지해야 합니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update 명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.

제한사항

  • VPC 기반 클러스터에서만 노드당 최대 포드 수를 구성할 수 있습니다.
  • 노드 생성은 포드 주소 범위의 사용 가능한 주소 수에 따라 제한됩니다. 기본, 최소, 최대 포드 주소 범위 크기는 IP 주소 범위 계획 테이블을 참조하세요. 또한 연속되지 않은 다중 포드 CIDR을 사용하여 추가 포드 IP 주소를 추가할 수 있습니다.
  • 각 클러스터는 kube-system 네임스페이스에 있는 kube-proxy와 같은 kube-system 포드를 만들어야 합니다. 노드당 최대 포드 수를 줄일 때는 워크로드 포드 및 시스템 포드 모두를 고려해야 합니다. 클러스터의 시스템 포드를 나열하려면 다음 명령어를 실행합니다.

    kubectl get pods --namespace kube-system
    

노드당 최대 포드 수 구성

클러스터를 만들 때 또는 노드 풀을 만들 때 Standard 클러스터에서 노드당 최대 포드 수를 구성할 수 있습니다. 클러스터 또는 노드 풀이 생성된 후에는 이 설정을 변경할 수 없습니다. Autopilot 클러스터의 경우 최대 노드 수가 미리 구성되고 변경할 수 없습니다.

하지만 포드 IP 주소가 부족할 경우 연속되지 않은 다중 포드 CIDR을 사용하여 추가 포드 IP 주소 범위를 만들 수 있습니다.

클러스터를 만들 때 gcloud CLI 또는 Google Cloud 콘솔을 사용하여 포드 주소 범위의 크기를 설정할 수 있습니다.

gcloud

gcloud CLI를 사용하여 노드당 기본 최대 포드 수를 설정하려면 다음 명령어를 실행합니다.

gcloud container clusters create CLUSTER_NAME \
    --enable-ip-alias \
    --cluster-ipv4-cidr=10.0.0.0/21 \
    --services-ipv4-cidr=10.4.0.0/19 \
    --create-subnetwork=name='SUBNET_NAME',range=10.5.32.0/27 \
    --default-max-pods-per-node=MAXIMUM_PODS \
    --location=COMPUTE_LOCATION

다음을 바꿉니다.

  • CLUSTER_NAME: 새 클러스터의 이름
  • SUBNET_NAME: 클러스터의 새 서브네트워크 이름
  • MAXIMUM_PODS: 클러스터의 노드당 기본 최대 포드 수. 최대 256개까지 구성할 수 있습니다. 생략하면 Kubernetes가 110의 기본값을 할당합니다.
  • COMPUTE_LOCATION: 새 클러스터의 Compute Engine 위치

콘솔

  1. Google Cloud 콘솔에서 Kubernetes 클러스터 만들기 페이지로 이동합니다.

    Kubernetes 클러스터 만들기로 이동

  2. 새 클러스터를 구성합니다.

  3. 탐색창의 클러스터에서 네트워킹을 클릭합니다.

  4. VPC 기반 트래픽 라우팅 사용 설정(별칭 IP 사용) 체크박스가 선택되어 있는지 확인합니다.

  5. 탐색창의 노드 풀에서 노드를 클릭합니다.

  6. 노드당 최대 pod 수 필드를 110로 설정합니다. GKE는 이 값을 사용하여 노드에 할당되는 IP 주소 범위의 크기를 조정합니다.

  7. 만들기를 클릭합니다.

클러스터에 대해 노드당 최대 포드 수를 구성할 때 Kubernetes는 이 값을 사용하여 노드에 대해 CIDR 범위를 할당합니다. 포드에 대한 클러스터의 보조 IP 주소 범위 및 노드에 대한 할당된 CIDR 범위를 기준으로 클러스터의 최대 노드 수를 계산할 수 있습니다.

예를 들어 기본 최대 포드 수를 110으로 설정하고 포드의 보조 IP 주소 범위를 /21로 설정하면 Kubernetes는 /24 CIDR 범위를 클러스터의 노드에 할당합니다. CIDR 범위 할당을 통해 클러스터에서 최대 2(24-21) = 23 = 8개 노드를 사용할 수 있습니다.

이와 비슷하게 기본 최대 포드 수를 8로 설정하고 포드에 대한 클러스터의 보조 IP 주소 범위를 /21로 설정하면 Kubernetes가 노드에 /28 CIDR 범위를 할당합니다. CIDR 범위 할당을 통해 클러스터에서 최대 2(28-21) = 27 = 128개 노드를 사용할 수 있습니다.

기존 클러스터의 새 노드 풀에 있는 최대 포드 수 구성

기존 Standard 클러스터에 노드 풀을 만들 때 노드당 최대 포드 수를 지정할 수도 있습니다. 새 노드 풀을 만들면 클러스터 수준에서 노드당 구성된 기본 최대 포드 수가 없는 기존 클러스터에서도 IP 주소 할당을 최적화할 수 있습니다.

노드 풀 수준에서 최대 포드 수를 설정하면 클러스터 수준의 기본 최댓값이 재정의됩니다. 노드 풀을 만들 때 노드당 최대 포드 수를 구성하지 않으면 클러스터 수준 최댓값이 적용됩니다.

gcloud

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --max-pods-per-node=MAXIMUM_PODS

다음을 바꿉니다.

  • POOL_NAME: 새 노드 풀의 이름입니다.
  • CLUSTER_NAME: 노드 풀을 만들려는 클러스터의 이름입니다.
  • MAXIMUM_PODS: 노드 풀의 최대 포드 수입니다.

콘솔

  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. 노드 풀 추가를 클릭합니다.

  4. 탐색창에서 노드를 클릭합니다.

  5. 네트워킹에서 노드당 최대 포드 수 필드 값을 입력합니다. GKE는 이 값을 사용하여 노드에 할당되는 IP 주소 범위의 크기를 조정합니다.

포드 보조 범위 및 노드당 최대 포드 수

노드당 최대 포드 수를 구성하면 포드 보조 범위의 필수 크기에 간접적으로 영향을 미칩니다. GKE에는 노드 풀당 최소 CIDR 블록이 /24여야 합니다. 노드 풀을 만들 때 /24보다 작은 포드 보조 범위를 지정하려고 하면 다음 오류가 발생합니다.

Pod secondary range 'Pod' must have a CIDR block of at least /24

전체 클러스터에 /24보다 작은 범위가 필요한 경우 Google Cloud CLI와 함께 --cluster-ipv4-cidr 인수를 사용하여 클러스터 수준에서 이를 지정할 수 있습니다. 자세한 내용은 특정 CIDR 범위로 클러스터 만들기를 참조하세요. 연속되지 않은 멀티 포드 CIDR을 사용하여 클러스터에 더 많은 포드 IP 주소 범위를 추가할 수도 있습니다.

각 클러스터는 kube-system 네임스페이스에 kube-proxy와 같은 kube-system 포드를 만들어야 합니다. 노드당 최대 포드 수를 구성할 때는 워크로드 포드 및 시스템 포드 모두를 고려해야 합니다.

노드당 기본 최대 포드 수 정보

기본적으로 GKE는 Standard 클러스터에서 노드당 최대 110개의 포드를 허용하지만 노드당 최대 256개의 포드를 허용하도록 Standard 클러스터를 구성할 수 있습니다. Autopilot 클러스터는 예상 워크로드 포드 밀도를 기반으로 노드당 최대 포드 수를 8~256개 범위에서 선택합니다. Kubernetes는 각 노드에 IP 주소 범위(CIDR 블록)를 할당하므로 각 포드는 고유 IP 주소를 가질 수 있습니다. CIDR 블록의 크기는 노드당 최대 포드 수에 해당합니다.

Standard 클러스터의 포드 CIDR 범위

표준 클러스터의 경우 노드당 최대 포드 수는 기본적으로 110개이므로 Kubernetes는 각 노드에 /24 CIDR 블록(256개 주소)을 할당합니다. 사용 가능한 IP 주소 수가 한 노드에서 만들 수 있는 최대 포드 수의 두 배를 넘으므로, Kubernetes는 노드에서 포드를 추가 및 삭제할 때 IP 주소 재사용을 줄일 수 있습니다.

노드당 포드 수 256개가 하드 한도이지만, 노드에서 포드 수를 줄일 수 있습니다. 노드에 할당된 CIDR 블록 크기는 노드당 최대 포드 수에 따라 다릅니다. 블록에 포함되는 주소 수는 항상 노드당 최대 포드 수의 두 배 이상입니다.

다음 표에서는 Kubernetes가 노드당 최대 포드 수를 기준으로 노드에 할당하는 사용 가능한 IP 주소 개수 및 CIDR 블록 크기를 보여줍니다.

노드당 최대 포드 수 노드당 CIDR 범위 IP 주소 수
8 /28 16
9 – 16 /27 32
17 – 32 /26 64
33 – 64 /25 128
65 – 128 /24 256
129 - 256 /23 512

포드의 보조 IP 주소 범위에 대한 클러스터 크기 조정 고려사항

클러스터를 만들 때 포드의 보조 IP 주소 범위 크기는 변경할 수 없습니다. 현재 및 향후 워크로드 요구사항을 수용할 수 있도록 이 범위의 크기를 신중하게 계획해야 합니다. 포드의 IP 주소 공간이 부족하면 예약 실패가 발생하고 클러스터가 확장되지 않을 수 있습니다.

필요한 크기를 잘 모르겠다면 Google Cloud CLI로 만든 클러스터의 기본값인 /21와 같은 더 큰 범위로 시작하는 것이 좋습니다. 범위가 클수록 중간 크기의 클러스터에 충분한 IP 주소를 제공하고 향후 성장에 유연하게 대처할 수 있습니다. 포드 IP 주소가 부족할 경우 연속되지 않은 다중 포드 CIDR을 사용하여 포드 IP 주소 범위를 추가할 수 있습니다.

하지만 IP 주소 공간이 제한된 환경에서 작업하는 경우 더 작은 범위를 사용해야 할 수 있습니다. 이러한 경우 노드당 최대 포드 수를 줄일 수 있습니다. 노드당 최대 포드 수를 줄이면 각 노드의 포드 CIDR 범위가 작아지므로 전체 클러스터의 더 작은 포드 보조 범위 내에 더 많은 노드를 맞출 수 있습니다. 이 구성은 노드당 포드 밀도와 클러스터의 총 노드 수 간의 절충안입니다.

클러스터에서 지원할 수 있는 최대 포드 수를 계산하려면 노드당 포드 수와 CIDR 범위의 입력 값을 제공합니다. GKE는 이러한 입력을 사용하여 노드 및 포드의 주소 범위 크기를 결정합니다.

사용자 지정 값

클러스터 또는 노드 풀을 만들 때 제공하는 값입니다.

  • Q: 노드당 최대 포드 수입니다.
    • Autopilot 클러스터의 경우 Q이 고정됩니다 (현재 32).
    • 표준 클러스터의 경우 Q을 구성할 수 있습니다.
  • DS: 포드 서브넷의 접두사 길이입니다. 예를 들어 CIDR 범위가 /17인 경우 프리픽스 길이는 17입니다.
  • S: 기본 서브넷의 접두사 길이입니다. 예를 들어 CIDR 범위가 /24인 경우 프리픽스 길이는 24입니다.

계산된 값

GKE는 사용자의 입력을 기반으로 다음 값을 계산합니다.

  • M: 각 노드의 포드 범위에 대한 넷마스크 크기입니다. none M = 31 - ⌈log₂(Q)⌉ 천장 함수 (⌈ ⌉)를 사용하여 가장 가까운 정수로 올림합니다.

  • HM: 노드의 포드 범위 넷마스크의 호스트 비트 수입니다. none HM = 32 - M

  • HD: 선택한 CIDR 포드 서브넷 넷마스크의 호스트 비트 수입니다. none HD = 32 - DS

  • MN: 포드 서브넷에서 지원할 수 있는 최대 노드 수입니다. none MN = 2^(HD - HM)

  • MP: 포드 서브넷에서 지원할 수 있는 최대 포드 수입니다. none MP = MN * Q

  • N: 기본 범위에서 사용할 수 있는 IP 주소의 수입니다. none N = 2^(32-S) - 4

중요사항:

  • 보조 범위의 모든 IP 주소를 포드에 사용할 수 있습니다.
  • 이러한 계산은 이론적인 최대값을 제공합니다. 실제 성능은 다른 요인의 영향을 받을 수 있습니다.

예:

다음과 같은 GKE Autopilot 클러스터를 만든다고 가정해 보겠습니다.

  • /17 (DS = 17)의 포드 서브넷 CIDR
  • 노드당 최대 32개의 포드 (Q = 32)

최대 포드 수를 계산합니다.

  1. M = 31 - ⌈log₂(32)⌉ = 26
  2. HM = 32 - 26 = 6
  3. HD = 32 - 17 = 15
  4. MN = 2(15 - 6) = 512
  5. MP = 512 * 32 = 16,384

이 클러스터는 최대 512개의 노드와 16,384개의 포드를 지원할 수 있습니다.

최대 포드 수 감소

노드당 최대 포드 수를 줄이면 각 노드가 전체 IP 주소 공간에서 차지하는 부분이 감소하므로 클러스터가 더 많은 노드를 가질 수 있습니다. 또는 클러스터를 만들 때 더 작은 IP 주소 공간을 지정하여 클러스터에 같은 수의 노드를 지원할 수 있습니다.

또한 노드당 최대 포드 수를 줄이면 더 적은 IP 주소가 필요한 더 작은 클러스터를 만들 수 있습니다. 예를 들어 노드당 8개의 포드가 있으면 각 노드에 /28 CIDR이 부여됩니다. 이러한 IP 주소 범위와 사용자가 정의하는 서브넷 및 보조 범위에 따라 클러스터를 성공적으로 만들기 위해 필요한 IP 주소 수가 결정됩니다.

노드당 최대 포드 수는 클러스터를 만들 때 구성할 수도 있고 노드 풀을 만들 때 구성할 수도 있습니다.

다음 단계