본문 바로가기
반응형

 

1. 파드 리소스

 

우선 파드는 옵션으로 리소스에 대한 제약을 걸 수 있는데일정 값이상이여먄하는 리퀘스트 옵션이나 일정 이상값으로 리소스를 사용하지 못하게하는 리미트가 있습니다. 그외에도 파드 옵션이 아닌 별개의 쿠버네티스 리소스로 리밋레인지, 리소스쿼터 등으로 파드의 리소스들을 관리할 수 있습니다

 

2. 오토스케일링

 

그럼 다시 돌아와 오토스케일링 기법인 수평적 파드 오토스케일러 HPA 에 대해 확인 해 보겠습니다. 수평적으로 파드를 자동으로 스케일링 할 수있으며, 리소스 크기를 조절할 수 있는 디플로이먼트와 같은 컨트롤러 리소스에 적용할 수 있습니다. HPA메트릭서버에 현재 리소스 메트릭 정보를 받아옵니다. 그 이후 측정된 메트릭 정보를 기반으로 스케일링에 필요한 파드수를 계산합니다. 목표 복제본수가 나오면, 파드를리하는 컨트롤러의 복제본수를 조정하여 복제본수를 확장하게 됩니다.

예를 들어 그림과 같이 2개의 파드가 있다고 가정하겠습니다. 1, 2번파드에 테스트를 위하여 부하를 주게된다면, CPU 사용률이 목표값을 넘어가게 됩니다. 그럼 HPA 에 의해 곧 스케일링이 이루어지게 되어 새로운 3번째 파드가 생기게 됩니다. 만일 파드에 주던 부하를 종료하게 된다면 다시 원래 기본값인 파드2개로 다시 돌아오게 됩니다.

 

 

 

 

3. 노드셀렉터

 

 

 

파드의 배치전략인 스케줄러 입니다. 첫번째로는 노드셀렉터인데 파드를 특정노드에 배치하기 위한 방법입니다.

이전 레이블 셀렉터처럼 노드에 레이블을 입력하여 지정하고, 컨트롤러나 파드를 선언할때 노드셀렉터를 이용하여 노드를 선택하여 배치합니다. 위 그림처럼 노드셀렉터에 key 에 app, value에 logging-node 이라고 입력된 노드셀렉터는 다른노드가 아닌 키밸류값이 일치한 왼쪽 두개의 노드에만 파드를 스케줄링합니다.

만약 옵션이 없다면 모든 노드에 스케쥴링 하게 됩니다. (즉, 그림 예시로는 app=logging-node, app=none 에 다 하게됨)

 

 

4. 어피니티

 

이번엔 배치 선호도를 조절하여 배치하는 방법인 어피니티 대해 말씀드리겠습니다. 노드셀렉터와 기본적으로 크게 다르진 않습니다. 다만 어피니티는  3가지 어피니티가 있습니다.

노드어피티니는 파드를 특정노드에 배치할 것을 선호하는, 노드셀렉터와 비슷한 역할을 합니다.

파드 어피니티는 파드를 다른 파드와 같은 노드에 배치할 것을 선호하는 옵션입니다.

파드 안티 어피니티는 파드간 다른 노드에 배치할 것을 선호하는 옵션입니다.

 

노드어피니티는 앞선 노드셀렉터와 작동방식이 크게 다르지 않지만,

노드를 지정하는게 아닌 선호 옵션이기때문에 엄격성을 유연하게 풀게된다면 꼭 강제되는 사항은 아닙니다.

 

예시로 파드어피니티 설정한 것을 볼 수 있습니다. 백엔드앱이 이미 배치되어있고, 프론트엔드앱을 새로 배치하려고하는데 파드어피니티로 백엔드가 설정되어있기에 다른 노드가 아닌 백엔드 파드가 배치되어있는곳에 같이 배치되게 됩니다.

 

이 예시는 파드 안티 어피니티이기때문에 앞선 파드어피니와는 달리 다른 노드를 선호하여 다른 노드에 배치하게 됩니다.

 

5. 테인트, 톨러레이션

 

테인트는 특정 노드에 파드가 추가적으로 스케줄링 하지 않게하는 옵션입니다.

테인트 설정을 무시할 수 있도록하는것이 톨러레이션입니다.

예시의 경우 테인트로 레드, 오렌지, 핑크가 설정되어있어서 다른 노드들은 배치가 불가능하지만 톨러레이션으로 값을 맞춘 파드들만 노드에 배치할 수 있게 되어있습니다.

두가지의 설정의 주 목적은 노드에 특정 역할을 할당하기 위해 사용합니다. 실제로 쿠버네티스를 설치하면 보통 컨트롤플레인용인 마스터노드와 워커노드로 나누어 설치하게 되는데, 마스터노드에는 새롭게 파드들이 배치될 수 없도록 테인트값이 설정되어있는것을 볼 수 있습니다.

 

6. 커든, 드레인

 

커든은 특정 노드에 파드가 스케줄링 되지 않도록 하는 기능입니다. 방금 말씀드린 테인트 비슷하지만, 테인트는 톨러레이션과 함께 사용되는 반면에 커든은 예외사항이 아예 없습니다. 현재 동작중인 파드에는 영향을 끼치지는 않습니다. 드레인은 노드에 파드가 없어야 할 경우 파드들을 다른곳으로 이전시킵니다. 주로 노드의 유지보수 목적으로 사용되며 또한 레인을 적용하면 자동으로 커든이 적용됩니다.

그림의 예시는 노드 2번에 드레인을 적용한 상태입니다. 커든이 적용되어 새로운 파드의 배치를 막고 파드들을 각각 1번과 3번노드로 이전시킨것을 확인할 수 있습니다. 만약 특정볼륨이나 데몬셋이 있다면 드레인이 안되니 어떤 리소스들이 노드에 있는지 드레인 전에 확인해야 합니다.

728x90
반응형

'IT 공부 > PaaS' 카테고리의 다른 글

[Harbor] 사설 image repository Harbor 설치 방법 정리  (0) 2024.04.11
[K8S] MetalLB 설치  (0) 2024.02.20
[K8S] 8. Statefulset  (0) 2024.01.20
[K8S] 7. Deployment  (0) 2024.01.19
[K8S] 6. ConfigMap, Secret  (0) 2024.01.19

한걸음 한걸음

개인적인 기록