Kubernetes Pod oom-score-adj Policy

Intro

Kubernetes에서 Pod의 oom-score-adj를 설정하는 로직에 대해 정리한다.

K8S v1.19.4 기준


Pod oom-score-adj Policy

Pod에 해당 값을 설정하는 주최는 kubelet이다.

Basic Policy

기본적으로 QoS Class 별로 아래와 같은 oom-score-adj 값이 설정된다.

  • Best Effort : 1000
  • Guaranteed : -998
  • Burstable : 999~2

Critical Pod Policy

Kubelet에서 ‘Critical’ 하다고 생각되는 Pod들의 oom-score-adj 값을 Guaranteed QoS와 동일한 값인 ‘-998’로 설정한다.

Critical Pod 분류

다음과 같은 Pod들을 Critical Pod으로 분류한다.

  • Static Pod인 경우 (Pod Source가 API Server가 아닌 경우 - “kubernetes.io/config.source” Annotation의 값으로 판별)
  • Mirror Pod인 경우 (Node별 File로 생성되는 Static Pod - “kubernetes.io/config.mirror” Annotation으로 판별)
  • Pod의 Priority 값이 20억 이상인 경우 (kube-system Pod들의 경우 20억 이상의 Priority Class를 사용)

참고) kube-proxy

kube-proxy는 ‘–oom-score-adj’ 옵션을 통해 oom-score-adj 값을 설정할 수 있다. 기본값은 ‘-999’이다.


Source

  • https://kubernetes.io/ko/docs/reference/command-line-tools-reference/kube-proxy/
  • https://github.com/kubernetes/kubernetes/tree/release-1.19
  • https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#node-oom-behavior

Leave a comment