master: 마스터
node: 노드(구 minion 미니언)
k8s: 쿠버네티스, 케이에잇츠, 케이팔에스
etcd: 엣지디, 엣시디, 이티시디
pod: 팟, 파드, 포드
istio: 이스티오
helm: 헬름, 핾, 햄
knative: 케이 네이티브
출처: https://www.youtube.com/watch?v=DU2RDN7ZXo8&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=4
컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리를 해준다.
컨테이너를 쉽게 관리하고 연결하기 위해 논리적인 단위로 그룹화한다.
Google에서 15년간 경험을 토대로 최상의 아이디어와 방법들을 결합하여 구현했다. (borg -> k8s)
출처: https://www.youtube.com/watch?v=DU2RDN7ZXo8&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=4
클라우드 환경을 최대한 활용하여 애플리케이션을 설계하고 운영하는 접근 방식을 의미한다.
클라우드의 확장성, 탄력성, 유연성을 최대한 활용할 수 있도록 설계된 애플리케이션 및 서비스 개발 방법론이다.
컨테이너, 서비스메시, 마이크로서비스 등을 이용할 시 클라우드 환경에서의 배포가 용이하고, 이를 '클라우드 네이티브하다'라고 한다.
클라우드에 적합한 기술들이 쿠버네티스에서 구현이 쉽기 때문에 클라우드 네이티브하다고 할 수 있다.
출처: https://www.youtube.com/watchv=DU2RDN7ZXo8&list=PLIUCBpK1dpsNf1m-2kiosmfn2nXfljQgb&index=4
데이터 플레인이라 불리는 서버를 여러 대 실행시켜 그 위에 가상 오케스트레이션 계층을 구축하여 이 위에서 컨테이너가 동작한다.
- 데이터 플레인
서비스 사이의 네트워크 트래픽을 관리하는 서비스 메시(애플리케이션의 다양한 부분들이 통신하는 것을 제어하는 방법) 애플리케이션을 의미한다.
- 서비스 메시
- 마이크로서비스 아키텍처에서 서비스 간 통신을 관리하는 인프라 계층이다.
- 주요 목적은 복잡한 네트워크 트래픽 관리를 단순화하고, 서비스 간의 통신을 보다 안정적이고 안전하게 만드는 것이다.
- 주로 마이크로서비스 간의 트래픽을 제어하고 모니터링하는데 사용된다.
컨테이너 그룹을 하나의 큰 머신 리소스로 관리할 수 있어 인프라를 추상화 할 수 있다.
Control plane을 통해 컨테이너 배포, 장애 복구(장애가 발생한 컨테이너를 정지·재시작) 기능도 구현할 수 있다.
Control Plane의 컴포넌트들이 상호작용하여 노드를 제어한다.
노드(Node)는 파드가 실행되는 서버를 의미한다. 해당 서버는 실제로 애플리케이션을 실행하는 물리적 또는 가상 머신이다.
파드(Pod)는 컨테이너 그룹을 의미한다. 파드는 하나 이상의 컨테이너를 포함하며, 이 컨테이너들은 함께 실행되면서 같은 네트워크와 스토리지를 공유한다.
Control Plane 구성 요소
API Server
Control Plane의 프론트엔드 역할을 수행하는 것으로 사용자가 전달하는 API를 받아 Kubernetes 내부 컴포넌트와 상호 작용을 수행한다.
Scheduler
노드에 배정되지 않은 Pod를 감지하고 어떤 노드에 실행할지 선택하는 역할을 담당하는 컴포넌트이다.
Controller Manger
API Server와 상호작용해 클러스터 내에 컴포넌트의 상태를 감지하고 원하는 상태로 전환하는 역할을 담당하는 컴포넌트이다.
etcd
클러스터 내의 모든 정보들을 저장하고 있는 Key-Value 형태의 저장소이다.
Data Plane에도 컴포넌트가 구성되어 Control Plane과 연계하고 네트워킹 연결과 컨테이너를 관리할 수 있다.
Data Plane 구성 요소
kublet
각 노드에서 실행되는 에이전트 개념의 컴포넌트이다. Control Plane과 통신하거나 컨테이너 생성 및 삭제와 상태 모니터링을 수행한다.
kube-proxy
각 노드에서 실행되는 노드의 네트워킹을 담당하는 컴포넌트이다. kube-proxy를 통해 다른 노드 간의 통신이나 외부 구간의 통신을 할 수 있게 된다.
Container Runtime
컨테이너가 실행될 수 있는 환경을 구성하는 컴포넌트이다.
출처: https://tsuyoshiushio.medium.com/kubernetes-in-three-diagrams-6aba8432541c
Pod (파드)
쿠버네티스의 최소 단위
파드 하나 안에 하나 이상의 컨테이너 실행 가능
어떤 컨테이너 이미지를 사용할지 등을 설정
ReplicaSet (레플리카셋)
파드를 얼마나 동작시킬지 관리하는 오브젝트
파드 수 설정 시 해당 수 만큼의 파드 동작 보장
Deployment (디플로이먼트)
배포 이력 관리 역할.
새로운 버전을 릴리스하거나 부하 증가에 따른 레플리카셋 수를 변경하는 등의 작업을 디플로이먼트로 관리.
적용 이력도 관리하므로 문제 발생 시 이전 버전으로 쉽게 롤백 가능
서비스 (Service)
배포한 파드를 쿠버네티스 클러스터 외부에 공개하기 위한 구조 제공
공개 방법은 다양하지만, 가장 대표적인 방법은 클러스터 내의 파드 여러개를 동작시키고 그 앞단에 로드밸런서를 배치하여 특정 파드를 클러스터 외부로 공개하는 방식이 있다.