클러스터 자동 확장 처리 이벤트 보기


이 페이지에서는 Google Kubernetes Engine(GKE) 클러스터 자동 확장 처리가 자동 확장에 대해 내리는 결정을 설명합니다.

GKE 클러스터 자동 확장 처리는 Cloud Logging에서 로그 항목으로 사용할 수 있는 공개 상태 이벤트를 발생시킵니다.

이 가이드에서 설명하는 이벤트는 클러스터 자동 확장 처리에서 생성된 Kubernetes 이벤트와 별개입니다.

가용성 요구사항

클러스터 자동 확장 처리의 로깅된 이벤트를 보는 기능은 다음 클러스터 버전에서 사용할 수 있습니다.

이벤트 유형 클러스터 버전
status, scaleUp, scaleDown, eventResult 1.15.4-gke.7 이상
nodePoolCreated, nodePoolDeleted. 1.15.4-gke.18 이상
noScaleUp 1.16.6-gke.3 이상
noScaleDown 1.16.8-gke.2 이상

자동 확장 처리 이벤트를 보려면 클러스터에서 Cloud Logging을 사용 설정해야 합니다. Logging이 중지되면 이벤트가 생성되지 않습니다.

이벤트 보기

클러스터 자동 확장 처리의 공개 상태 이벤트는 GKE 클러스터가 있는 프로젝트와 동일한 프로젝트의 Cloud Logging 로그에 저장됩니다. Google Cloud 콘솔의 Google Kubernetes Engine 페이지에 있는 알림에서도 이러한 이벤트를 볼 수 있습니다.

공개 상태 이벤트 로그 보기

로그를 보려면 다음 단계를 따르세요.

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

    Kubernetes 클러스터로 이동

  2. 클러스터 세부정보 페이지를 볼 클러스터 이름을 선택합니다.

  3. 클러스터 세부정보 페이지에서 로그 탭을 클릭합니다.

  4. 로그 탭에서 자동 확장 처리 로그 탭을 클릭하여 로그를 봅니다.

  5. (선택사항) 고급 필터를 적용하여 결과의 범위를 좁히려면 페이지 오른쪽의 화살표가 있는 버튼을 클릭하여 로그 탐색기에서 로그를 봅니다.

공개 상태 이벤트 알림 보기

Google Kubernetes Engine 페이지에서 공개 상태 이벤트 알림을 보려면 다음을 수행합니다.

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

    Google Kubernetes Engine으로 이동

  2. 확장과 관련된 알림을 찾으려면 특정 클러스터의 알림 열을 확인하세요.

  3. 알림을 클릭하여 자세한 정보, 권장 작업을 확인하고 이 이벤트의 로그에 액세스합니다.

이벤트 유형

로깅된 모든 이벤트는 JSON 형식이며, 로그 항목의 jsonPayload 필드에서 찾을 수 있습니다. 이벤트의 모든 타임스탬프는 UNIX 초 타임스탬프입니다.

다음은 클러스터 자동 확장 처리에서 발생시킨 이벤트 유형을 요약한 것입니다.

이벤트 유형 설명
status 주기적으로 발생하며, 자동 확장된 모든 노드 풀의 크기와 클러스터 자동 확장 처리에서 관찰되는 자동 확장된 모든 노드 풀의 대상 크기를 설명합니다.
scaleUp 클러스터 자동 확장 처리가 클러스터를 확장할 때 발생합니다.
scaleDown 클러스터 자동 확장 처리가 클러스터를 축소할 때 발생합니다.
eventResult scaleUp 또는 scaleDown 이벤트가 성공적으로 완료되거나 실패할 때 발생합니다.
nodePoolCreated 노드 자동 프로비저닝이 사용 설정된 클러스터 자동 확장 처리가 새 노드 풀을 만들 때 발생합니다.
nodePoolDeleted 노드 자동 프로비저닝이 사용 설정된 클러스터 자동 확장 처리가 노드 풀을 삭제할 때 발생합니다.
noScaleUp 클러스터에 예약할 수 없는 Pod가 있고 클러스터 자동 확장 처리가 Pod를 수용하도록 클러스터를 확장할 수 없을 때 발생합니다.
noScaleDown 클러스터 자동 확장 처리에 의한 삭제가 차단된 노드가 있을 때 발생합니다.

상태 이벤트

status 이벤트는 주기적으로 발생하며, 자동 확장된 모든 노드 풀의 실제 크기와 클러스터 자동 확장 처리에서 관찰되는 자동 확장된 모든 노드 풀의 대상 크기를 설명합니다.

다음 로그 샘플은 status 이벤트를 보여줍니다.

{
  "status": {
    "autoscaledNodesCount": 4,
    "autoscaledNodesTarget": 4,
    "measureTime": "1582898536"
  }
}

scaleUp 이벤트

scaleUp 이벤트는 클러스터 자동 확장 처리가 클러스터를 확장할 때 발생합니다. 자동 확장 처리는 노드 풀의 기본 관리형 인스턴스 그룹(MIG)을 확장하여 클러스터의 노드 풀 크기를 확장합니다. 수직 확장이 어떻게 작동하는지에 대한 자세한 내용은 Kubernetes 클러스터 자동 확장 처리 FAQ에 있는 수직 확장 작동 방식을 참조하세요.

