k8s pod 생성 원리

망개·2023년 8월 28일
0

잘못된 지식 전파를 막기 위해
글의 내용에 오류가 있거나, 수정이 필요한 부분은 댓글 부탁드립니다.

- 내용

  • k8s pod 생성 원리를 다룬다.
  • ReplicaSet에 의한 pod 생성이 아닌, 개발자가 직접 create로 요청한 pod에 대한 생성 원리를 다룬다.

- 읽기 전에

1) k8s 클러스터 아키텍쳐

k8s 클러스터 아키텍쳐에서 언급한 컴포넌트들은
pod의 생성 원리를 이해하기 위해 반드시 이해하는게 좋다.

2) pod 생성 원리 image

이미지 출처 Link

- k8s pod 생성 원리

단계별로 보기

  • User -> kube-apiserver
    kubectl create pod 커맨드로 pod 생성 요청.
  • kube-apiserver -> etcd
    • etcd에 pod의 명세(spec) 기록.
    • etcd가 응답.
  • kube-apiserver -> kube-controller-manager
    • pod 생성 요청.
    • kube-controller-manager에서 생성한 pod는 node가 할당되지 않은 pod.
    • kube-controller-manager가 응답.
  • kube-apiserver -> etcd
    • 생성된 pod에 대한 명세를 etcd에 기록.
  • kube-scheduler
    • node가 할당되지 않은 pod가 생성되었음을 인지.
    • node의 리소스 사용량을 토대로 설정된 기준으로 pod를 배치할 worker node 선택.
  • kube-scheduler -> kube-apiserver
    • 생성된 pod를 배치할 node 정보 전달.
  • kube-apiserver -> etcd
    • kube-scheduler에 의해 배치된 node 정보를 etcd의 pod의 명세에 기록.
  • kube-apiserver -> kubelet
    • pod 할당 감시 요청.
  • kubelet -> container runtime
    • 컨테이너 생성 요청.
  • kubelet -> kube-apiserver
    • 주기적으로 pod의 상태 전달.

해석

k8s의 클러스터 아키텍쳐들이 pod를 생성하기 위해,
클러스터 내부의 컴포넌트들이 상호작용을 한다는 것이다.

이때, 중요한 것은 두 가지이다.

1. 모든 요청은 kube-apiserver를 통해 이루어진다.

외부(user)에서의 요청도 kube-apiserver가 전달 받아서 다른 컴포넌트로 전달하거나,
클러스터 내부에서의 요청도 kube-apiserver가 전달 받아서 다른 컴포넌트로 전달한다.

개별 컴포넌트들은 개별적으로 통신하지 않고, kube-apiserver를 거쳐서 통신한다!

예를 들어, kube-controller-manager가 pod를 생성하였고,
생성된 pod와 관련된 정보를 etcd의 명세에 기록하여야 하더라도
kube-controller-manager -> etcd로 개별 통신을 하지 않고,
kube-controller-manager -> kube-apiserver -> etcd와 같은 과정을 거쳐
pod에 대한 명세를 기록한다.

2. 업데이트 되는 내용은 etcd 명세에 기록한다.

최신화되는 내용들이 etcd에 명세가 추가/수정되어 기록됨으로써
클러스터 내의 메타 정보를 최신화할 수 있다.

- 참고

profile
개발 관련 내용을 가끔 쓰고 싶어서 만든 블로그입니다.

0개의 댓글