본문 바로가기
IT용어

kubernetes란?

by 스파이디웹 2020. 6. 9.
728x90

Kubernetes, 또는 쿠버네티스, 또는 간단히 "큐브(kube)"는 Linux 컨테이너 작업을 자동화하는 오픈소스 플랫폼입니다. 이 플랫폼에서는 컨테이너화된 애플리케이션을 배포하고 확장하는 데 수동 프로세스가 필요하지 않습니다. 즉, Linux 컨테이너를 실행하는 호스트 그룹을 함께 클러스터링할 수 있으며 쿠버네티스를 통해 이러한 클러스터를 쉽고 효율적으로 관리할 수 있습니다. 클러스터는 퍼블릭 클라우드, 프라이빗 클라우드 또는 하이브리드 클라우드 전체로 호스트를 확장할 수 있습니다. 이러한 이유로 쿠버네티스는 Apache Kafka를 통한 실시간 데이터 스트리밍과 같이 신속한 확장을 요하는 클라우드 네이티브 애플리케이션을 호스팅하는 데 이상적인 플랫폼입니다.

쿠버네티스는 원래 Google 엔지니어들이 개발하고 설계한 플랫폼입니다. Google은 초창기에 Linux 컨테이너 기술에 기여(cgroups)하였으며 Google 제품이 컨테이너에서 어떻게 작동하는지 대중에게 공개하였습니다. 이는 Google의 클라우드 서비스를 구동하는 기술이기도 합니다. Google은 내부 플랫폼인 Borg를 통해 일주일에 20억 개 이상의 컨테이너 배포를 생성하고 있습니다. Borg는 쿠버네티스의 전신이었으며 수년 동안 Borg를 개발하는 과정에서 축적된 경험은 쿠버네티스 기술의 주요 원동력이 되었습니다.

쿠버네티스 로고에 표시된 7개의 글자는 프로젝트의 원래 이름인 'Project Seven of Nine'을 의미합니다.

Red Hat은 쿠버네티스가 출시되기 전부터 Google과 협력하여 개발에 참여한 초기 기업 중 하나였으며 쿠버네티스 업스트림 프로젝트에서 두 번째 주요 기여자가 되었습니다. 2015년에 Google은 새로 설립된 클라우드 네이티브 컴퓨팅 재단(Cloud Native Computing Foundation)에 쿠버네티스 프로젝트를 기부했습니다.


쿠버네티스가 필요한 이유는 무엇일까요?

실제 프로덕션 애플리케이션은 여러 컨테이너에 걸쳐 있으며 이러한 컨테이너는 여러 서버 호스트에 배포되어야 합니다. 컨테이너를 위한 보안은 멀티레이어 구조이며 복잡할 수 있습니다. 바로 여기에 쿠버네티스가 사용됩니다. 쿠버네티스는 이러한 워크로드를 위해 규모에 맞는 컨테이너를 배포하는 데 필요한 오케스트레이션 및 관리 기능을 제공합니다. 쿠버네티스 오케스트레이션을 사용하면 여러 컨테이너에 걸쳐 애플리케이션 서비스를 구축하고 클러스터 전체에서 컨테이너의 일정을 계획하고 이러한 컨테이너를 확장하여 컨테이너의 상태를 지속적으로 관리할 수 있습니다. 쿠버네티스를 활용하면 IT 보안을 한층 강화할 수 있습니다.

쿠버네티스는 종합적인 컨테이너 인프라를 제공할 수 있도록 네트워킹, 스토리지, 보안, 텔레메트리, 기타 서비스와 통합해야 합니다.

 

 

물론 이는 실제 환경에서 컨테이너를 사용하는 방식에 따라 달라집니다. Linux 컨테이너를 사용하는 가장 기본적인 방식은 컨테이너를 효율적이고 빠른 가상 머신으로 다루는 것입니다. 이를 프로덕션 환경과 여러 애플리케이션으로 확장하고 나면 개별 서비스를 제공하기 위해 같은 위치에 배치된 여러 개의 컨테이너를 함께 사용해야 한다는 것을 분명히 알 수 있습니다. 따라서 환경에서 컨테이너 수가 크게 증가하며 컨테이너가 누적됨에 따라 복잡성도 증가합니다.