이벤트에는 확장된 MIG, 노드 수, 이벤트를 트리거한 예약할 수 없는 포드에 대한 정보가 포함되어 있습니다.

트리거하는 Pod 목록은 50개의 임의 항목으로 잘립니다. 트리거하는 Pod의 실제 개수는 triggeringPodsTotalCount 필드에서 찾을 수 있습니다.

다음 로그 샘플은 scaleUp 이벤트를 보여줍니다.

{
  "decision": {
    "decideTime": "1582124907",
    "eventId": "ed5cb16d-b06f-457c-a46d-f75dcca1f1ee",
    "scaleUp": {
      "increasedMigs": [
        {
          "mig": {
            "name": "test-cluster-default-pool-a0c72690-grp",
            "nodepool": "default-pool",
            "zone": "us-central1-c"
          },
          "requestedNodes": 1
        }
      ],
      "triggeringPods": [
        {
          "controller": {
            "apiVersion": "apps/v1",
            "kind": "ReplicaSet",
            "name": "test-85958b848b"
          },
          "name": "test-85958b848b-ptc7n",
          "namespace": "default"
        }
      ],
      "triggeringPodsTotalCount": 1
    }
  }
}

scaleDown 이벤트

scaleDown 이벤트는 클러스터 자동 확장 처리가 클러스터를 축소할 때 발생합니다. 축소가 어떻게 작동하는지에 대한 자세한 내용은 Kubernetes 클러스터 자동 확장 처리 FAQ에 있는 축소 작동 방식을 참조하세요.

cpuRatiomemRatio 필드는 노드의 CPU 및 메모리 사용률을 백분율로 설명합니다. 이 사용률은 Pod 요청의 합계를 실제 사용률이 아닌 할당 가능한 노드로 나눈 값입니다.

제거된 Pod 목록은 50개의 임의 항목으로 잘립니다. 제거된 Pod의 실제 개수는 evictedPodsTotalCount 필드에서 찾을 수 있습니다.

다음 쿼리를 사용하여 클러스터 자동 확장 처리가 노드를 축소했는지 확인합니다.

resource.type="k8s_cluster" \
resource.labels.location=COMPUTE_REGION \
resource.labels.cluster_name=CLUSTER_NAME \
log_id("container.googleapis.com/cluster-autoscaler-visibility") \
( "decision" NOT "noDecisionStatus" )

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터의 이름

  • COMPUTE_REGION: 클러스터의 Compute Engine 리전(예: us-central1)

다음 로그 샘플은 scaleDown 이벤트를 보여줍니다.

{
  "decision": {
    "decideTime": "1580594665",
    "eventId": "340dac18-8152-46ff-b79a-747f70854c81",
    "scaleDown": {
      "nodesToBeRemoved": [
        {
          "evictedPods": [
            {
              "controller": {
                "apiVersion": "apps/v1",
                "kind": "ReplicaSet",
                "name": "kube-dns-5c44c7b6b6"
              },
              "name": "kube-dns-5c44c7b6b6-xvpbk"
            }
          ],
          "evictedPodsTotalCount": 1,
          "node": {
            "cpuRatio": 23,
            "memRatio": 5,
            "mig": {
              "name": "test-cluster-default-pool-c47ef39f-grp",
              "nodepool": "default-pool",
              "zone": "us-central1-f"
            },
            "name": "test-cluster-default-pool-c47ef39f-p395"
          }
        }
      ]
    }
  }
}

또한 실행 중인 워크로드가 없는 노드에서도 scale-down 이벤트를 볼 수 있습니다(일반적으로 DaemonSet에서 만든 시스템 포드만). 다음 쿼리를 사용하여 이벤트 로그를 확인합니다.

resource.type="k8s_cluster" \
resource.labels.project_id=PROJECT_ID \
resource.labels.location=COMPUTE_REGION \
resource.labels.cluster_name=CLUSTER_NAME \
severity>=DEFAULT \
logName="projects/PROJECT_ID/logs/events" \
("Scale-down: removing empty node")

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID

  • CLUSTER_NAME: 클러스터의 이름

  • COMPUTE_REGION: 클러스터의 Compute Engine 리전(예: us-central1)

eventResult 이벤트

eventResult 이벤트는 scaleUp 또는 scaleDown 이벤트가 성공적으로 완료되거나 실패할 때 발생합니다. 이 이벤트에는 오류 메시지와 함께 scaleUp 또는 scaleDown 이벤트 eventId 필드에 있는 이벤트 ID 목록이 포함되어 있습니다. 빈 오류 메시지는 이벤트가 성공적으로 완료되었음을 나타냅니다. eventResult 이벤트 목록은 results 필드에 집계됩니다.

오류를 진단하려면 ScaleUp 오류ScaleDown 오류 섹션을 참조하세요.

다음 로그 샘플은 eventResult 이벤트를 보여줍니다.

{
  "resultInfo": {
    "measureTime": "1582878896",
    "results": [
      {
        "eventId": "2fca91cd-7345-47fc-9770-838e05e28b17"
      },
      {
        "errorMsg": {
          "messageId": "scale.down.error.failed.to.delete.node.min.size.reached",
          "parameters": [
            "test-cluster-default-pool-5c90f485-nk80"
          ]
        },
        "eventId": "ea2e964c-49b8-4cd7-8fa9-fefb0827f9a6"
      }
    ]
  }
}

