쿠버네티스란?
: (k8s, kube, …) 컨테이너된 애플리케이션을 자동으로 배포, 스케일링, 관리
- 컨테이너를 쉽게 관리하기 위해 논리적으로 그룹화(노드 or 파드 or service 등으로 추상화)
아키텍처
쿠버의 특징: Desired state
: Observe 상태 체크 -> Diff 발견 -> Act 조치 매커니즘
- 사실상 쿠버네티스의 근간을 이루는 시스템이다.
- 장점: 관리가 용이하다.
- 단점: 실시간 적용이 어렵다(느리다). -> 파드 띄우면 완전히 뜨는데 시간이 꽤 걸린다.
마스터
: 체크하고, 실행하는 역할
- 스케줄러: 어떤 노드에 배포할지 스케줄링
- 노드에 라벨을 부여
- 컨트롤러: 끊임없이 상태 체크하기 위한 컨트롤러
- 파드 or 네트워크 or 노드 등 무엇이든 체크한다.
- 실제로는 단일 프로세스로, 하나만을 체크하고 대신 각각 여러개를 띄운다.
- API server
- 가운데에서 상태를 바꾸거나 조회. 따라서 모든 스케줄러, 컨트롤러, etcd는 API server를 통해야한다.
- 요청 많다 -> scale out 가능
- etcd
- 모든 상태 저장, 데이터를 저장.
- 분산 시스템으로 구성해 HA
- 데이터가 중요하기 때문에 보통 백업한다.
노드
: 위의 마스터와 마찬가지로 모든 노드는 API server를 바라본다. 여러 노드가 존재할 수 있다.
- proxy
- 요청을 직접 보내지는 않는다.
- 커널레벨의
iptables
같은 것으로 주고받도록 하고, Proxy는 그 설정만을 들고있도록 한다.
- kubelet (POD와 1:1 map)
- 컨테이너를 사용하도록 컨테이너를 직접쓰는게 아니라 Pod으로 감싼다.
- 각 node마다 떠있어야 한다
pod(파드)
- 가장 작은 컨테이너 배포 단위
- 하나 이상의 컨테이너 존재: 메인 하나이거나 메인 컨테이너 + 사이드카 컨테이너로 구성
- e.g. 메인 + 로깅서버
- 내부에서는 IP, 볼륨을 공유 가능
- 언제든 업데이트 될 수도, 죽을 수도 있다.
- 컨테이너 오케스트레이션 특성상, 상태를 유지하려는 특성으로 자동으로 다시 뜬다.
- HPA: Horizontal Pod Autoscaler. Pod 스케일링
Node vs Pod?
: 노드는 사실상 Host. 물리 PC or 인스턴스라고 보면 된다.
- 하나의 노드에는 여러 Pod가 존재 할 수 있다.
Helm?
- package manager(e.g npm)
- Chart - 헬름 패키지
- Repository - 패키지 저장소. 차트 공유
- Release - 인스턴스
- template - 변수 input
Reference)
Youtube 44BITS [초보를 위한 쿠버네티스 안내서] - https://youtu.be/SNA1sSNlmy0