Kubernetes Master - Worker
- 쿠버네티스란
- 컨테이너 오케스트레이션으로 컨테이너화된 애플리케이션의 배포, 관리, 확장을 자동화해주는 플랫폼이다.
- 마스터
- kube-apiserver → 모든 요청을 처리하는 마스터 핵심 모듈
- etcd → key-value 분산 데이터 저장소
- kube-scheduler → pod를 어떤 노드에 할당할 것인가?
- kube-controller-manager → pod가 잘 생성되어 있는가? 생성 요청이 들어오나? 죽어있는 pod는 없나?
- 워커
- kubelet → 워커(자신)에 할당된 pod 생명주기 관리
- kube-proxy → pod로 연결되는 네트워크 관리
- pod 생성 과정
- kube-apiserver가 pod 생성 요청 (! 밑의 모듈들은 모두 kube-apiserver와만 통신한다)
- kube-contoller는 pod 라이프사이클 감시 시작
- kube-scheduler가 pod 할당 노드 선택
- 워커의 kubelet은 pod가 잘 할당됐는지 확인, 이후 kube-apiserver에 지속적으로 pod 상태 전달
마스터 - 노드 구조
- 쿠버네티스는 전체 클러스터를 관리하는 마스터와 컨테이너가 배포되는 노드로 구성되어 있다.
- 모든 명령은 마스터의 API 서버를 호출하고 노드는 마스터와 통신하면서 필요한 작업을 수행한다.
- Master
- 마스터 서버는 모듈 확장성을 고려하여 기능별로 쪼개져 있다.
- Worker
- 워커서버는 마스터 서버와 통신하면서 필요한 Pod를 생성하고 네트워크와 볼륨을 설정한다.
- Kubectl
- API 서버는 json 또는 protobuf 형식을 이용한 http 통신을 지원한다.
- 통신 명령을 위해 kubectl 이라는 명령행 도구를 사용한다.
마스터 구성요소

- API 서버(kube-apiserver)
- 모든 요청을 처리하는 마스터의 핵심 모듈
- 원하는 상태를 key-value 저장소(etcd)에 저장하고 저장된 상태를 조회하는 일을 한다.
- API 관리, 요청 처리, 내부 제어 루프 처리
- etcd(분산 데이터 저장소)
- 클러스터 안의 각 구성요소들에 대한 정보가 키-값 형태로 저장된 데이터베이스
- RAFT 알고리즘(여러 서버들 중 일부에 장애가 발생하더라도 제 기능을 유지하도록 하는 합의 알고리즘)을 사용
- 여러 개로 분산하여 복제할 수 있기 때문에 안정성이 높고 속도도 빠르다.
- 스케줄러(kube-scheduler)
- 할당되지 않은 Pod를 여러 가지 조건에 따라 적절한 노드 서버로 할당해주는 모듈
→ 파드를 어느 노드에 배치할 지 결정하는 프로세스이다.
- 큐브 컨트롤러(kube-controller-manager)
- 쿠버네티스에 있는 거의 모든 오브젝트의 상태를 관리하는, 다양한 역할을 하는 모듈
- 클라우드 컨트롤러(cloud-controller-manager)
- AWS, GCE, Azure 등 클라우드에 특화된 모듈, 노드 추가/삭제 및 로드 밸런서 연결 등을 할 수 있음, 확장성이 좋음
워커(worker) 구성요소

- 큐블릿(kubelet)
- 노드에 할당된 Pod의 생명주기를 관리한다.
- Pod를 생성하고 Pod 안의 컨테이너에 이상이 없는지 확인하면서 주기적으로 마스터에 상태를 전달한다.
- 프록시(kube-proxy)
- Pod으로 연결되는 네트워크를 관리한다.
- Service에서 들어온 내/외부 트래픽을 어느 파드로 포워딩할 것인지에 대한 관리
- 이를 위해 kubeadm은 모든 노드에 하나씩의 kube-proxy를 daemonset으로 배포한다.
Pod이 생성되는 과정

- 각 모듈은 서로 통신하지 않고 오직 API Server 이랑만 통신한다.
- API Server를 통해 etcd에 저장된 상태를 체크하고, 현재 상태와 원하는 상태가 다르면 필요한 작업을 수행한다.
kubectl
- ReplicaSet 명세를 yml파일로 정의하고 kubectl 도구를 이용하여 API Server에 명령을 전달
- API Server는 새로운 ReplicaSet Object를 etcd에 저장
Kube Controller
- Kube Controller에 포함된 ReplicaSet Controller가 ReplicaSet을 감시하다가 ReplicaSet에 정의된 Label Selector 조건을 만족하는 Pod이 존재하는지 체크
- 해당하는 Label의 Pod이 없으면 ReplicaSet의 Pod 템플릿을 보고 새로운 Pod(no assign)을 생성. 생성은 역시 API Server에 전달하고 API Server는 etcd에 저장
Scheduler
- Scheduler는 할당되지 않은(no assign) Pod이 있는지 체크
- 할당되지 않은 Pod이 있으면 조건에 맞는 Node를 찾아 해당 Pod을 할당
Kubelet
- pod에서 container가 확실하게 동작하도록 관리
- Kubelet은 자신의 Node에 할당되었지만 아직 생성되지 않은 Pod이 있는지 체크
- 생성되지 않은 Pod이 있으면 명세를 보고 Pod을 생성
- Pod의 상태를 주기적으로 API Server에 전달
Share article