CKA 공부 8일차

Taints And Tolerations VS Node Affinity

  • Taints And Tolerations를 사용하면 특정 노드의 Taints와 일치하는 Toleration에 해당하는 노드만 배포할 수 있다.

  • Taints된 노드에 Toleration할 수 있는 노드는 Taints되지 않은 노드에도 배포될 수 있다.

  • Node Affinity는 특정 노드가 반드시 해당 노드에 배포되게 하는 옵션이다.

  • 그러나 다른 파드가 반드시 그 노드에 배포되지 않을 것이라는 것을 보장해주지 않는다.

  • 만약 어떤 파드가 특정 노드에만 배치되어야하고, 그 노드에 다른 파드가 배포되지 않게 하려면 어떻게 할 수 있을까?

  • 이 때 TaintsTolerations, 그리고 Node Affinity를 함께 사용해볼 수 있다.

  • 이렇게 하면 반드시 특정 노드에만 배포되는 파드반드시 특정 파드만 배포되는 노드 두 가지 조건을 모두 만족할 수 있다.

Resource Requirements And Limits

  • k8s 스케쥴러는 마치 테트리스처럼 특정 파드가 노드에 배포될 때 적절한 노드에 배포해준다.

  • 이 때 CPU, 메모리, 디스크 자원을 계산한다.

  • POD 또는 Deployment에 얼마만큼의 노드의 자원을 사용할 것인지 명시해줄 수 있다.

  • 예를 들면, 1CPU, 1G 메모리가 그 예시이다.

1 CPU?

  • 그러면 1 CPU가 의미하는 바는 무엇일까?

  • 이를 이해하기 전에 먼저 CPU 단위부터 이해해야한다.

  • 노드의 CPU 자원은 0.1, 100m과 같이 표현할 수 있다.

  • 100m의 경우 밀리를 의미하며 이는 0.1 CPU와 동일한 의미를 갖는다.

  • 1m까지 설정 가능하며 그 이하는 불가능하다.

  • 1 CPU의 의미는 1 vCPU와 같은 의미를 갖는다.

  • 이는 GCP에서는 1 Core, 1 하이퍼 쓰레드를 의미한다.

Memory

  • 비슷하게 메모리도 단위별로 셋팅이 가능하다.

  • 1G > 1M > 1K 순이다.

  • 1G의 경우 1,000,000,000

  • 1Gi의 경우 1,073,741,824

Resource Limit

  • 노드에 리소스 제한이 없으면 특정 파드가 노드의 자원을 모두 사용하면서 이슈가 발생할 수 있다.

  • 이를 위해 우리는 파드에 리소스 자원 제한을 걸어줄 수 있다.

  • 쿠버네티스의 기본 메모리 제한은 512 Mi이다.

Exceed Limits

  • 그럼 제한된 자원을 초과하면 어떤 일이 벌어질까?

  • 파드가 제한된 CPU 자원을 넘어서려고 할 경우 Throttle이 발생한다.

  • k8s의 파드가 CPU 제한 용량을 초과하면 Throttle이 발생하여 이를 억제한다.

  • 때문에 POD가 죽거나 하지는 않는다.

  • 문제가 되는 상황은 메모리 자원을 한계치를 넘어설 때 인데, 이 경우 OOM(Out Of Memory)가 발생하면서 POD가 죽게 된다.





© 2022. by minkuk

Powered by minkuk