쿠버네티스는 컨테이너를 "포드(pod)"로 분류하여 컨테이너 급증과 관련된 여러 가지 문제를 해결합니다. 포드는 그룹화된 컨테이너에 추상화 계층을 추가하므로 사용자가 워크로드를 예약하고 네트워킹 및 저장소와 같은 필수 서비스를 컨테이너에 제공할 수 있습니다. 쿠버네티스의 또 다른 부분을 사용해 이러한 포드 전체에서 부하를 분산하고 적합한 수의 컨테이너를 실행하여 워크로드를 지원할 수 있습니다.

쿠버네티스를 올바르게 구현하고 Atomic Registry, Open vSwitch, heapster, OAuth, SELinux와 같은 다른 오픈소스 프로젝트를 이용해 컨테이너 인프라의 모든 부분을 오케스트레이션할 수 있습니다.


쿠버네티스를 사용해 어떤 작업을 수행할 수 있을까요?

사용자의 환경에서 쿠버네티스를 사용할 경우 얻을 수 있는 주요 이점은, 특히 클라우드를 위한 애플리케이션 개발을 최적화하는 중인 경우, 쿠버네티스를 통해 물리 또는 가상 머신의 클러스트에서 컨테이너를 예약하고 실행할 수 있는 플랫폼이 확보된다는 것입니다. 더 넓게 보면, 프로덕션 환경에 컨테이너 기반 인프라를 완전히 구현해서 사용할 수 있습니다. 또한 쿠버네티스는 운영 작업 자동화와 관련이 있으므로 다른 애플리케이션 플랫폼 또는 관리 시스템에서 가능한 작업의 상당수를 컨테이너를 사용해 수행할 수 있습니다.

쿠버네티스를 사용하여 수행할 수 있는 작업은 다음과 같습니다.

  • 여러 호스트에 걸쳐 컨테이너를 오케스트레이션합니다.
  • 하드웨어를 최대한 활용하여 엔터프라이즈 애플리케이션을 실행하는 데 필요한 리소스를 극대화합니다.
  • 애플리케이션 배포 및 업데이트를 제어하고 자동화합니다.
  • 스토리지를 장착 및 추가해 스테이트풀(stateful) 애플리케이션을 실행합니다.
  • 컨테이너화된 애플리케이션과 해당 리소스를 즉시 확장합니다.
  • 선언적으로(Declaratively) 서비스를 관리함으로써, 배포한 애플리케이션이 항상 배포 목적대로 실행되도록 합니다.
  • 자동 배치, 자동 재시작, 자동 복제, 자동 확장을 사용해 애플리케이션 상태 확인과 셀프 복구를 수행합니다.

그러나 쿠버네티스는 다른 프로젝트를 사용해 이러한 오케스트레이션된 서비스 전체를 제공합니다. 다른 오픈소스 프로젝트를 추가하면 쿠버네티스의 기능을 완전히 실현할 수 있습니다. 이를 위해서는 다음과 같은 요소가 필요합니다.

  • 레지스트리: Atomic Registry 또는 Docker Registry와 같은 프로젝트
  • 네트워킹: OpenvSwitch 및 인텔리전트 엣지 라우팅과 같은 프로젝트
  • 텔레메트리: heapster, kibana, hawkular, elastic과 같은 프로젝트
  • 보안: 멀티테넌시(Multi-tenancy) 계층을 갖춘 LDAP, SELinux, RBAC, OAUTH와 같은 프로젝트
  • 자동화: 설치 및 클러스터 라이프 사이클 관리를 위한 Ansible 플레이북 추가
  • 서비스: 인지도 높은 애플리케이션 패턴을 사용하여 사전 생성된 풍부한 콘텐츠로 구성된 카탈로그

Red Hat OpenShift를 통해 모든 요소를 사전 구축하여 배포할 수 있도록 준비하세요


쿠버네티스 사용 방법을 알아보세요

다른 기술과 마찬가지로 쿠버네티스는 초보자가 기술을 이해하고 습득하는 데 장애가 될 수 있는 기술 용어들이 있습니다. 쿠버네티스를 이해할 수 있도록 좀 더 일반적인 용어로 분류해서 설명해보겠습니다.

마스터: 쿠버네티스 노드를 제어하는 머신입니다. 여기에서 모든 태스크 할당이 시작됩니다.

노드: 할당된 태스크를 요청대로 수행하는 시스템입니다. 쿠버네티스 마스터가 이러한 노드를 제어합니다.

포드: 단일 노드에 배포된 하나 이상의 컨테이너 그룹입니다. 포드에 있는 모든 컨테이너는 IP 주소, IPC, 호스트 이름, 기타 리소스를 공유하며 포드는 기본 컨테이너에서 네트워크와 스토리지를 추상화합니다 이렇게 하면 클러스터에서 컨테이너를 더 쉽게 이동할 수 있습니다.

