확장성 및 성능 문제

Prev Next

Ncloud Kubernetes Service를 이용하면서 다음과 같은 문제를 겪을 수 있습니다. 문제별 원인과 해결 방법을 확인하고 적절하게 조치해 주십시오.

Cluster Autoscaler 설정 후에도 Scale In/Out이 발생하지 않음

Cluster Autoscaler를 설정하였지만 Scale In/Out이 발생하지 않습니다.

원인

Cluster Autoscaler 클러스터 내에 리소스 부족으로 인해 스케줄링되지 못한 파드가 존재할 때 노드를 증가시키며, 일정 시간 동안 특정 노드의 사용률이 저조한 경우 노드를 감소시킵니다. 파드의 부하가 아무리 높더라도 요청한 자원량이 없다면 노드가 증가하지 않습니다.

Autoscaler는 다음 조건을 만족할 때 Scale In/Out을 수행합니다.

  • Scale In 조건

    • 파드가 Pending 상태로 대기 중인 경우
    • 노드가 파드를 수용할 수 있는 충분한 리소스를 가지고 있지 않은 경우
  • Scale Out 조건

    • 노드의 파드가 다른 노드로 스케줄링 될 수 있는 경우
    • 일정 기간 동안 특정 노드가 사용되지 않거나 낮은 리소스 사용률을 유지하는 경우

Cluster Autoscaler는 다양한 원인으로 동작하지 않을 수 있으므로 세부 원인을 확인해야 합니다.

해결 방법

  • 사용하고 있는 파드에 Resource Request, Limit 설정이 존재하지 않는 경우, 작동하지 않습니다. 반드시 Resource Request&Limit 설정을 완료해 주십시오.
  • 노드 감소 예외 사항이 존재하는 경우, 노드가 감소하지 않을 수 있습니다. 예외 사항은 다음과 같습니다.
    • Controller(예: Deployment, StatefulSet .. )에 의해 제어되지 않는 경우
    • Local Storage가 설정되어 있는 경우
    • 다른 노드로 파드가 이동할 수 없는 경우
    • Annotation "cluster-autoscaler.kubernetes.io/safe-to-evict": "false"이 설정되어 있는 경우
    • 기타 예외 사항에 대해서는 공식 문서를 참조해 주십시오.
참고
  • ClusterAutoscaler의 Scale Down 방식에 대한 자세한 설명은 How does scale-down work?를 참조해 주십시오.
  • 실제 노드 리소스 사용량과 파드 리소스 요청량에 차이가 있는 경우, 비효율적일 수 있으므로 적절한 값으로 파드 리소스 요청량을 수정하여 사용하는 것을 권고합니다.
  • 실제 노드 리소스 사용량이 낮더라도 파드 리소스 요청량으로 인해 파드가 펜딩 상태에 머무르게 되면, Cluster Autoscaler가 이를 감지하고 노드를 자동으로 확장합니다. 자세한 설명은 리소스 요청이 포함된 파드를 스케줄링하는 방법를 참조해 주십시오.

Cluster Autoscaler 사용 시 파라미터 변경

  • Cluster Autoscaler 사용 시 파라미터를 변경하거나 확인하고 싶습니다.
  • Cluster Autoscaler 사용 시 파라미터가 변경되지 않습니다.

원인

Cluster Autoscaler 설정 시 기본 파라미터를 사용하며, 변경 기능은 제공하지 않습니다.

해결 방법

Cluster Autoscaler에서 사용되는 파라미터 및 기본 값은 What are the parameters to CA를 확인해 주십시오.

특정 노드를 Scale Down 대상에서 제외

Cluster Autoscaler 사용 시 특정 노드를 Scale Down 대상에서 제외하고 싶습니다.

원인

기본적으로 Cluster Autoscaler는 저사용 노드를 축소 대상으로 간주합니다. 특별히 제외하지 않는 한 모든 노드가 후보가 될 수 있습니다.

해결 방법

축소 대상에서 제외할 노드에 어노테이션을 추가합니다.

$ kubectl annotate node <nodename> cluster-autoscaler.kubernetes.io/scale-down-disabled=true

클러스터가 자동으로 확장되는 경우

Cluster Autoscaler 적용 이후 클러스터가 자동으로 확장되었습니다.

원인

cilium-operator 파드는 안정적인 네트워킹을 위해 기본 2개로 구성됩니다. 워커노드가 한 대일 경우 스케줄 설정으로 인하여 하나는 Running 상태, 나머지 하나는 Pending 상태가 됩니다. Cluster Autoscaler가 Pending 상태의 cilium-operator 파드를 위해 확장을 진행하게 됩니다.

해결 방법

cilium-operator 파드의 파드 수를 조정합니다.

$ kubectl scale --replicas=1 deploy/cilium-operator -n kube-system

하지만 워커노드를 한 대만 운영할 경우 안정성이 감소할 수 있으므로 주의가 필요합니다.

전체 노드 수가 최대 노드 수 보다 작아도 신규 노드가 생성되지 않는 경우

Cluster Autoscaler 사용 시 클러스터 전체 노드 수는 여유가 있지만 최소 노드 수를 조정하여도 새로운 노드가 생성되지 않습니다.

원인

Cluster Autoscaler의 설정 이후 최소 노드 수를 조정하여도 이를 자동으로 확장하지 않습니다.

해결 방법

Cluster Autoscaler의 설정 해제 이후 고정 노드 수를 증가시킵니다.

워커노드의 높은 리소스 사용량

워커노드에서 CPU, 메모리 등 리소스 사용량이 비정상적으로 높게 나타나고 있습니다.

원인

높은 리소스 사용량의 원인은 주로 다음과 같습니다.

  • 과도한 파드 배포: 워커노드에 배치된 파드 수가 많은 경우
  • 리소스 제한 미설정: 파드에 대한 Resource Request, Limit 이 존재하지 않는 경우
  • 메모리 누수: 운영 파드에서 메모리 누수가 발생하는 경우

해결 방법

파드 배포 상태 확인

  • 아래 명령어를 실행하여 리소스 사용량이 높은 노드 및 파드를 조사하고 필요에 따라 클러스터 내에서 조정해 주십시오.
    $ kubectl top nodes
    $ kubectl top pods
    
  • 워커 노드에 접근하여 메모리 사용 현황을 확인해 주십시오. used와 buff/cache 값을 확인합니다. buff/cache 사용량이 높은 경우에도 문제가 발생할 수 있으므로 점검이 필요합니다.
    $ free -h
    

Resource Request 및 Limit 설정

참고

이 가이드에서 필요한 정보를 찾지 못했거나 추가로 필요한 정보가 있으신 경우, 언제든지 아래의 피드백 아이콘을 클릭하여 의견을 보내 주십시오. 전달해 주신 의견을 참고하여 더 유용한 정보를 제공하겠습니다.