nodePoolCreated 이벤트

nodePoolCreated 이벤트는 노드 자동 프로비저닝이 사용 설정된 클러스터 자동 확장 처리가 새 노드 풀을 만들 때 발생합니다. 이 이벤트에는 생성된 노드 풀의 이름과 해당 기본 MIG 목록이 포함되어 있습니다. scaleUp 이벤트로 인해 노드 풀이 생성된 경우 해당 scaleUp 이벤트의 eventIdtriggeringScaleUpId 필드에 포함됩니다.

다음 로그 샘플은 nodePoolCreated 이벤트를 보여줍니다.

{
  "decision": {
    "decideTime": "1585838544",
    "eventId": "822d272c-f4f3-44cf-9326-9cad79c58718",
    "nodePoolCreated": {
      "nodePools": [
        {
          "migs": [
            {
              "name": "test-cluster-nap-n1-standard--b4fcc348-grp",
              "nodepool": "nap-n1-standard-1-1kwag2qv",
              "zone": "us-central1-f"
            },
            {
              "name": "test-cluster-nap-n1-standard--jfla8215-grp",
              "nodepool": "nap-n1-standard-1-1kwag2qv",
              "zone": "us-central1-c"
            }
          ],
          "name": "nap-n1-standard-1-1kwag2qv"
        }
      ],
      "triggeringScaleUpId": "d25e0e6e-25e3-4755-98eb-49b38e54a728"
    }
  }
}

nodePoolDeleted 이벤트

nodePoolDeleted 이벤트는 노드 자동 프로비저닝이 사용 설정된 클러스터 자동 확장 처리가 노드 풀을 삭제할 때 발생합니다.

다음 로그 샘플은 nodePoolDeleted 이벤트를 보여줍니다.

{
  "decision": {
    "decideTime": "1585830461",
    "eventId": "68b0d1c7-b684-4542-bc19-f030922fb820",
    "nodePoolDeleted": {
      "nodePoolNames": [
        "nap-n1-highcpu-8-ydj4ewil"
      ]
    }
  }
}

noScaleUp 이벤트

noScaleUp 이벤트는 클러스터에 예약할 수 없는 Pod가 있고 클러스터 자동 확장 처리가 Pod를 수용하도록 클러스터를 확장할 수 없을 때 주기적으로 발생합니다.

  • noScaleUp 이벤트는 최선의 방법입니다. 즉, 이러한 이벤트는 클러스터 자동 확장 처리가 확장할 수 없는 가능한 모든 이유를 포괄하지 않습니다.
  • noScaleUp 이벤트는 생성된 로그 볼륨을 제한하도록 제한됩니다. 지속되는 각 이유는 몇 분마다 발생합니다.
  • 모든 이유는 여러 이벤트에 임의로 분할될 수 있습니다. 예를 들어 단일 Pod 그룹의 거부된 모든 MIG 이유가 동일한 이벤트에 나타난다는 보장은 없습니다.
  • 처리되지 않은 Pod 그룹 목록은 50개의 임의 항목으로 잘립니다. 처리되지 않은 Pod 그룹의 실제 개수는 unhandledPodGroupsTotalCount 필드에서 찾을 수 있습니다.

이유 필드

다음 필드는 확장이 발생하지 않은 이유를 설명하는 데 도움이 됩니다.

  • reason: 클러스터 자동 확장 처리가 확장되지 않는 전역 이유를 제공합니다. 자세한 내용은 noScaleUp 최상위 수준 이유 섹션을 참조하세요.
  • napFailureReason: 클러스터 자동 확장 처리가 추가 노드 풀을 프로비저닝하지 못하도록 하는 전역 이유를 제공합니다(예: 노드 자동 프로비저닝이 사용 중지됨). 자세한 내용은 noScaleUp 최상위 수준 노드 자동 프로비저닝 이유 섹션을 참조하세요.
  • skippedMigs[].reason: 특정 MIG를 건너뛴 이유에 대한 정보를 제공합니다. 클러스터 자동 확장 처리는 확장 시도 도중 Pod 고려 대상에서 일부 MIG를 건너뜁니다(예: 노드를 하나 더 추가하면 클러스터 전체 리소스 한도를 초과하기 때문에). 자세한 내용은 noScaleUp MIG 수준 이유 섹션을 참조하세요.
  • unhandledPodGroups: 예약할 수 없는 특정 Pod 그룹이 확장을 트리거하지 않는 이유에 대한 정보가 포함되어 있습니다. Pod는 직접 실행 컨트롤러별로 그룹화됩니다. 컨트롤러가 없는 Pod는 그 자체로 그룹에 속합니다. 각 Pod 그룹에는 임의의 예시 Pod와 그룹의 Pod 수뿐 아니라 다음과 같은 이유가 포함되어 있습니다.
    • napFailureReasons: 클러스터 자동 확장 처리가 이 Pod 그룹을 수용하기 위해 새 노드 풀을 프로비저닝할 수 없는 이유(예: Pod에 어피니티 제약조건이 있음). 자세한 내용은 noScaleUp Pod 수준 노드 자동 프로비저닝 이유 섹션을 참조하세요.
    • rejectedMigs[].reason: 클러스터 자동 확장 처리가 이 Pod 그룹을 수용하기 위해 특정 MIG의 크기를 늘릴 수 없는 MIG별 이유(예: MIG의 노드가 Pod에 비해 너무 작음). 자세한 내용은 noScaleUp MIG 수준 이유 섹션을 참조하세요.

