쿠버네티스(Kubernetes) 란?

2020년 11월 19일 · 조창후

쿠버네티스(Kubernetes) 란?

쿠버네티스는 구글이 14년도부터 오픈소스화한 컨테이너(Container) 관리(Management) 플랫폼이다.

쿠버네티스 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다.  
Kubernetes의 별칭은 K8S, k&s 라고도 불린다.  

그렇다면 그냥 서버에 어플리케이션을 배포해서 써도 되는 데 왜 쿠버네티스를 써야 할까?

우리가 알고 있는 클래식한 서버란 하나의 베어메탈 그러니깐 엄청 좋은 컴퓨터에 리눅스 OS를 설치하고, 여러 어플리케이션들을 실행했었다. 하지만 한 컴퓨터안에 여러 어플리케이션들을 올리다 보면 리소스 관리가 어려워지고 다른 어플리케이션에 영향을 끼치기 까지 할 수 있으며, 현재 구성해놓은 서버와 다른 환경이 필요하면, 새로운 서버의 구매가 필요하게 되고, 자연스럽게 돈과 시간이 더 들어가게 된다.

이러한 상황의 해결책으로 가상화가 등장하게 된다. 가상화란 하이퍼바이저(Hypervisor)를 이용하여 기존 단일 서버의 운영체제 위에 여러 가상머신으로 쪼개어 환경을 격리 시킨 것이다. 이런 가상화의 등장으로 하나의 물리 서버를 여러 가상머신으로 나누어 어플리케이션을 격리시키고 원하는 만큼 리소스를 할당했으며 환경도 다르게 구성할수있게 되었다.

가상화는 어플리케이션의 격리를 통해 리소스 활용도는 더욱 올라갔지만, 조금 무겁게 느껴지는 부분이 있는 데 바로 하이퍼바이저의 가상화 방식이다. 하이퍼바이저는 가상머신을 만들 때 운영체제를 포함한 모든 구성 요소 쉽게 말하면 컴퓨터 안에 컴퓨터를 만들게 되어 그만큼 무거워진다.

그렇다면 컨테이너란 무엇이냐. 가상화와는 다르게 컨테이너는 별도의 운영체제를 따로 구성하는게 아니라, 현재 서버의 운영체제를 공유하면서, 어플리케이션에게 격리된 공간을 제공해준다. 다시 말하면 컨테이너는 가상화보다 가벼우면서도 동일한 서비스 환경을 구성할 수 있는 것이다.

컨테이너는 가상화가 아니라는 점을 기억하자. 
일반적으로 우리가 알고 있는 가상머신은 가상화되어 구성된 GUEST 운영체제와 HOST OS 사이에서 리소스를 중계해줄 하이퍼바이저가 필요하다.  
컨테이너는 하이퍼바이저가 아니라 cgroup(리소스를 제한), namespace(공간을 격리) 기능을 이용해서 하나의 공간을 격리시킨다.

architecture

이러한 컨테이너만의 장점을 극대화 하여 컨테이너 어플리케이션을 관리 하기 위해 등장 하게 된 것이 쿠버네티스다.

쿠버네티스 구성도

kubernetes-arch
쿠버네티스는 크게 두가지로 나누어 구성을 한다.

  • Control Plane
    1. controller manager - 쿠버네티스 컨트롤 담당 컴포넌트
    2. api server - 쿠버네티스를 컨트롤 할 수 있는 api 서버
    3. scheduler - 컨테이너를 어떤 노드에 스케줄링을 할지 결정
    4. etcd - key/value 저장소로 모든 클러스터 데이터를 저장
  • Worker Node
    1. kubelet - 각 노드마다 실행되는 에이전트로, Pod의 동작을 관리한다.
    2. pod - pod는 컨테이너의 묶음이며, 쿠버네티스에서 가장 작은 컴퓨팅 단위이다.
    3. kube-proxy - 노드의 네트워크를 담당한다.

쿠버네티스의 오브젝트

쿠버네티스는 오브젝트를 통해서 클러스터 즉 쿠버네티스의 상태를 나타낸다. 이 오브젝트는 특정한 상태를 명시하고, 쿠버네티스 클러스터는 이 명시된 상태를 유지하기 위해 지속적으로 동작하게 된다.

  • 예시를 들면 어떤 데이터베이스 하나를 쿠버네티스에 올려놓기로 결정했다. 그걸 결정된 순간부터 쿠버네티스는 그 데이터베이스를 삭제하더라도 명시된 오브젝트를 삭제하기 전까지 반복해서 하나의 데이터베이스를 유지하기 위해 생성하게 된다.

  • 오브젝트에 대해 더 알고 싶다면 쿠버네티스 오브젝트 이해하기 - 참조

쿠버네티스를 EKS로 쉽게 사용하기

eks
아마존 EKS는 쿠버네티스의 Control Plane의 별도 구성없이, 아마존에서 미리 구성한 Control Plane과, 워커 노드만을 구성하여 사용 할 수 있게 만든 서비스이다.

그 결과 Control Plane 구성에 대한 시간을 줄이고, AWS내에서 이용가능한 서비스를 같이 사용할 수 있다는 장점이 있다.

이상으로 매우 매우 간단하게 쿠버네티스에 대해서 소개해보았다.

참조 및 출처 사이트


다음 작성자는 저희 소프트웨어 백엔드 개발자이신 김영한 연구원 입니다.