lartist 2022. 12. 20. 17:27

클러스터 구조

 

- master node

  - etcd: key-value 구조의 클러스터 데이터 저장소

모든 클러스터의 상태가 저장됨. apiserver만이 수정 가능

 

  - kube-apiserver: 전체 통제

프론트엔드. kubelet에 명령 전달, etcd 수정

 

  - kube-scheduler: worker node에 pod 스케쥴링

apiserver 모니터링. 스케쥴링이 필요한 경우 pod를 node에 스케쥴링 후 apiserver에 수행 요청

 

  - kube-controller-manager: node 등의 여러 자원에 대해 상태 모니터링, 제어하는 controller 모음

apiserver를 통해 상태 모니터링, 지정된 상태와 다른 경우 처치 (새로 배포 등)

 

    - replication controller: 고가용성을 위해 1개 이상의 pod을 실행 보장

 

/etc/kubernetes/manifest/ 에 옵션 파일 존재

/etc/systemd/system/ 에 서비스 존재

 

- worker node

  - kubelet: worker node 내부 통제

실제 pod 생성. 동작 완료 후 apiserver에 전달

 

  - kube-proxy: 서비스간 통신

service 모니터링, node가 service를 인식하고 요청을 보내거나 받을 수 있도록 함 (daemonset 형태)

 

- pod: 최소 application 단위 (1개 이상의 container로 구성)

같은 pod 내부의 container는 강한 bond를 가짐

 

- replicaset: replication controller와 유사하나 이미 만들어진 pod까지 함께 관리할 수 있음 (selector 사용)

 

- deployment: replicaset의 wrapper

 

- service: 자동으로 가능한(label) pod으로 리다이렉트. 기본적으로 내부망끼리 접속만 허용하며 외부망에서 사용하려면 proxy, port forwarding 사용해야 함

  - ClusterIP: node 내부의 pod를 단위(프론트/백 등)로 묶어 어느 node든 접속 가능하도록 리다이렉트

 

  - NodePort: 모든 node에 대해 접속 가능한 고정 port 지정

targetPort: 앱이 호스팅하는 포트. 지정하지 않으면 port와 같음

port: service의 포트 (필수값)

nodePort: node가 외부로 열어둔 포트. 30000 - 32767. 지정하지 않으면 랜덤값

 

  - LoadBalancer: 지원하는 경우 하나의 인터페이스(ex. URL)를 제공하여 내부적으로 리다이렉트해줌

 

- namespace: 자원 등 격리, 차등 할당

외부 namespace에 접근하려면 어떤 namespace인지 명시해야 함