
참고자료
https://www.youtube.com/watch?v=lheclzO-G7k&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=4
Red Hat 공식문서
쿠버네티스 클러스터 구성
- control plane(master node)
- 워커 노드들의 상태를 관리하고 제어
- single master
- multi master(3, 5개의 master nodes)
- worker node
- 도커 플랫폼을 통해 컨테이너를 동작하며 실제 서비스 제공
쿠버네티스 컨트롤 플레인 개념과 특징
컨트롤 플레인
- 클러스터의 신경 중추 : 클러스터를 제어하는 쿠버네티스 구성 요소와 클러스터의 상태 및 구성에 관한 데이터를 보관
- 핵심 기능 : 컨테이너가 필요한 자원을 갖고 충분한 횟수로 실행되도록 하는 중요한 작업을 맡음
- 컨트롤 플레인은 컴퓨팅 노드와 상시 연결되어, 클러스터가 일정한 방식으로 실행되도록 구성했다면 컨트롤 플레인은 해당 방식에 따라 실행됨
kube-apiserver
- 컨트롤 플레인의 프론트엔드 역할 : 내부 및 외부 요청을 처리
- 요청이 유효한지 판별하고 유효한 요청을 처리
- REST 호출이나 kubectl 커맨드라인 인터페이스 또는 kubeadm 과 같은 CLI를 통해 API에 액세스 가능
Kube-scheduler
- 스케줄러 역할 : 클러스터가 양호한 상태인지, 새 컨테이너가 필요하다면 어디가 적합한지 등을 판단
- CPU 또는 메모리와 같은 리소스 요구 사항을 고려하여 Pod를 적절한 컴퓨팅 노드에 예약
Kube-controller-manager
- 클러스터 통합 컨트롤러 :
kube-scheduler를 참고하여 정확한 수의 pod가 실행되게 함. pod에 문제가 생기면 또 다른 컨트롤러가 이를 감지하고 대응
- 서비스를 포드에 연결하므로 요청이 적절한 엔드포인트로 이동
- 계정 및 API 액세스 토큰 생성을 위한 컨트롤러가 있음
etcd
- 키-값 저장소 데이터베이스 : 설정 테이터와 클러스터의 상태에 관한 정보를 보관
쿠버네티스 클러스터를 직접 구성하는 도구
- kubeadm
- 쿠버네티스에서 공식 제공하는 클러스터 생성/관리 도구
- kubespray
- 쿠버네티스 클러스터를 배포하는 오픈소스
- 다양한 형식으로 쿠버네티스 클러스터 구성 가능
- 온프레미스에서 상용 서비스 클러스터 운영 시 유용
- 다양한 CNI 제공
CNI(Container Network Interface) 란?
- Container 간 통신을 지원하는 VxLAN. Pod Network라고도 부름
- 다양한 종류의 플러그인이 존재
쿠버네티스 노드 개념과 특징
노드
- 쿠버네티스 클러스터에는 최소 1개 이상의 컴퓨팅 노드가 필요하지만 일반적으로 여러 개가 있음
- pod는 노드에서 실행되도록 예약되고 오케스트레이션됨
- 클러스터의 용량을 확장할 시 노드를 더 추가
포드(pod)
- 포드는 쿠버네티스 오브젝트 모델에서 가장 작고 단순한 유닛, 애플리케이션의 단일 인스턴스를 나타냄
- 각 포드는 컨테이너 실행 방식을 제어하는 옵션과 함께 컨테이너 하나 또는 긴밀히 결합된 일련의 컨테이너로 구성
- 포드를 persistance storage 에 연결하여 stateful 애플리케이션을 실행할 수 있음
컨테이너 런타임 엔진
- 컨테이너 실행을 위해 각 컴퓨팅 노드에는 컨테이너 런타임 엔진이 있음
- 대표적인 예로
Docker 가 있음
kubelet
- 각 컴퓨팅 노드에 컨트롤 플레인과 통신하는 매우 작은 어플리케이션
- 컨테이너가 포드에서 실행되게 함
- 컨트롤 플레인에서 노드에 작업을 요청하는 경우 kubelet이 작업을 실행
kube-proxy
- 쿠버네티스 네트워킹 서비스를 용이하게 하기 위한 네트워크 프록시
- 운영 체제의 패킷 필터링 계층에 의존하거나 트래픽 자체를 전달하여 클러스터 내부 또는 외부의 네트워크 통신 처리