단위
- 클러스터 : 최종 배포 단위
- 노드 : 서버 1개 , 물리적 구분
- 네임스페이스 : 논리적 구분 (예를들어 namespace :default가 여러 노드에 분산 가능)
- 파드 : 컨테이너의 집합- 가장 작은 배포 단위
- 컨테이너:도커 실행 단위

1 클러스터 - many 마스터 노드
마스터 노드 구성
- kube api-server : 매니징 관련 api 나 kubectl 명령어 여기 통함
- 노올랍게도 kubectl은 restapi client (curl로 작동)
- ETCD : 분산형 키밸류DB | configMap, secrets 모두 여기저장됨
- controller-manager: 노드 상태 감시, 파드 갯수 유지 등
- scheduler: 새 파드 생성시 어디 노드에 배치할지 정함
예시1) kubectl get nodes 명령어 입력
- kube api-server가 응답을 받고 ETCD에서 노드 정보를 가져와서 터미널에 뿌려줌
- authenticate user
- validate request
- retrieve data
예시2) 파드 생성
curl -x POST /api/v1/namespaces/default/pod ...
- api server
- authenticate user
- validate request
- 이 단계에서 노드를 배정받지 않은 신규 pod 생성
- ETCD
- 클라이언트
- Schdeuler
- api server 모니터중 신규 pod 발견
- 워커 노드에 pod 배정
- api server 콜
- api server
- ETCD 서버에 배정받은 워크 노드 정보 업데이트
- 워커노드 kubelet에 pod 정보 전송
- 워커 노드 kubelet
예시3) HA(고가용성) 환경에서 ETCD
마스터 노드마다 있는 etcd 3개가 서로 통신하며 분산 DB 이룸.
Raft 합의 알고리즘(과반수)로 리더 선출하기 때문에 3개 이상의 마스터 노드가 필수
[Master Node 1]
├─ kube-apiserver
├─ controller-manager
├─ scheduler
└─ etcd (etcd-0)
[Master Node 2]
├─ kube-apiserver
├─ controller-manager
├─ scheduler
└─ etcd (etcd-1)
[Master Node 3]
├─ kube-apiserver
├─ controller-manager
├─ scheduler
└─ etcd (etcd-2)
파일 위치
메니페스트 폴더: 모니터링되면서 이대로 계속 실행되는 폴더
/etc/kubernetes/manifest/kube-apiserver.yml
non kubeadmin 환경
/etc/systemd/system/kube-apiserver.service