자동화된 컨테이너 배포, 스케일링, 관리를 제공하는 오픈소스 플랫폼
컨테이너 오케스트레이션 도구의 일종(오케스트라 지휘자처럼 컨테이너 생성/관리를 지휘)
yml 파일에 정의한 설정대로 컨테이너를 생성하거나 삭제하면서 바람직한 상태를 유지하는 기능이 있음
문제가 되는 컨테이너를 삭제하고 새로운 컨테이너를 만들거나 컨테이너가 삭제 되면 다시 설정대로 생성하는 등 정해진 상태를 유지해 낸다.
기본적으로 사람이 개입해서 컨테이너를 삭제하기 보다는 삭제 명령이 아니라 yml 파일(매니페스트)에서 바람직한 상태를 수정해야 한다.
※ 도커 컴포즈
옵션을 지정해 수동으로 컨테이너의 수를 바꿔야 함
클러스터(Cluster) : 컨테이너 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들로 이루어진 집합
| kube-apiserver | 사용자와 컨트롤 플레인과 통신하는 쿠버네티스 API |
|---|---|
| etcd | 모든 클러스터 데이터를 담아 정보 전반을 관리하는 키-값 타입의 데이터 베이스이다. |
| kube-scheduler | 파드를 워커 노드에 할당한다. |
| kube-controller-manager | 컨트롤러를 통합 관리하고 실행한다. |
| cloud-controller-manager | 클라우드 서비스와 연동해 서비스를 생성한다. |
| kube-let | 클러스터의 각 노드에서 실행되는 에이전트로 마스터 노드의 kube-scheduler와 연동해 파드를 배치하고 확실하게 실행 되도록 관리한다.(쿠버네티스를 통해 생성되지 않은 컨테이너는 관리하지 않는다.) |
|---|---|
| kube-proxy | 각 노드에서 실행되는 네트워크 프록시로 쿠버네티스의 서비스 개념의 구현부이다. 네트워크 통신의 라우팅을 담당한다.(트래픽이 실제로 전달되어야 하는 파드 내의 포트를 지정, 서비스가 받은 트래픽을 파드의 어떤 포트로 전달할지 결정) |


쿠버네티스에서 컨테이너를 관리하는 단위
컨테이너와 볼륨을 함께 묶은 것
기본적으로는 파드 하나가 컨테이너 하나이지만 컨테이너가 여러 개인 파드도 있을 수 있다.
디플로이먼트 : 파드와 레플리카셋에 대한 선언적 업데이트 제공. 파드와 레플리카셋에 대한 의도하는 상태를 설정하고 파드의 디플로이(배포)를 관리하는 요소임을 뜻함.
레플리카셋 : 레플리카의 수(또는 파드의 수)를 관리함. 레플리카셋이 관리하는 동일한 구성의 파드를 레플리카라고함.
디플로이먼트는 레플리카셋을 제어, 레플리카셋이 하위 파드들을 관리
레플리카셋만 단독으로 다루지 않고 주로 디플로이먼트로 레플리카셋에 대한 정의를 함께함.

각 서비스는 고정된 IP(Cluster IP)를 부여 받아 외부에서는 이 IP 주소로 접근하며 이 때 서비스가 적절한 파드들로 분배함. 즉 로드 밸런서의 역할을 함.
| 리소스 이름 | 내용 |
|---|---|
| 파드 | 컨테이너와 볼륨을 합한 것 |
| 서비스 | 파드에 요청을 배분 |
| 디플로이먼트 | 파드의 배포를 관리 |
| 레플리카세트 | 파드의 수를 관리 |
파드나 서비스에 대한 설정을 작성한 파일 yaml또는 json 형식 (보통 yaml)
매니페스트 파일은 파드, 서비스, 디플로이먼트, 레플리카셋과 같은 리소스 단위로 작성한다. 디플로이먼트를 작성하면 레플리카셋과 파드도 함께 설정되게 된다.
(파드나 레플리카셋만 따로 작성하는 것은 쿠버네티스의 기능(바람직한 상태(지정한 개수의 파드를 자동으로 유지))을 온전히 사용하기 힘들어 사용되거나 권장되지 않는다.)