복제 컨트롤러: 이 컨트롤러는 클러스터에서 실행되어야 하는 동일한 포드 사본의 개수를 제어합니다.

서비스: 포드에서 작업 정의를 분리합니다 쿠버네티스 서비스 프록시는 클러스터에서 다른 위치로 이동한 경우든 교체된 경우든 서비스 요청을 적절한 포드로 자동 수신합니다.

Kubelet: 이 서비스는 노드에서 실행되며 컨테이너 매니페스트를 읽고, 정의된 컨테이너가 시작되어 실행 중인지 확인합니다

kubectl: 쿠버네티스의 명령줄 설정 툴입니다.

더 자세한 정보는 쿠버네티스 용어집을 확인하세요


프로덕션 환경에서 쿠버네티스 사용

쿠버네티스는 오픈소스입니다. 기업에서 일반적으로 사용하는 시스템은 물론이고, 이 기술을 지원하는 정형화된 구조는 없습니다. 프로덕션을 실행하는 단계에서 쿠버네티스를 구현하는 데 문제가 발생한다면 곤란해지며 귀사의 고객 또한 마찬가지일 것입니다.

여기서 바로 Red Hat OpenShift가 필요합니다. OpenShift는 기업의 쿠버네티스 뿐만 아니라 다양한 분야에도 사용할 수 있습니다. OpenShift에는 레지스트리, 네트워킹, 텔레메트리, 보안, 자동화, 서비스 등을 비롯한 부가 기술이 모두 내장되어 있어서 기업이 강력하고 실효성 있는 쿠버네티스를 구축할 수 있습니다. OpenShift를 사용하면 개발자는 확장성, 제어, 오케스트레이션을 통해 컨테이너화된 새 애플케이션을 구축하고 호스팅하고 클라우드에 배포함으로써 우수한 아이디어를 새로운 비즈니스에 신속하게 연결할 수 있습니다.

무엇보다도 중요한 것은, 오픈소스 분야의 세계적인 리더인 Red Hat이 OpenShift를 지원하고 개발한다는 사실입니다.

 


쿠버네티스가 귀사의 인프라에 적합한지 알아보세요

 

 

쿠버네티스는 운영 체제(예: Red Hat Enterprise Linux Atomic Host)를 기반으로 실행되며, 노드에서 실행되는 컨테이너의 포드와 상호작용합니다. 쿠버네티스 마스터는 관리자(또는 DevOps팀)으로부터 명령을 전달받고 해당 지침을 하위 노드에 이어서 전달합니다. 이 핸드오프는 여러 서비스와 연계하여 태스크에 가장 적합한 노드를 자동으로 결정합니다 그 후 리소스를 할당하고 해당 노드에 포드를 지정하여 요청된 작업을 수행합니다.

인프라 측면에서 보면 컨테이너를 관리하는 방식에는 거의 변화가 없습니다. 컨테이너를 더 높은 수준에서 제어하므로 각각의 개별 컨테이너 또는 노드를 세분화하여 관리하지 않고도 더 효과적으로 제어할 수 있습니다. 몇 가지 작업이 필요하긴 하나, 대부분은 쿠버네티스 마스터를 할당하고 노드와 포드를 정의하는 것입니다.

Docker는 어떨까요?

Docker 기술은 원래 목적대로 계속 사용되고 있습니다. 쿠버네티스가 노드에 대해 포드를 예약하면 해당 노드의 kubelet이 지정된 컨테이너를 실행하도록 Docker에 명령합니다. 그런 다음 kubelet은 Docker로부터 이러한 컨테이너의 상태를 계속해서 수집하고 마스터에서 해당 정보를 집계합니다. Docker는 해당 노드에 컨테이너를 풀링하고 이러한 노드를 평소와 같이 시작하고 중지합니다. 차이가 있다면 관리자가 모든 컨테이너의 모든 노드에서 작업을 직접 수행하는 것이 아니라 자동화된 시스템이 이러한 작업을 Docker에 요청한다는 것입니다.

 

출처:

www.redhat.com/ko/topics/containers/what-is-kubernetes

728x90

'IT용어' 카테고리의 다른 글

IT Infra Architecture(인프라 아키텍처)  (0) 2020.09.14
C vs C++ vs C#  (0) 2020.07.28
DOCKER 1  (0) 2020.06.09
멀티쓰레드(Multi Thread)  (0) 2020.05.15
IT용어 정리  (0) 2020.05.03

댓글