GKE 노드의 영구 볼륨 연결 한도

이 문서에서는 Google Kubernetes Engine(GKE) 노드에서 Compute Engine Persistent Disk 및 Hyperdisk의 영구 볼륨 연결 한도가 작동하는 방식을 설명합니다. 워크로드 스케줄링 및 노드 풀 크기 조정을 적절하게 수행하려면 GKE 노드에 연결할 수 있는 최대 영구 디스크 수를 이해해야 합니다. 특히 단일 인스턴스에서 연결 제한이 서로 다른 디스크 유형을 여러 개 사용하는 경우 워크로드 스케줄링을 더 세부적으로 제어하려면 노드 라벨을 사용하여 기본 연결 제한을 재정의하면 됩니다.

이 문서는 스토리지를 만들고 할당하는 스토리지 전문가와 워크로드 스케줄링 및 노드 풀 크기 조정을 관리하는 GKE 관리자를 대상으로 합니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE Enterprise 사용자 역할 및 태스크를 참조하세요.

개요

GKE에서 Compute Engine Persistent Disk CSI 드라이버(pd.csi.storage.gke.io)를 사용하여 PersistentVolume(PV)을 요청하면 Google Cloud Persistent Disk 서비스에서 블록 스토리지 볼륨이 프로비저닝됩니다.

GKE 클러스터에서 Compute Engine Persistent Disk CSI 드라이버(PDCSI)를 사용 설정하면 PDCSI 드라이버가 노드별 영구 볼륨 연결 한도를 계산하여 kubelet에 보고합니다. 이 정보를 기반으로 Kubernetes 스케줄러는 연결 용량에 도달한 노드에 영구 볼륨이 필요한 포드를 너무 많이 스케줄링하지 않도록 스케줄링 결정을 내립니다. PDCSI 드라이버가 부정확한 연결 한도, 특히 실제 한도보다 높은 숫자를 보고하면 포드가 스케줄링되지 않고 Pending 상태로 멈춥니다. Hyperdisk 및 Persistent Disk의 연결 한도가 다른 3세대 머신 유형(예: C3)에서 이 문제가 발생할 수 있습니다.

영구 볼륨 연결 한도 이해

4세대 이전 세대의 머신의 경우 Compute Engine PDCSI 드라이버는 집계 영구 볼륨 연결 한도를 모든 머신 유형에서 디스크 128개(데이터 디스크 127개와 부팅 디스크 1개)로 설정합니다. 연결 한도는 Persistent Disk와 Hyperdisk 볼륨 조합에 적용됩니다. Hyperdisk의 경우 연결 한도는 기본 Compute Engine 머신 유형, 머신에 있는 vCPU 수, 특정 Hyperdisk 유형에 따라 결정됩니다.

예를 들면 다음과 같습니다.

  • C4와 같은 4세대 머신 유형의 경우 PDCSI 드라이버는 노드의 vCPU 수를 기반으로 계산된 기본 연결 한도를 Kubernetes에 정확하게 보고합니다. 보고된 연결 한도는 일반적으로 영구 볼륨 8~128개 범위에 속합니다.
  • 반면 C3와 같은 3세대 머신 유형의 경우 PDCSI 드라이버는 Kubernetes에 기본 연결 한도를 디스크 128개 고정 한도로 보고합니다. 이로 인해 실제 한도가 vCPU 수에 따라 128개 미만일 수 있어 포드 스케줄링이 실패할 수 있습니다.

노드 라벨을 사용하여 기본 연결 한도를 재정의할 수 있습니다.

Compute Engine 문서에서 다음과 같은 유용한 리소스를 참조하세요.

기본 영구 볼륨 연결 한도 재정의

노드에 영구 볼륨을 특정 수로 연결하려는 특정 요구사항이나 노드 구성이 있으면 node-restriction.kubernetes.io/gke-volume-attach-limit-override: VALUE 노드 라벨을 사용하여 노드 풀의 기본 영구 볼륨 연결 한도를 재정의할 수 있습니다.

다음 GKE 버전에서 이 노드 라벨을 사용할 수 있습니다.

  • 1.32.4-gke.1698000 이상
  • 1.33.1-gke.1386000 이상

새 노드 풀

특정 영구 볼륨 연결 한도가 있는 새 노드 풀을 만들려면 다음 명령어를 실행합니다.

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE

기존 노드 풀

기존 노드 풀의 현재 영구 볼륨 연결 한도를 수정하려면 다음 단계를 수행합니다.

  1. 노드 풀 연결 한도를 업데이트합니다.

    gcloud container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --node-labels=node-restriction.kubernetes.io/gke-volume-attach-limit-override=VALUE
    
  2. pdcsi-node DaemonSet를 다시 시작합니다.

    kubectl rollout restart ds pdcsi-node -n kube-system
    

    새 연결 한도는 pdcsi-node 포드가 Running 상태로 전환된 후에 적용됩니다.

다음을 바꿉니다.

  • NODE_POOL_NAME: 만들거나 업데이트하려는 노드 풀의 이름
  • CLUSTER_NAME: 만들거나 업데이트하려는 노드 풀의 클러스터 이름
  • VALUE: 연결할 수 있는 새 영구 볼륨 수를 지정하는 정수(0~127). 127보다 높은 값을 지정하면 노드 라벨이 무시되고 PDCSI 드라이버에서 대신 기본 영구 볼륨 연결 한도를 사용합니다. 기본 한도는 3세대 머신의 경우 128개이고 4세대 머신의 경우 vCPU 수 기반 값입니다.

재정의 확인

재정의가 올바르게 적용되었는지 확인하려면 노드 라벨과 노드 용량을 확인합니다.

다음 명령어에서 NODE_NAME노드 라벨 재정의를 적용한 특정 노드 풀에 속한 노드의 이름으로 바꿉니다.

  1. 노드 라벨을 확인합니다.

    kubectl get node NODE_NAME --show-labels
    

    출력에는 node-restriction.kubernetes.io/gke-volume-attach-limit-override 라벨이 포함되어야 합니다.

  2. 노드 용량을 확인합니다.

    kubectl describe node NODE_NAME
    

    출력에는 attachable-volumes-gce-pd 용량이 포함되어야 하며 이 용량은 노드 풀에 설정한 재정의 값과 일치해야 합니다. 자세한 내용은 노드에서 할당 가능한 리소스 확인을 참조하세요.

다음 단계