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에서 컨테이너를 실행합니다