본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 51: Manual Scheduling

by 공부하는 무니 2023. 1. 6.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


이번 강의에서는 노드에 파드를 수동으로 스케쥴링하는 다양한 방법에 대해 배워볼 것입니다.

Manual Scheduling

How Scheduling Works

만약 클러스터에 스케쥴러가 없으면 어떻게 하실 것인가요? 내장된 스케쥴러에 의존하지 않고 직접 파드를 예약하려고 합니다. 이때 스케쥴러는 백엔드에서 어떻게 작동할까요? 간단한 pod definition file부터 시작하도록 하겠습니다. 모든 파드에는 Node Name이라는 필드가 있습니다. 디폴트로는 값이 들어가 있지 않습니다. 일반적으로 definition file을 만들 때 지정하지 않고, Kubernetes가 자동으로 추가하는 필드입니다. ![[Pasted image 20230106115111.png]] 스케쥴러는 모든 파드들을 검사하면서 Node Name속성이 설정되지 않은 파드를 찾습니다. 이들이 바로 스케쥴링 후보들입니다.  그다음에는 스케쥴링 알고리즘을 사용하여 파드에 적합한 노드를 고릅니다. 골랐으면 파드를 그 노드에 스케쥴링합니다. 이때 바인딩 오브젝트를 생성하면서 파드의 Node Name에 그 노드의 이름이 들어가게 됩니다.

No Scheduler

만약 모니터링하고 스케쥴링할 스케쥴러가 없다면 어떻게 할까요? 이 상태에서 파드는 계속 보류중(Panding)입니다. 이를 해결하려면 수동으로 파드를 노드에 할당해야 합니다. 스케쥴러 없이 파드를 스케쥴링하는 가장 쉬운 방법은 파드를 생성할 때 pod sepcification file에서 Node Name에 노드 이름을 지정하는 것입니다. 이렇게 하면 파드가 지정된 노드에 할당됩니다. Node Name에 노드를 지정하는 것은 파드를 만들 때만 가능합니다.  이미 파드가 생성된 경우에 파드를 노드에 할당하고 싶다면 어떻게 해야 할까요? Kubernetes는 파드의 Node Name속성을 수정하지 못하게 해놓았습니다. 이럴 때에는 바인딩 오브젝트를 만들고, 파드의 바인딩 API에 POST 리퀘스트를 보내면 됩니다. 이 방식은 실제로 스케쥴러가 수행하는 작업을 따라한 것입니다. 아래와 같이 바인딩 오브젝트를 만듭니다.

apiVersion: v1 kind: Binding metadata:   name: nginx target:   apiVersion: v1   kind: Node   name: node02

 

바인딩 객체에서 target하위의 name에 노드 이름이 들어갑니다. 그런 다음, 바인딩 API에 POST request를 보냅니다.  POST

 

request를 보낼 때에는, YAML과 동일한 내용을 JSON으로 변환한 데이터를 사용해야 합니다.

 

반응형

댓글