Kubernetes pod 스케줄링 과정 분석 - 읽고 정리

<눈문,학회>|2021. 1. 13. 22:05
반응형

POD

https://kubernetes.io/ko/docs/concepts/workloads/pods/ 참조

  • POD  쿠퍼네티스에서 생성하고 관리할  있는 배포가능한 가장 작은 컴퓨팅 단위. 하나 이상의 컨테이너의 그룹. 스토리지와 네트워크를 공유한다. POD 콘텐츠는 항상 같이 배치되고 같이 스케쥴되며 공유 콘텍스트에서 실행된다.
  • 생성할때, Pod spec 여러 조건들을 추가함으로써 원하는 노드에 할당할  있으며, 쿠버네티스에서는 쿠버 스케쥴러라는 이름의 컴포넌트가 pod 할당될 노드를 결정한다.

 

kubernetes

  • 클러스터에서 자동으로 여러 컨테이너를 관리하고 생성하도록 설계된 컨테이너 operation 플랫폼
  • POD 기본구성요소, 사용자는 yaml 쓰여진 구성파일을 기반으로 POD 생성과 관리를 요청가능
  • 여러 POD 퍼포먼스를 독립시키기 위해서 자원관리 기법을 제공.
  •  자원관리 기법을 통해 POD구성파일 (YAML)  CPU, memory, network bandwidth  같은 컴퓨팅 자원들의 양을 지정가능
  • 자원제어를 위해 리눅스 cgroup tc 사용'

 

POD 스케쥴링 : POD 컴퓨팅 지원정보를 기반, 배치될 실제서버인 노드를 결정. 이런 과정을 의미함

e.g) 사용자가 pod 지정할 하나의 cpu core주시오 -> 스케쥴러  pod cgroups API 이요해서 Cpu  core 지정해준다.

e.g2) 사용자가 pod 요청한 네트워크 대역폭을 요청 -> 스케줄러가 tc 사용해서 pod 네트워크 대역폭값을 예약

  • kubernets 에서 스케쥴러 역할을 담당하는 컴포넌트인 kube-scheduler에서 수행된다.
  • kube-scheduler 스케쥴링 방식은 사용자의 설정에 따라 달라질  있다.(방식에 따라 pod 성능과 전체적인 자원활용율에 영향) --->효율적인 컴퓨팅 자원활용을 위해서는 스케쥴링에 대한 이해가 필요함

그림 1 : kubernetes 1.18(버전) 에서 pod 생성을 위한 call chain 보여준다.

  • 사용자가 kubectl create 사용해서 description file 함께 pod생성을 요청할때, kubectl pod description file 정의된 pod specification API server 전송한다

****description file : user-defined string으로 파일이나 폴더에 적용가능하다. 윈도우에는 없는개념이라 생소하다. ASCII text file 파일에대한 description 가지고있다. description file 한개이상의 element 구성되어있다. elements 들은 여러가지 키워드로 구성되어있다.

  •  API server 전송된 pod specification node 비어있을때, kube-scheduler pod 할당하기 위한 node 스케쥴링한다. 그다음, node에서 실행되는 kubelet pod 속하는 하나이상의 컨테이너를 생성한다.

 

----------------------------------------------------------------------------------------------------------------------------------

 

 

<간단 정리 > : kubernetes는 클러스터에서 여러 컨테이너를 관리하고 생성하도록 설계된 컨테이너 operation플랫폼입니다. 그안에서 pod가 기본구성요소이며, yaml로 쓰여진 description 파일을 기반으로 pod의 생성과 관리를 요청할수있습니다. 이 파일안에 컴퓨팅자원들의 양을 지정해주어 자원관리를 수행합니다. Pod의 컴퓨팅자원 관리정보를 기반으로 pod가 배치될 node를 결정하는데 이러한 스케쥴링 방식에 따라 효율적인 컴퓨팅 자원활용이 결정됩니다.

스케쥴링 과정은 먼저 사용자가 kubetctl create를 명령하고나서 pod생성이 실행됩니다. kubecxtl에서 API server로부터 구조적정보+메타데이터 스키마를 전달받아 pod descripton file을 파싱하여 pod정보를 담은 podSpec을 생성하고 pod생성요청을 보냅니다. Kube-scheduler엣는 빈노드가 있는지 확인하는 역할을 합니다. 필터링과 스코어링을 통해 노트를 선택하는 과정을 거칩니다. Kubelet  podspec의 변화가 발생했을 겨웅 podSpec을 전달받아서 pod에 대한 컴퓨팅자원을 예약합니다. 그리고 node에서 컨테이너를 실행합니다 

반응형

댓글()