(시리즈4) 쿠버네티스 코드 분석하기 : kubectl apply -f nginx.yaml 을 입력하면 일어나는 일(1) - 청사진

msyhu·2021년 7월 3일
1
post-thumbnail

목표

이번 여름방학에 연구원들과 함께 '쿠버네티스 코드 분석 스터디' 를 진행하기로 했다.

내 목표는 크게 두 가지로 잡았다.

  1. 컨트롤러 같은 모듈을 직접 만들 수 있는 기반을 다지자.
  2. 쿠버네티스 정도 되는 프로젝트의 코드는 코딩 스타일 측면에서 정석에 가까울 것이므로, 코드 분석을 통해 코드 구조를 배워보자.

첫 주제는 쿠버네티스 모듈을 세세하게 하나씩 분석하기 전 큰 숲을 보기 위해, 쿠버네티스를 설치하면 가장 먼저 실행해보는 kubectl apply -f nginx.yaml을 입력했을 때 내부적으로 어떤 일이 일어나는지 한 바퀴를 돌아 보는 것으로 잡았다.

청사진- kubectl apply의 내부 작동 절차

apply는 쿠버네티스 리소스를 정의하는 파일을 통해 애플리케이션을 관리한다.
kubectl apply를 실행하여 클러스터에 리소스를 생성하고 업데이트한다.

1.client에서 api-server로 kubectl apply 명령을 내린다.

2.yaml 파일에 선언된 정보를 etcd에 저장하고, etcd 에는 yaml 파일 내용대로 pod을 생성하라는 요청 상태로 저장되어 있다.

3.지속적으로 etcd의 상태를 확인하고 있던 controller는 새 yaml 파일의 존재를 확인하고, API-Server로 할당요청을 한다. API-Server는 etcd에 있던 Pod 생성요청 상태를 Pod 할당요청 상태로 바꾼다.

4.Scheduler는 etcd에서 Pod 할당요청 상태를 발견하고, 노드를 할당한다. 그러면 Api-Server는 etcd에 있던 Pod 할당요청 상태를 Pod 노드할당 / 미실행 상태로 바꾼다.

5.kubelet은 자신의 노드에서 실행되야 할 pod의 정보를 발견하고, 자신의 노드에 pod을 실행시킨다. 그 결과를 반환하여 API-Server는 최종적으로 etcd에 Pod 노드할당 / 실행중 상태를 저장한다.

이제 다음 글부터, 위 나열한 1부터 5까지의 단계를 차근차근 코드 레벨에서 알아보도록 하겠다.

profile
컨테이너, k8s, 마이크로서비스 등 클라우드 네이티브 환경에 관심이 많습니다.

0개의 댓글