쿠버네티스는 Google이 설계한 오픈소스 컨테이너 오케스트레이션(Container Orchestration) 도구다. 컨테이너 오케스트레이션은 컨테이너의 대규모 운영, 배포, 관리, 확장, 네트워킹을 자동화하는 체계를 의미한다. 대표적인 컨테이너 오케스트레이션 툴은 쿠버네티스(Kubernetes)
, 도커 스웜(Docker Swarm)
, 아파치 메소스(Apache Mesos)
가 있다.
쿠버네티스 컴포넌트는 쿠버네티스의 구성요소를 의미한다. 쿠버네티스를 배포하면 클러스터(cluster)를 얻는다. 모든 클러스터는 최소 한 개의 노드를 가지고, 노드는 애플리케이션의 구성요소인 파드를 호스트한다.
쿠버네티스의 컴포넌트는 쿠버네티스의 기능제어를 담당하는 컨트롤 플레인(Control Plane) 컴포넌트와, 컨트롤 플레인 컴포넌트의 요청을 받아 각 노드에 동작시키는 노드(Node) 컴포넌트가 있다.
kube-apiserver
쿠버네티스 클러스터에 kubectl로 명령을 전달하면 api-server가 요청을 처리한다.
예) 파드의 실행, 종료 등에 대한 명령을 노드로 전달할 수 있다.
etcd(엣시디)
key-value 형태로 클러스터 및 리소스의 구성정보, 상태정보 및 명세정보를 분산 저장하는 저장소다.
kube-scheduler
파드(pod)를 어떤 노드로 배치할지 결정한다.
kube-controller-manager
다양한 컨트롤러 프로세스를 실행하고 클러스트의 상태를 관리한다.
kubelet(쿠블릿)
kube-apiserver 에서 받은 명령을 노드에서 실행하여 파드 생성, 중지 등의 관리를 담당한다.
container runtime
파드에 포함된 컨테이너를 실행한다.
kube-proxy
네트워크 연결을 관리하고 요청을 전달한다.
서비스를 중단하지 않고도 업데이트할 수 있다.
서로 다른 서비스들의 IP와 Port 정보에 대해서 저장하고 관리하는 것을 서비스 디스커버리라고 한다. 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있다.
컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱(트래픽에 따라 컨테이너 수를 자동 조절)하고 배포하여 배포가 안정적으로 이루어질 수 있다.
저장소 시스템을 자동으로 탑재한다.
배포된 컨테이너의 현재 상태를 원하는 상태로 변경할 수 있다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있다.
컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다. 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시한다. 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해준다.
쿠버네티스는 응답하지 않는 컨테이너를 자동으로 죽이고 재시작하며, 이 과정은 클라이언트에 보여주지 않는다.
쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리 할 수 있다. 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트 할 수 있다.
[참고 사이트]
도커와 쿠버네티스 간단 비교
kubernetes 공식문서
kubernetes | seongjin.me
쿠버네티스 알아보기 1편: 쿠버네티스와 컨테이너, 도커에 대한 기본 개념
쿠버네티스(kubernetes) (2) - 기본 용어 - 개념 - 컴포넌트 - 클러스터 구성
Kubernetes란? (클러스터,노드,파드(pod), 리플리카셋, 디플로이먼트)