다음 로그 샘플은 noScaleUp 이벤트를 보여줍니다.

{
  "noDecisionStatus": {
    "measureTime": "1582523362",
    "noScaleUp": {
      "skippedMigs": [
        {
          "mig": {
            "name": "test-cluster-nap-n1-highmem-4-fbdca585-grp",
            "nodepool": "nap-n1-highmem-4-1cywzhvf",
            "zone": "us-central1-f"
          },
          "reason": {
            "messageId": "no.scale.up.mig.skipped",
            "parameters": [
              "max cluster cpu limit reached"
            ]
          }
        }
      ],
      "unhandledPodGroups": [
        {
          "napFailureReasons": [
            {
              "messageId": "no.scale.up.nap.pod.zonal.resources.exceeded",
              "parameters": [
                "us-central1-f"
              ]
            }
          ],
          "podGroup": {
            "samplePod": {
              "controller": {
                "apiVersion": "v1",
                "kind": "ReplicationController",
                "name": "memory-reservation2"
              },
              "name": "memory-reservation2-6zg8m",
              "namespace": "autoscaling-1661"
            },
            "totalPodCount": 1
          },
          "rejectedMigs": [
            {
              "mig": {
                "name": "test-cluster-default-pool-b1808ff9-grp",
                "nodepool": "default-pool",
                "zone": "us-central1-f"
              },
              "reason": {
                "messageId": "no.scale.up.mig.failing.predicate",
                "parameters": [
                  "NodeResourcesFit",
                  "Insufficient memory"
                ]
              }
            }
          ]
        }
      ],
      "unhandledPodGroupsTotalCount": 1
    }
  }
}

noScaleDown 이벤트

noScaleDown 이벤트는 클러스터 자동 확장 처리에 의한 삭제가 차단된 노드가 있을 때 주기적으로 발생합니다.

  • 사용률이 높기 때문에 제거할 수 없는 노드는 noScaleDown 이벤트에 포함되지 않습니다.
  • noScaleDown 이벤트는 최선의 방법입니다. 즉, 이러한 이벤트는 클러스터 자동 확장 처리가 축소할 수 없는 가능한 모든 이유를 포괄하지 않습니다.
  • noScaleDown 이벤트는 생성된 로그 볼륨을 제한하도록 제한됩니다. 지속되는 각 이유는 몇 분마다 발생합니다.
  • 노드 목록은 50개의 임의 항목으로 잘립니다. 실제 노드 수는 nodesTotalCount 필드에서 찾을 수 있습니다.

이유 필드

다음 필드는 축소가 발생하지 않은 이유를 설명하는 데 도움이 됩니다.

  • reason: 클러스터 자동 확장 처리가 축소되지 않는 전역 이유를 제공합니다(예: 최근 확장 후 백오프 기간). 자세한 내용은 noScaleDown 최상위 수준 이유 섹션을 참조하세요.
  • nodes[].reason: 클러스터 자동 확장 처리가 특정 노드를 삭제할 수 없는 노드별 이유를 제공합니다(예: 노드의 Pod를 이동할 위치가 없음). 자세한 내용은 noScaleDown 노드 수준 이유 섹션을 참조하세요.

다음 로그 샘플은 noScaleDown 이벤트를 보여줍니다.

{
  "noDecisionStatus": {
    "measureTime": "1582858723",
    "noScaleDown": {
      "nodes": [
        {
          "node": {
            "cpuRatio": 42,
            "mig": {
              "name": "test-cluster-default-pool-f74c1617-grp",
              "nodepool": "default-pool",
              "zone": "us-central1-c"
            },
            "name": "test-cluster-default-pool-f74c1617-fbhk"
          },
          "reason": {
            "messageId": "no.scale.down.node.no.place.to.move.pods"
          }
        }
      ],
      "nodesTotalCount": 1,
      "reason": {
        "messageId": "no.scale.down.in.backoff"
      }
    }
  }
}

확장 문제 해결

이 섹션에서는 확장 이벤트의 문제를 해결하는 방법을 안내합니다.

클러스터가 확장되지 않음

시나리오: 클러스터에 Pod를 만들었지만 지난 1시간 동안 대기 중 상태에서 멈춰 있습니다. 클러스터 자동 확장 처리가 Pod를 수용하기 위해 새 노드를 프로비저닝하지 않았습니다.

