kubernetes/1. kubernetes란?

쿠버네티스란?

견오수 2021. 8. 6. 11:27
728x90

1. 물리서버, 가상화, 컨테이너 기술의 진화

 

쿠버네티스를 배우기전에 서버 가상화 기술의 역사와 도커(Docker)를 간단하게 살펴보겠습니다.

 

물리서버, 가상화, 컨테이너 기술의 진화

 

● 물리서버 

 

초기에는 애플리케이션을 물리 서버에서 실행했었다. 한 물리 서버에서 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생했다. 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있고, 결과적으로는 다른 애플리케이션의 성능이 저하될 수 있었다.

 

하나의 서버에 여래 개의 애플리케이션이 동작하기 때문에 애플리케이션 배포 과정이나 모듈의 충돌로 인해 시스템 장애가 발생하는 경우가 많았다.  여러 개의 애플리케이션을 운영하면서도 충돌이나 간섭이 발생하지 않도록 독립적인 서버 환경을 구축하는 가상화 기술이 각광받게 되었다.

 

● 가상 머신(Virtual Machine)

물리버서에 발생하는 단점들을 해결하기 위해 가상화 기술이 도입되었다. 단일 물리서버의 CPU에서 여라 가상 시스템(VM)을 실행할 수 잇게 한다. 가상화를 사용하면 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스 할 수 없으므로 일정 수준의 보안성을 제공할 수 있다.  

 

가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공한다. 가상화를 통해 일련의 물리 리소스를 폐기 가능한(disposable) 가상 머신으로 구성된 클러스터로 만들 수 있다. 

 

● 컨테이너(Container)

 

물리서버나 가상머신이나 모두 그것을 제어하는 OS를 실행하고 있다. 가상 머신으로 여러 서버를 하나의 물리적 서버에 실행시키더라도 가상머신마다 OS를 실행해야한다.  OS는 범용 적으로 사용할 수 있도록 만들어져있는 반면, 많은 기능이 포함되어 그만큼 자원을 필요로 한다. 따라서 이 OS 부분도 공유 할 수 있다면 물리적 서버 한 대당 애플리케이션 집약도를 더 높일 수 있다. 

 

애플리케이션을 실행하기 위해 필요한 자원 (즉 응용 프로그램 자체와 라이브러리, 미들웨어 등)을 하나의 패키지로 묶어 OS 별로 분리하여 여러 애플리케이션을 실행하는 기술이 현재 주목 받고 있다. 이 기술을 컨테이너라고 한다. 

 

 

2. 도커란?

 

도커는 앞서 말한 컨테이너를 기반으로 하여 특정한 서비스를 패키징하고 배포하는데  유용한 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

 

위의 그림을 보면  알 수 있듯이 도커 플랫폼 위에 컨테이너 구동 중이라는 것을 알 수 있다. 컨테이너 안에 다양한 프로그램, 실행환경을 이미지로 만들고 컨테이너에 배포하여 사용하기 때문에 프로그램의 배포 및 관리를 단순하게 해준다.  

 

도커의 장점

  • 쉽고 빠른 실행 환경 구축 : 도커는 모든 플랫폼에서 실행 할 수 있으며, Dockerfile에 전체 운영 환경변수를 담아 전달이 가능하다.
  • 빠른 배포 : 컨테이너는 별도의 OS를 부팅하지 않고 애플리케이션을 실행하므로 컨테이너를 빠르게 만들 수 있다.
  • 코드 관리 : 도커는 환경 자체를 배포하기 때문에 개발 및 코딩을 편하게 만들어준다.
  • 공유환경 제공 : 도커는 공유된 서비스 Docker Hub가 있어서 전세계 개발자의 결과물을 공유하고 검증된 많은 이미지들을 내려받고 사용하면 된다.

 

컨테이너는 프로세스나 애플리케이션을 독립적으로 구성하기 위해 만들어져서 개별 컨테이너를 생성하고 배치하기는 쉽다. 근데 만약 여러 컨테이너를 모아 하나의 단위로 관리할 수 있는 커다란 애플리케이션을 만들고자 한다면? 문제가 발생한다. 이 때 나온 개념이 컨테이너 오케스트레이션이며, 그 중 하나가 쿠버네티스이다. 

 

3. 쿠버네티스란?

 

쿠버네티스는 컨테이너화된 애플리케이션을 배포하기 위한 오픈소스 오케스트레이터다. 쿠버네티스는 구글이 지난 십여 년 동안 애플리케이션 지향 API를 통해 컨테이너 환경에서 확장성과 신뢰성을 갖춘 시스템을 배포했던 경험으로 만들어졌다.

 

쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다. K8s라는 표기는 "K"와 "s"와 그 사이에 있는 8글자를 나타내는 약식 표기이다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다. 쿠버네티스는 프로덕션 워크로드를 대규모로 운영하는 15년이상의 구글 경험과 커뮤니티의 최고의 아이디어와 적용 사례가 결합되어 있다.

 

 

위의 그림을 보면, 쿠버네티스는 컨테이너를 관리해주는 오케스트레이터인 것을 알 수 있으며, 다수의 컨테이너 실행을 관리 및 조율을 해주고, 생성과 소멸, 시작 및 중단 시점 제어,  스케줄링, 로드 밸런싱, 클러스터링 등 모든 과정을 관리할 수 있다. 또한 쿠버네티스는 클라우드 환경에서 애플리케이션을 빌드하고 배포하는 방식을  근본적으로 변화시키기 위해 개발됐다. 

 

쿠버네티스의 특징

 

  • 서비스 검색 및 로드 밸런싱  : Kubernetes는 DNS 이름 또는 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있습니다. 컨테이너에 대한 트래픽이 높으면 Kubernetes가 네트워크 트래픽을 로드 밸런싱하고 분산하여 배포가 안정적으로 이루어지도록 할 수 있다.
  • 스토리지 오케스트레이션 :  Kubernetes를 사용하면 로컬 스토리지, 퍼블릭 클라우드 제공업체 등과 같이 선택한 스토리지 시스템을 자동으로 탑재할 수 있다.
  • 자동화된 롤아웃 및 롤백 : Kubernetes를 사용하여 배포된 컨테이너의 원하는 상태를 설명할 수 있으며 제어된 속도로 실제 상태를 원하는 상태로 변경할 수 있습니다. 예를 들어 Kubernetes를 자동화하여 배포를 위한 새 컨테이너를 생성하고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 채택할 수 있디.
  • 자가 치유 시스템 :  Kubernetes는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하고, 사용자 정의 상태 확인에 응답하지 않는 컨테이너를 종료하고, 서비스를 제공할 준비가 될 때까지 이를 클라이언트에 알리지 않는다.

 

4. 요약

 

  1. 물리서버, 가상화 기술의 단점을 보완한 것이 컨테이너이고, 많은 컨테이너를 관리를 자동화해주는 오픈 소스 플랫폼인 쿠버네티스에 대해 배웠다.
  2. 컨테이너 하나 띄어서 사용을 할거면 도커를 사용하자.
  3. 100개의 컨테이너를 만들고 관리할거면 쿠버네티스를 사용하자.

 

 

 

참조 : https://kubernetes.io 
https://wooono.tistory.com/109?category=929053
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

 

728x90