1. kubectl을 통해 API 서버에 파드 생성 요청
2. 업데이트가 있을 때마다 내용을 API 서버를 통해 etcd에 기록함
3. API 서버에 파드 생성이 요청된 것을 컨트롤러 매니저가 인지하면 컨트롤러 매니저가 파드를 생성하고 상태를 API 서버에 전달, 어떤 워커 노드에 파드를 적용할지는 결정되지 않은 채로 파드만 생성
4. API 서버에 파드가 생성됐다는 정보를 스케줄러가 인지, 스케줄러는 생성된 파드를 어떤 워커 노드에 적용할지 조건을 고려해 결정, 해당 워커 노드에 파드를 띄우도록 요청
5. API 서버에 전달된 정보대로 지정한 워커 노드에 파드가 속해 있는지 스케줄러가 kubelet으로 확인
6. kubelet에서 컨테이너 런타임으로 파드 생성 요청
7. 파드 생성
8. 파드가 사용 가능한 상태가 됨
쿠버네티스는 작업을 순서대로 진행하는 워크플로우 구조
가 아니라 선언적(declarative)인 시스템
구조를 가진다.
각 요소가 원하는 상태(desired status)
를 API 서버에 선언하면 다른 요소들이 API 서버에 와서 현재 상태(current status)와 비교하고 원하는 상태로 변경시킨다.
API는 현재 상태 값을 갖고 있고, 이것을 보존해야 하기 때문에 etcd가 필요하다.
워커 노드
는 워크플로우 구조
로 동작하며 명령이 절차적으로 전달되기 때문에 시스템의 성능을 높이는 데 효율적이다.
마스터 노드
는 이미 생성된 파드들을 유기적으로 연결하므로 쿠버네티스 클러스터를 안정적으로 유지하기 위해 선언적인 시스템
을 사용한다.
여기서 나타나는 쿠버네티스의 가장 큰 장점
쿠버네티스의 구성 요소마다 하는 일이 명확하게 구분돼 각자의 역할만 충실하게 수행하면 클러스터 시스템이 안정적으로 운영된다.
각자의 역할이 명확하게 나뉘어져 있어 MSA(마이크로서비스 아키텍쳐)구조와도 연관된다. 또한 문제가 발생했을 때 어느 부분에서 문제가 발생했는지 찾아내기 쉽다.