해결책:

  1. 로그 탐색기에서 이벤트 보기 섹션에 설명된 대로 클러스터 자동 확장 처리 이벤트의 로깅 세부 정보를 찾습니다.
  2. triggeringPods 필드에서 원하는 Pod를 포함하는 scaleUp 이벤트를 검색합니다. 특정 JSON 필드 값으로 필터링을 비롯한 로그 항목 필터링이 가능합니다. 고급 로그 쿼리에서 자세히 알아보세요.

    1. scaleUp 이벤트와 동일한 eventId가 포함된 EventResult를 찾습니다.
    2. errorMsg 필드를 보고 가능한 scaleUp 오류 메시지 목록을 참조합니다.

    ScaleUp 오류 예시: scaleUp 이벤트의 경우 오류가 "scale.up.error.quota.exceeded"임을 발견합니다. 이는 '할당량 초과로 인해 일부 MIG를 늘릴 수 없어서 scaleUp 이벤트가 실패했습니다'를 나타냅니다. 이 문제를 해결하려면 할당량 설정을 검토하고 할당량 초과에 근접한 설정을 늘립니다. 클러스터 자동 확장 처리가 새 노드를 추가하고 Pod가 예약됩니다.

  3. 그렇지 않으면 noScaleUp 이벤트를 검색하고 다음 필드를 검토합니다.

    • unhandledPodGroups: Pod(또는 Pod의 컨트롤러)에 대한 정보를 포함합니다.
    • reason: 확장이 차단될 수 있음을 나타내는 전역 이유를 제공합니다.
    • skippedMigs: 일부 MIG를 건너뛸 수 있는 이유를 제공합니다.
  4. noScaleUp 이벤트의 가능한 이유가 포함된 다음 섹션을 참조하세요.

    noScaleUp 예시: Pod의 noScaleUp 이벤트를 발견했고, rejectedMigs 필드의 모든 MIG에 두 매개변수 "NodeAffinity""node(s) did not match node selector"가 포함된 동일한 이유 메시지 ID "no.scale.up.mig.failing.predicate"가 있습니다. 오류 메시지 목록을 참조한 후 'MIG 조건자가 실패했기 때문에 MIG를 확장할 수 없다'는 것을 발견합니다. 매개변수는 실패한 조건자의 이름과 실패한 이유입니다. 이 문제를 해결하려면 Pod 사양을 검토하고 클러스터의 MIG와 일치하지 않는 노드 선택기가 있음을 확인합니다. Pod 사양에서 선택기를 삭제하고 Pod를 다시 만듭니다. 클러스터 자동 확장 처리가 새 노드를 추가하고 Pod가 예약됩니다.

  5. noScaleUp 이벤트가 없으면 다른 디버깅 메서드를 사용하여 문제를 해결합니다.

클러스터가 축소되지 않음

시나리오: 클러스터에 지난 며칠 동안 CPU와 메모리를 10%만 사용한 노드가 있습니다. 사용률이 낮음에도 클러스터 자동 확장 처리는 이 노드를 예상대로 삭제하지 않았습니다.

해결책:

  1. 로그 탐색기에서 이벤트 보기 섹션에 설명된 대로 클러스터 자동 확장 처리 이벤트의 로깅 세부 정보를 찾습니다.
  2. nodesToBeRemoved 필드에서 원하는 노드를 포함하는 scaleDown 이벤트를 검색합니다. 특정 JSON 필드 값으로 필터링을 비롯한 로그 항목 필터링이 가능합니다. 고급 로그 쿼리에서 자세히 알아보세요.
    1. scaleDown 이벤트에서 연결된 eventId가 포함된 EventResult 이벤트를 검색합니다.
    2. errorMsg 필드를 보고 가능한 scaleDown 오류 메시지 목록을 참조합니다.
  3. 그렇지 않으면 nodes 필드에 원하는 노드가 있는 noScaleDown 이벤트를 검색합니다. 축소가 차단될 수 있음을 나타내는 전역 이유는 reason 필드를 검토하세요.
  4. noScaleDown 이벤트의 가능한 이유가 포함된 다음 섹션을 참조하세요.

    noScaleDown 예시: 노드의 노드별 이유가 포함된 noScaleDown 이벤트를 찾았습니다. 메시지 ID는 "no.scale.down.node.pod.has.local.storage"이며, 단일 매개변수 "test-single-pod"가 있습니다. 오류 메시지 목록을 참조한 후 이것이 'Pod가 로컬 스토리지를 요청하기 때문에 축소를 차단하고 있습니다'를 뜻함을 발견합니다. Kubernetes 클러스터 자동 확장 처리 FAQ를 참조하여 포드에 "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" 주석을 추가하는 것이 해결책임을 알아냅니다. 주석을 적용한 후 클러스터 자동 확장 처리가 클러스터를 올바르게 축소합니다.

  5. noScaleDown 이벤트가 없으면 다른 디버깅 메서드를 사용하여 문제를 해결합니다.

메시지

클러스터 자동 확장 처리가 발생시킨 이벤트는 매개변수화된 메시지를 사용하여 이벤트에 대한 설명을 제공합니다. 이 NoScaleUp 이벤트 예시 로그에서와 같이 parameters 필드는 messageId 필드와 함께 사용할 수 있습니다.

이 섹션에서는 다양한 messageId 및 해당 매개변수에 대한 설명을 제공합니다. 하지만 가능한 모든 메시지가 이 섹션에 포함되지는 않으며 언제든지 확장될 수 있습니다.

scaleUp 오류

