AKS(Azure Kubernetes Service)에서 노드 리소스 예약

이 문서에서는 AKS(Azure Kubernetes Service)에서 노드 리소스 예약에 대해 알아봅니다.

리소스 예약

AKS는 노드 리소스를 사용하여 노드가 클러스터의 일부로 작동하도록 지원합니다. 이를 사용하면 노드의 총 리소스와 AKS의 할당 가능한 리소스 간에 불일치가 발생할 수 있습니다.

노드 성능과 기능을 유지하기 위해 AKS는 각 노드에 CPU메모리라는 두 가지 형식의 리소스를 예약합니다. 노드가 리소스에서 더 커질수록 사용자가 배포한 Pod를 관리할 필요성이 높아지므로 리소스 예약도 증가합니다. 노드에서 리소스 예약을 변경할 수 없다는 점에 유의해야 합니다.

CPU 예약량

예약된 CPU는 노드 형식 및 클러스터 구성에 따라 달라지며, 추가 기능 실행으로 인해 할당 가능한 CPU가 줄어들 수 있습니다. 다음 표는 밀리코어 단위의 CPU 예약을 보여 줍니다.

호스트의 CPU 코어 수 1 코어 코어 2개 코어 4개 8개 코어 16개 코어 32코어 64코어
Kube용 예약 CPU(밀리코어) 60 100 140 180 260 420 740

메모리 예약

AKS에서 예약된 메모리는 다음 두 값의 합계로 구성됩니다.

AKS 1.29 이상

  • kubelet 디먼에는 기본적으로 memory.available < 100Mi 제거 규칙이 있습니다. 이 규칙은 노드에 항상 100Mi 이상을 할당할 수 있도록 보장합니다. 호스트가 사용 가능한 메모리 임계값보다 낮으면 kubelet은 실행 중인 Pod 중 하나의 종료를 트리거하고 호스트 컴퓨터에서 메모리를 확보합니다.

  • 메모리 예약 비율20MB * 노드에서 지원되는 최대 Pod + 50MB 또는 총 시스템 메모리 리소스의 25% 중 더 작은 값에 따라 설정됩니다.

    :

    • VM(가상 머신)이 8GB 메모리를 제공하고 노드가 최대 30개의 Pod를 지원하는 경우, AKS는 kube-reserved용으로 20MB * 최대 Pod 수 30 + 50MB = 650MB를 예약합니다. Allocatable space = 8 GB - 0.65 GB (kube-reserved) - 0.1 GB (eviction threshold) = 7.25 GB or 90.625% allocatable.
    • VM이 4GB의 메모리를 제공하고 노드가 최대 70개의 Pod를 지원하는 경우, 20MB * 70개의 최대 Pod + 50MB = 1450MB 미만이므로 AKS는 kube-reserved를 위해 25% * 4GB = 1000MB를 예약합니다.

    자세한 내용은 AKS 클러스터의 노드당 최대 Pod 구성을 참조하세요.

참고

Linux 노드 풀에서 kubeReserved CPU 및 메모리 값을 사용자 지정하거나 hardEvictionThreshold 하려면, 사용자 지정 노드 구성 설정 미리 보기 기능을 사용하고 AKSNodeCustomizationPreview 기능 플래그를 등록합니다. 자세한 내용은 AKS(Azure Kubernetes Service) 노드 풀에 대한 노드 구성 사용자 지정을 참조하세요.

1.29 이전 AKS 버전

  • kubelet 디먼에는 기본적으로 memory.available < 750Mi 제거 규칙이 있습니다. 이 규칙은 노드에 항상 750Mi 이상을 할당할 수 있도록 보장합니다. 호스트가 사용 가능한 메모리 임계값보다 낮으면 kubelet은 실행 중인 Pod 중 하나의 종료를 트리거하고 호스트 컴퓨터에서 메모리를 확보합니다.
  • kubelet 디먼이 제대로 작동하기 위한 메모리 예약의 회귀 비율(kube-reserved)
    • 처음 4GB 메모리의 25%
    • 다음 4GB 메모리의 20%(최대8GB)
    • 다음 8GB 메모리의 10%(최대16GB)
    • 다음 112GB 메모리의 6%(최대128GB)
    • 128GB 이상의 메모리 중 2%

참고

AKS는 계산된 메모리의 일부가 아닌 Windows 노드의 시스템 프로세스를 위해 추가 2GB를 예약합니다.

메모리 및 CPU 배정 규칙은 다음을 위해 설계되었습니다.

  • 클러스터 상태에 중요한 일부 호스팅 시스템 Pod를 포함하여 에이전트 노드를 정상 상태로 유지합니다.
  • 노드에서 할당 가능한 메모리 및 CPU를 Kubernetes 클러스터의 일부가 아닌 경우보다 더 적게 보고하도록 합니다.

예를 들어, 노드가 7 GB를 제공하는 경우 750 Mi 하드 축출 임곗값을 포함해 메모리의 34%를 할당할 수 없는 것으로 보고합니다.

0.75 + (0.25*4) + (0.20*3) = 0.75 GB + 1 GB + 0.6 GB = 2.35 GB / 7 GB = 33.57% reserved

또한 기본 노드 OS는 Kubernetes 자체에 대한 예약 외에도 OS 기능을 유지하기 위해 많은 CPU 및 메모리 리소스를 예약합니다.

관련 모범 사례는 AKS의 기본 스케줄러 기능 모범 사례를 참조하세요.

다음 단계