CKA 공부 8일차
in Devops on Kubernetes
Taints And Tolerations VS Node Affinity
Taints And Tolerations를 사용하면 특정 노드의
Taints
와 일치하는Toleration
에 해당하는 노드만 배포할 수 있다.단
Taints
된 노드에Toleration
할 수 있는 노드는Taints
되지 않은 노드에도 배포될 수 있다.Node Affinity
는 특정 노드가 반드시 해당 노드에 배포되게 하는 옵션이다.그러나 다른 파드가 반드시 그 노드에 배포되지 않을 것이라는 것을 보장해주지 않는다.
만약 어떤 파드가 특정 노드에만 배치되어야하고, 그 노드에 다른 파드가 배포되지 않게 하려면 어떻게 할 수 있을까?
이 때
Taints
와Tolerations
, 그리고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가 죽게 된다.