scaleUp 이벤트의 오류 메시지는 해당 eventResult 이벤트의 resultInfo.results[].errorMsg 필드에 있습니다.

메시지 설명 위험 완화
"scale.up.error.out.of.resources" 리소스 부족으로 인해 일부 MIG를 늘릴 수 없어서 scaleUp 이벤트가 실패했습니다.

매개변수: 실패 MIG ID

리소스 가용성 문제 해결 단계를 따릅니다.
"scale.up.error.quota.exceeded" Compute Engine 할당량 초과로 인해 일부 MIG를 늘릴 수 없어 scaleUp 이벤트가 실패했습니다.

매개변수: 실패 MIG ID

Google Cloud 콘솔의 MIG에 있는 오류 탭에서 초과되는 할당량을 확인합니다. 안내에 따라 할당량 증가를 요청합니다.
"scale.up.error.waiting.for.instances.timeout" 일부 MIG의 인스턴스가 제때 표시되지 않아서 scaleUp 이벤트가 실패했습니다.

매개변수: 실패 MIG ID

이 메시지는 일시적입니다. 문제가 계속되는 경우 자세한 내용은 Google Cloud 지원팀에 문의하세요.
"scale.up.error.ip.space.exhausted" 클러스터에 새 노드 또는 포드를 추가하는 데 사용할 할당되지 않은 IP 주소 공간이 충분하지 않아 scaleUp 이벤트가 실패했습니다.

매개변수: 실패 MIG ID

노드 또는 포드의 IP 주소 공간 부족 문제를 해결하려면 문제 해결 단계를 참조하세요.
"scale.up.error.service.account.deleted" 클러스터 자동 확장 처리에 사용된 서비스 계정이 삭제되었기 때문에 scaleUp 이벤트가 실패했습니다.

매개변수: 실패 MIG ID

추가 조사를 위해 Google Cloud 지원팀에 문의하세요.

scaleDown 오류

scaleDown 이벤트의 오류 메시지는 해당 eventResult 이벤트의 resultInfo.results[].errorMsg 필드에 있습니다.

메시지 설명 위험 완화
"scale.down.error.failed.to.mark.to.be.deleted" 노드를 삭제하도록 표시할 수 없어서 scaleDown 이벤트가 실패했습니다.

매개변수: 실패 노드 이름

이 메시지는 일시적입니다. 문제가 계속되면 추가 조사를 위해 Google Cloud 지원팀에 문의하세요.
"scale.down.error.failed.to.evict.pods" 일부 Pod를 노드에서 제거할 수 없어서 scaleDown 이벤트가 실패했습니다.

매개변수: 실패 노드 이름

포드 중단 예산에 대한 권장사항을 검토하여 애플리케이션 복제본 제거를 수행할 수 있는 경우 규칙에서 이를 허용하도록 합니다.
"scale.down.error.failed.to.delete.node.min.size.reached" 클러스터가 이미 최소 크기이기 때문에 노드를 삭제할 수 없어서 scaleDown 이벤트가 실패했습니다.

매개변수: 실패 노드 이름

노드 풀 자동 확장에 설정된 최솟값을 검토하고 필요한 경우 설정을 조정합니다.

noScaleUp 이벤트의 이유

noScaleUp 최상위 수준 이유

noScaleUp 이벤트의 최상위 수준 이유 메시지는 noDecisionStatus.noScaleUp.reason 필드에 표시됩니다. 메시지에는 클러스터 자동 확장 처리가 클러스터를 확장할 수 없는 최상위 수준 이유가 포함되어 있습니다.

메시지 설명 위험 완화
"no.scale.up.in.backoff" 확장이 백오프 기간에 있으므로(일시적으로 차단됨) noScaleUp이 발생했습니다. 이는 포드 수가 많은 확장 이벤트 중에 발생할 수 있는 일시적인 메시지입니다. 이 메시지가 지속되면 추가 조사를 위해 Google Cloud 지원팀에 문의하세요.

noScaleUp 최상위 수준 노드 자동 프로비저닝 이유

noScaleUp 이벤트의 최상위 수준 노드 자동 프로비저닝 이유 메시지는 noDecisionStatus.noScaleUp.napFailureReason 필드에 표시됩니다. 메시지에는 클러스터 자동 확장 처리가 새 노드 풀을 프로비저닝할 수 없는 최상위 수준 이유가 포함되어 있습니다.

메시지 설명 위험 완화
"no.scale.up.nap.disabled" 클러스터 수준에서 노드 자동 프로비저닝이 사용 설정되지 않았습니다. 노드 자동 프로비저닝을 사용 중지한 경우 대기 중인 포드에 기존 노드 풀로 충족할 수 없는 요구사항이 있으면 새 노드가 자동으로 프로비저닝되지 않습니다. 클러스터 구성을 검토하고 노드 자동 프로비저닝 사용 설정을 참조하세요.

noScaleUp MIG 수준 이유

noScaleUp 이벤트의 MIG 수준 이유 메시지는 noDecisionStatus.noScaleUp.skippedMigs[].reasonnoDecisionStatus.noScaleUp.unhandledPodGroups[].rejectedMigs[].reason 필드에 표시됩니다. 메시지에는 클러스터 자동 확장 처리가 특정 MIG의 크기를 늘릴 수 없는 이유가 포함되어 있습니다.

