BAEKDEV
BAEKDEV

자바 둘 타세요-에서 <자바 인력1>을 맡고 있습니다.

쿠버네티스란 무엇인지 살펴보기 - 기초(1)

우리나라에서도 많은 IT 기업들이 점차 쿠버네티스 도입을 시작하였습니다. 쿠버네티스가 무엇이고 왜 도래하게 되었는지 살펴보도록 하겠습니다. 쿠버네티스 기초편은 총 4개의 시리즈 구성될 예정입니다.

쿠버네티스란 무엇인지 살펴보기 - 기초(1)

쿠버네티스 기초 시리즈

Kubernetes란?

  • 쿠버네티스는 디플로이 자동화, 스케일링, 컨테이너화된 애플리케이션의 관리를 위한 오픈 소스 시스템
  • 여러 클러스터의 호스트 간에 애플리케이션 컨테이너의 배치, 스케일링, 운영을 자동화하기 위한 플랫폼을 제공하기 위함
  • 도커를 포함하여 일련의 컨테이너 도구들과 함께 동작1
  • 쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 플랫폼2

Kubernetes가 도래하기까지의 과정

  • 1991년, Linux를 이용한 서버 운영이 가능했지만 리소스를 관리 및 할당 면에서 어려움이 따름
  • 이후 VM이 출시 되어 기업들은 물론 일반인들도 쉽게 사용할 수 있도록 발전 됨
  • VM은 자동화는 되는 것 같았지만 시스템 효율이 나지 않아 2010년 openstack3이 탄생하게 됨
    • 작은 서버를 띄워야 할 때에도 덩치가 큰 OS를 써야하는 단점
  • Docker 출범
    • Linux의 어려운 자원 공유 기술을 컨테이너라는 공유 기능을 통해 효율적으로 만듬
    • 컨테이 가상화 기술은 서비스 간의 자원을 격리하는데 있어 OS를 별도로 띄우지 않아도 됨
      • 즉, 하나의 OS위에서 여러개 컨테이너를 띄우는 형태
    • 자동화에 OS 기동 시간이 없기 때문에 배포가 빠름
    • 한 서비스를 가상화 시켜서 배포를 하는 것이지 엄청 많은 서비스를 한 번에 가상화 시켜주는 것은 아님
      -> 이런 것을 해주는것이 바로 오케스트레이션, 도커 스웜이 있음
      -> 여러 컨테이너들을 관리해주는 것
  • 쿠버네티스 출범
    • 쿠버네티스는 여러 업체들이 참여해서 오케스트레이션을 고도화함

IT에서는 가장 많이 사용하는게 표준이 됨


그럼 왜 쿠버네티스일까?

트래픽 예측이 힘들고 여러 서비스를 운영하는 경우 더 어렵고 힘들다.

애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야합니다. 예를 들어 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야 합니다. 이런 과정을 시스템에 의해 자동으로 처리되도록 하는 것이 바로 쿠버네티스가 필요한 이유입니다. 즉, 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공합니다.

  • Storage Orchestration : 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재할 수 있습니다.
  • Auto Scaling&Healing : 트래픽에 따라 인스턴스 증감, 장애가 난 서버 대신 새로운 서버로 옮겨 서비스 지속을 가능하게 합니다.
  • Deployment를 통해 rollingupdate & recreate : 무중단 서비스 배포가 가능합니다.
  • 자동화된 빈 패킹 : 각 컨테이너에 필요한 자원의 양을 지정할 수 있고, 컨테이너에 자원이 요청되면 쿠버네티스는 자원 관리를 위해 더 나은 결정을 내릴 수 있습니다.
  • 시크릿과 구성 관리 : 쿠버네티스를 사용하면 암호, OAuth 토큰 및 ssh 키와 같은 중요한 정보를 저장하고 관리할 수 있습니다.

VM과 Container 차이

VM

  • Hypervisor - 호스트 위에서 작동하는 가상화 시켜주는 스택
  • 하이퍼바이저 위에서 각 서비스마다 OS를 띄워야 함
  • VM은 뚫려도 각 서비스별로 OS 격리가 되어 있어서 상대적으로 안전함

Container

  • 각 서버 환경별 이미지만 있으면 다른 환경의 도커 위에서 컨테이너를 띄우는 것이 가능함
  • 하나의 OS를 공유하는 개념
  • 한 컨테이너가 뚫려서 OS에 접근하면 다른 컨테이너도 접근이 가능함
  • 한 서비스를 만들때 모듈별로 나눠서 각각 만들고, 각각 컨테이너에 나눠 담는게 좋음

Docker

  • namespace - kernel에 관한 영역 분리
  • cgroups - 자원에 대한 영역 분리
  • os에서 제공하는 자원 격리 기술을 이용해서 컨테이너라는 단위로 서비스를 분리할 수 있게 해줌
  • 컨테이너 가상화가 깔려있는 OS에서는 개발환경에 대한 걱정없이 배포가 가능

Kubernetes

  • Pod에 모듈을 담을 수 있고, Pod이 배포 단위임
  • Pod 등 쿠버네티스의 오브젝트에 관해서는 다음 포스팅에 구체적으로 설명하겠습니다.

다음 포스팅에 들어가기에 앞서 쿠버네티스는 Master와 Node로 구성되고 이들이 연결되어 클러스터라는 개념이 됩니다. 하나의 Master에는 여러 Node가 연결되구요.

  • Master
    • 쿠버네티스의 전반적인 기능들을 컨트롤클러스터에 관한 스케줄링과 같은 전반적인 결정을 수행하고 클러스터 이벤트를 감지하고 반응
  • Node
    • 자원을 제공하기 때문에 클러스터 전체 자원을 늘리고 싶다면 노드를 계속 추가하면 됨

References
  1. ko.wikipedia.org 

  2. kubernetes.io 

  3. openstack - IaaS(infrastructure as a Service) 형태의 클라우드 컴퓨딩 오픈 소스 프로젝트