쿠버네티스(Kubernetes,K8s) 개요

dong5854·2022년 5월 10일
0

kubernetes

목록 보기
1/1

쿠버네티스란?

kubernetes.io 의 설명에 따르면 쿠버네티스는 "컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템"이다. 즉 쿠버네티스는 하나의 소프트웨어라기보다는 하나의 시스템이다.

만약 도커 컨테이너를 AWS EC2같은 서버에 직접 생성해 배포를 하게 되면 설정의 어려움이나 보안적 문제와 더불어 유지보수에 있어서 많은 불편함을 감수해야한다. 예를 들면 서버에 컨테이너를 생성해 배포한다면 컨테이너가 오류가 생겨 크래시가 날 경우 이를 모니터링하지 못해 제때 대응하지 못하는 경우가 생길 수 있다. 또한 컨테이너로 들어오는 요청량이 많을 경우 추가적인 컨테이너가 필요할 수 있고, 여러 컨테이너에서 요청을 처리할 때 적절한 트래픽의 분배가 필요할 수 있다.

쿠버네티스를 사용할 경우 컨테이너에 문제가 생길 경우 컨테이너를 자동으로 교체해주고, 트래픽에 따른 컨테이너 오토스케일링과 로드밸런스를 수행할 수 있다. 이런 문제들을의 해결을 위해서 반드시 쿠버네티스를 사용해야 하는것은 아니다. AWS의 ECS와 같은 서비스들도 해당 문제들을 해결할 수 있지만 이런 특정 클라우드 프로바이더의 서비스를 사용하면 해당 클라우드 서비스에서 벗어날 수 없게 된다는 점이다. 각각의 클라우드 프로바이더의 설정방법을 따라야 하기 때문에 다른 클라우드 서비스로 옮긴다면 해당 서비스에 맞추어 모든 설정을 다시 해주는 과정이 필요하다.

쿠버네티스는 위에서 말한 문제점들을 클라우드 서비스로부터 독립적으로 해결이 가능하다는 장점이 있다. 클라우드 서비스의 설정법에 종속적이지 않고 쿠버네티스의 설정법에 맞춰 설정 파일을 작성한다면 쿠버네티스를 사용 할 수 있는 어떤 클라우드 프로바이더에서든 쿠버네티스를 사용할 수 있다.

개인적으로 쿠버네티스를 가장 이해하기 좋은 비유는 "복수의 서버를 위한 Docker-compose"라고 생각한다.

쿠버네티스의 구성


(출처: https://kubernetes.io/ko/docs/concepts/overview/components/)

쿠버네티스의 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커머신의 집합이다. 노드는 쉽게 생각하면 하나의 머신이나 가상 인스턴스라고 생각하면 된다. 노드는 워커노드와 마스터 노드가 있는데, 마스터 노드는 워커노드와 클러스터 내 파드를 관리하는 컨트롤 플레인을 포함하고 있고, 워커노드는 어플리케이션의 구성요소인 파드를 호스트한다. 파드는 하나 이상의 컨테이너로 구성된 컨테이너 그룹이다.

클러스터: 컨테이너화된 어플리케이션을 실행하고 있는 노드(워커노드) 혹은 다른 노드들을 컨트롤하는 노드(마스터노드)들의 집합

노드: 물리적 머신 혹은 가상머신으로 하나 이상의 파드를 호스트하고 클러스터와 통신하거나 클러스터 내에서 통신을 하는 역할을 한다. 컨트롤 플레인을 통해 노드들을 관리하는 노드를 마스터 노드라고 하고 파드를 호스트해 어플리케이션 컨테이너를 실행하는 노드를 워커 노드라고 한다.

워커 노드

worker node: 마스터 노드로 관리되는 하나의 머신 또는 가상 머신
pod: 하나 이상의 컨테이너와 볼륨과 같은 리소스들을 포함하는 구성요소, 파드는 쿠버네티스로 관리된다.
kubelet: 마스터노드와 워커 노드의 커뮤니케이션을 위한 에이전트
kube-proxy: 노드와 파드의 네티워크 커뮤니케이션을 관리한다.

마스터 노드

API Server: 워커노드의 큐블릿과 대칭점에 있는 컴포넌트이다.
Scheduler: 노드가 배정되지 않은 새로운 파드를 감지하고 이를 실행하는 워커노드를 선택해 실행하는 컴포넌트이다. API Server에 워커노드로 어떤 지시를 할지를 지시해준다.
Kube-Controller-Manager: 워커노드를 감시하고 조작한다. 노드가 다운되었을 때의 대응, 알맞은 파드 수를 유지하는 등의 역할이 있다.
Cloud-Controller-manager: Kube-Controller-Manager와 유사하나 클라우드 프로바이더의 API와 연결하고 해당 클라우드 플랫폼과 상호작용하는 컴포넌트이다.

profile
https://github.com/dong5854?tab=repositories

0개의 댓글