메시지 설명 위험 완화
"no.scale.up.mig.skipped" 시뮬레이션 중에 MIG를 건너뛰었기 때문에 MIG를 확장할 수 없습니다.

매개변수: 사람이 읽을 수 있는 건너뛴 이유(예: 포드 요구사항 누락)

오류 메시지에 포함된 매개변수를 검토하고 MIG를 건너뛴 이유를 확인합니다.
"no.scale.up.mig.failing.predicate" 대기 중인 포드의 조건자 요구사항을 충족하지 못하여 MIG를 확장할 수 없습니다.

매개변수: 실패 조건자의 이름, 사람이 읽을 수 있는 실패 이유

어피니티 규칙, taint 또는 톨러레이션(toleration)과 같은 포드 요구사항 및 리소스 요구사항 검토

noScaleUp Pod 그룹 수준 노드 자동 프로비저닝 이유

noScaleUp 이벤트의 Pod 그룹 수준 노드 자동 프로비저닝 이유 메시지는 noDecisionStatus.noScaleUp.unhandledPodGroups[].napFailureReasons[] 필드에 표시됩니다. 메시지에는 클러스터 자동 확장 처리가 특정 Pod 그룹을 수용하기 위해 새 노드 풀을 프로비저닝할 수 없는 이유가 포함되어 있습니다.

메시지 설명 위험 완화
"no.scale.up.nap.pod.gpu.no.limit.defined" 대기 중인 포드에 GPU 요청이 있으므로 노드 자동 프로비저닝이 노드 그룹을 프로비저닝할 수 없지만 GPU 리소스 제한은 클러스터 수준에서 정의되지 않습니다.

매개변수: 요청된 GPU 유형

대기 중인 포드의 GPU 요청을 검토하고 클러스터 수준 노드 자동 프로비저닝 GPU 한도 구성을 업데이트합니다.
"no.scale.up.nap.pod.gpu.type.not.supported" 알 수 없는 GPU 유형에 대한 요청이 있으므로 노드 자동 프로비저닝이 포드의 노드 그룹을 프로비저닝하지 않았습니다.

매개변수: 요청된 GPU 유형

GPU 유형의 대기 중인 포드 구성을 확인하여 지원되는 GPU 유형과 일치하는지 확인합니다.
"no.scale.up.nap.pod.zonal.resources.exceeded" 클러스터 전체 최대 리소스 한도를 위반하거나, 영역의 사용 가능한 리소스를 초과하거나, 요청에 맞는 머신 유형이 없으므로 노드 자동 프로비저닝이 이 영역에 있는 포드의 노드 그룹을 프로비저닝하지 않았습니다.

매개변수: 고려되는 영역의 이름

클러스터 전체 최대 리소스 한도, 포드 리소스 요청 또는 노드 자동 프로비저닝에 사용할 수 있는 영역을 검토하고 업데이트합니다.
"no.scale.up.nap.pod.zonal.failing.predicates" 실패한 조건자 때문에 노드 자동 프로비저닝이 이 영역에 있는 Pod의 노드 그룹을 프로비저닝하지 않았습니다.

매개변수: 고려된 영역의 이름, 사람이 읽을 수 있는 조건자 실패 이유

어피니티 규칙, taint, 톨러레이션(toleration)과 같은 대기 중인 포드 요구사항 및 리소스 요구사항 검토

noScaleDown 이벤트의 이유

noScaleDown 최상위 수준 이유

noScaleDown 이벤트의 최상위 수준 이유 메시지는 noDecisionStatus.noScaleDown.reason 필드에 표시됩니다. 메시지에는 클러스터 자동 확장 처리가 클러스터를 축소할 수 없는 최상위 수준 이유가 포함되어 있습니다.

메시지 설명 위험 완화
"no.scale.down.in.backoff" 축소가 백오프 기간에 있으므로(일시적으로 차단됨) noScaleDown 이벤트가 발생했습니다. 이 이벤트는 일시적이어야 하며 최근 확장 이벤트가 있는 경우 발생할 수 있습니다. 축소 실패의 하위 수준 이유와 관련된 완화 단계를 따릅니다. 근본적인 이유가 해결되면 클러스터 자동 확장 처리가 백오프를 종료합니다. 근본적인 원인을 해결한 후에도 메시지가 지속되면 추가 조사를 위해 Google Cloud 지원팀에 문의하세요.
"no.scale.down.in.progress" 삭제가 예약된 이전 노드가 삭제될 때까지 축소가 차단되어 noScaleDown 이벤트가 발생했습니다. 포드가 결국 강제로 삭제되므로 이 이벤트는 일시적이어야 합니다. 이 메시지가 자주 발생하면 축소를 차단하는 포드의 gracefulTerminationPeriod 값을 검토할 수 있습니다. 해결 속도를 높이려면 포드가 더 이상 필요하지 않은 경우 강제로 삭제할 수도 있습니다.

noScaleDown 노드 수준 이유

noScaleDown 이벤트의 노드 수준 이유 메시지는 noDecisionStatus.noScaleDown.nodes[].reason 필드에 표시됩니다. 메시지에는 클러스터 자동 확장 처리가 특정 노드를 삭제할 수 없는 이유가 포함되어 있습니다.

