Kubernetes에서 Pod을 배포할 때 노드의 리소스 부족, 스케줄링 조건 미충족, 예약된 리소스 초과 등의 이유로 스케줄링이 실패하는 경우가 많습니다.
이 글에서는 Kubernetes 환경에서 발생할 수 있는 대표적인 리소스 제약 및 스케줄링 오류 5가지를 정리하고, 각각의 원인과 해결 방법을 설명합니다. 🚀
1️⃣ “Insufficient memory”
🔎 오류 설명
이 오류는 Pod이 요청한 메모리보다 노드에 가용한 메모리가 부족할 때 발생합니다.
특히, 요청된 requests 및 limits 설정이 너무 높으면 문제가 발생할 수 있습니다.
🔧 해결 방법
1) 현재 클러스터의 노드 메모리 사용량 확인
클러스터의 모든 노드에서 가용한 메모리를 확인합니다.
kubectl top nodes
Pod이 실행될 노드의 메모리 상태를 확인하려면 다음 명령을 실행합니다.
kubectl describe node <node-name>
2) Pod의 리소스 요청 줄이기
Pod이 요청하는 메모리를 조정하여 실행할 수 있도록 수정합니다.
resources:
requests:
memory: "256Mi"
limits:
memory: "512Mi"
3) 새로운 노드 추가
클러스터에 추가 리소스가 필요하다면 새로운 노드를 추가합니다.
kubectl scale --replicas=3 deployment/<deployment-name>
2️⃣ “No nodes are available that match all of the predicates…”
🔎 오류 설명
이 오류는 Pod이 스케줄링될 수 있는 적절한 노드가 없을 때 발생합니다.
보통 리소스 부족, 노드 셀렉터 조건 불일치, taints 및 tolerations 문제가 원인입니다.
🔧 해결 방법
1) 스케줄링 불가능한 이유 확인
Pod이 왜 스케줄링되지 않는지 확인하려면 다음 명령어를 실행합니다.
kubectl describe pod <pod-name> -n <namespace>
출력된 메시지에서 "0/3 nodes are available: <원인>"과 같은 정보를 확인할 수 있습니다.
2) 노드 셀렉터 확인
Pod이 특정 노드에서만 실행되도록 설정되었는지 확인합니다.
spec:
nodeSelector:
disktype: ssd
셀렉터 조건이 충족되지 않는다면 제거하거나 조정해야 합니다.
3) Taints & Tolerations 설정 확인
노드에 taint가 적용되어 있어 Pod이 실행되지 않을 수도 있습니다.
현재 적용된 taint를 확인합니다.
kubectl describe node <node-name> | grep Taint
Pod이 특정 taint를 허용하도록 설정하려면 다음과 같이 tolerations을 추가합니다.
spec:
tolerations:
- key: "example-key"
operator: "Exists"
effect: "NoSchedule"
3️⃣ “invalid resource requests…”
🔎 오류 설명
이 오류는 Pod이 요청하는 리소스 값이 잘못되었거나, 허용 범위를 초과했을 때 발생합니다.
예를 들어, requests와 limits 값이 역전되었거나, 클러스터의 리소스 할당 한도를 초과한 경우입니다.
🔧 해결 방법
1) 잘못된 리소스 값 확인
Pod이 요청하는 리소스 값을 확인합니다.
kubectl describe pod <pod-name> -n <namespace>
출력에서 requests.memory > limits.memory 와 같은 오류가 있는지 확인합니다.
2) 리소스 값을 올바르게 수정
리소스 요청 값이 올바르게 설정되었는지 확인합니다.
resources:
requests:
cpu: "500m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "512Mi"
3) 클러스터 리소스 할당 한도 확인
클러스터 전체에서 요청할 수 있는 최대 리소스를 확인하려면 다음 명령을 실행합니다.
kubectl get resourcequotas -n <namespace>
만약 특정 네임스페이스에서 할당된 리소스를 초과했다면, 리소스 할당량을 증가시키거나 네임스페이스를 변경해야 합니다.
4️⃣ “error: the server doesn’t have a resource type…”
🔎 오류 설명
이 오류는 kubectl이 요청한 리소스를 Kubernetes API에서 찾을 수 없을 때 발생합니다.
잘못된 리소스 이름을 입력했거나, 해당 리소스를 제공하는 API 그룹이 비활성화된 경우가 원인일 수 있습니다.
🔧 해결 방법
1) 지원되는 리소스 목록 확인
현재 클러스터에서 지원하는 리소스를 확인하세요.
kubectl api-resources
특정 그룹에서 지원하는 API 버전을 확인하려면 다음 명령을 실행하세요.
kubectl api-versions
2) 올바른 리소스 타입 입력 확인
잘못된 리소스 타입을 입력했는지 확인합니다.
kubectl get deployment # 올바른 리소스 타입
kubectl get deploy # 잘못된 리소스 타입 (오타)
3) CRD(Custom Resource Definition) 확인
만약 커스텀 리소스를 사용하고 있다면, 해당 CRD가 적용되었는지 확인합니다.
kubectl get crds
만약 CRD가 존재하지 않는다면, 다시 적용해야 합니다.
kubectl apply -f <crd-file>.yaml
5️⃣ “unknown field ‘replicas’ in…”
🔎 오류 설명
이 오류는 잘못된 YAML 형식 또는 지원되지 않는 필드가 사용되었을 때 발생합니다.
일반적으로 Deployment, StatefulSet 등의 리소스 정의에서 오타나 필드 위치 오류가 있는 경우 나타납니다.
🔧 해결 방법
1) YAML 문법 오류 확인
작성한 YAML 파일이 올바른지 검사합니다.
kubectl apply --dry-run=client -f <file.yaml>
2) 지원되는 필드 목록 확인
해당 리소스에서 지원하는 필드를 확인하려면 kubectl explain을 사용합니다.
kubectl explain deployment.spec
출력된 필드 목록을 참고하여 replicas가 올바른 위치에 있는지 확인합니다.
3) YAML 파일 예제
다음과 같은 형식으로 replicas를 올바르게 설정합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3 # 올바른 위치
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image
🎯 마무리
이 글에서는 Kubernetes에서 자주 발생하는 리소스 제약 및 스케줄링 오류 5가지와 그 해결 방법을 다뤘습니다.
✔️ 메모리 부족 오류 (Insufficient memory)
✔️ 노드 부족 오류 (No nodes are available that match all of the predicates)
✔️ 잘못된 리소스 요청 오류 (invalid resource requests)
✔️ 지원되지 않는 리소스 오류 (error: the server doesn’t have a resource type)
✔️ YAML 필드 오류 (unknown field ‘replicas’ in…)
만약 위 해결 방법으로도 문제가 해결되지 않는다면,
kubectl describe pod, kubectl top nodes, kubectl api-resources 명령어 등을 활용하여 추가로 분석해보는 것이 좋습니다.
'Kubernetes > Trouble Shooting' 카테고리의 다른 글
🛠️ K8S Trouble Shooting : TLS 및 인증서 문제 해결하기 (0) | 2025.03.02 |
---|---|
🛠️ K8S Trouble Shooting : 네임스페이스 및 설정 오류 해결하기 (0) | 2025.03.02 |
🛠️ K8S Trouble Shooting : Persistent Volume(스토리지) 관련 오류 해결하기 (0) | 2025.03.02 |
🛠️ K8S Trouble Shooting : RBAC 및 인증 관련 오류 해결하기 (0) | 2025.03.02 |
🛠️ K8S Trouble Shooting : 컨테이너 및 이미지 문제 해결하기 (0) | 2025.03.02 |