2: Core Concepts
클러스터 구조
- 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인지 명시해야 함