메시지 설명 위험 완화
"no.scale.down.node.scale.down.disabled.annotation" scale-down-disabled 주석이 있으므로 노드를 삭제할 수 없습니다. Kubernetes 클러스터 자동 확장 처리 FAQ의 안내에 따라 축소를 방지하는 주석을 검토합니다.
"no.scale.down.node.node.group.min.size.reached" 노드 그룹의 크기가 이미 최소이므로 노드를 삭제할 수 없습니다. 노드 풀 자동 확장에 설정된 최솟값을 검토하고 조정합니다.
"no.scale.down.node.minimal.resource.limits.exceeded" 사용량이 적은 노드의 축소는 노드 자동 프로비저닝에 설정된 클러스터 전체 최소 리소스 한도를 위반하므로 차단됩니다. 클러스터 전체의 최소 리소스 한도를 검토합니다.
"no.scale.down.node.no.place.to.move.pods" 사용량이 적은 노드는 클러스터의 다른 노드로 이동할 수 없는 포드를 실행하므로 사용량이 적은 노드의 축소는 차단됩니다. 포드 일정을 변경해야 할 것으로 예상되는 경우, 사용률이 낮은 노드에서 포드의 예약 요구사항을 검토하여 클러스터의 다른 노드로 이동할 수 있는지 확인합니다. 이 메시지는 포드를 예약할 수 있는 다른 노드가 없으므로 포드가 다시 예약되지 않을 것으로 예상되는 경우에 표시됩니다.
"no.scale.down.node.pod.not.backed.by.controller" 포드에 Kubernetes 클러스터 자동 확장 처리(ReplicationController, DaemonSet, Job, StatefulSet, 또는 ReplicaSet)에 알려진 컨트롤러가 없으므로 포드에서 사용률이 낮은 노드의 축소를 차단합니다. Kubernetes 클러스터 자동 확장 처리 FAQ에서 클러스터 자동 확장 처리가 노드를 삭제하지 못하도록 하는 포드 유형에 대해 자세히 알아보세요.

매개변수: 차단 pod의 이름

포드의 주석 "cluster-autoscaler.kubernetes.io/safe-to-evict": "true"를 설정하거나 컨트롤러(ReplicationController, DaemonSet, Job, StatefulSet, 또는 ReplicaSet)를 정의합니다.
"no.scale.down.node.pod.has.local.storage" pod가 로컬 스토리지를 요청하므로 축소를 차단하고 있습니다. Kubernetes 클러스터 자동 확장 처리 FAQ에서 클러스터 자동 확장 처리가 노드를 삭제하지 못하도록 하는 포드 유형에 대해 자세히 알아보세요.

매개변수: 차단 pod의 이름

포드의 로컬 스토리지에 있는 데이터가 중요하지 않은 경우 포드에 대해 "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" 주석을 설정합니다.
"no.scale.down.node.pod.not.safe.to.evict.annotation" Pod에 '제거가 안전하지 않음' 주석이 있으므로 Pod가 축소를 차단하고 있습니다. 자세한 내용은 Kubernetes 클러스터 자동 확장 처리 FAQ를 참조하세요.

매개변수: 차단 pod의 이름

포드를 안전하게 제거할 수 있는 경우 "cluster-autoscaler.kubernetes.io/safe-to-evict": "true"로 주석을 업데이트합니다.
"no.scale.down.node.pod.kube.system.unmovable" DaemonSet이 아니고 미러링되지 않으며 kube-system 네임스페이스에 PodDisruptionBudget이 없는 포드이기 때문에 포드에서 축소를 차단하고 있습니다.

매개변수: 차단 pod의 이름

Kubernetes 클러스터 자동 확장 처리 FAQ의 안내에 따라 PodDisruptionBudget을 설정하여 클러스터 자동 확장 처리가 kube-system 네임스페이스의 포드를 이동할 수 있도록 합니다.
"no.scale.down.node.pod.not.enough.pdb" 남은 PodDisruptionBudget이 충분하지 않아 포드가 축소를 차단하고 있습니다. 자세한 내용은 Kubernetes 클러스터 자동 확장 처리 FAQ를 참조하세요.

매개변수: 차단 pod의 이름

포드의 PodDisruptionBudget을 검토합니다. PodDisruptionBudget 권장사항을 참조하세요. 더 많은 사용할 수 없는 포드를 허용하도록 애플리케이션을 확장하거나 PodDisruptionBudget을 변경하여 메시지의 문제를 해결할 수 있습니다.
"no.scale.down.node.pod.controller.not.found" 컨트롤러(예: Deployment 또는 ReplicaSet)를 찾을 수 없기 때문에 포드에서 축소를 차단하고 있습니다. 로그를 검토하여 컨트롤러가 삭제된 후에도 포드가 실행되도록 한 작업을 확인합니다. 이 문제를 해결하려면 포드를 수동으로 삭제하면 됩니다.
"no.scale.down.node.pod.unexpected.error" 예상치 못한 오류 상태인 포드가 있기 때문에 사용률이 낮은 노드의 축소가 차단되었습니다. 추가 조사를 위해 GCP 지원팀에 문의하세요.

다음 단계