Red Hat에 오신 것을 환영합니다

각국 홈페이지

전세계 Red Hat 고객에게 일어나는 일들을 확인해 보십시오.

컨테이너

Kubernetes란?

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

Kubernetes는 원래 Google 엔지니어들이 개발하고 설계한 플랫폼입니다. Google은 초창기에 Linux 컨테이너 기술에 기여하였으며 Google 제품이 컨테이너에서 어떻게 작동하는지 대중에게 공개하였습니다. 이는 Google의 클라우드 서비스를 구동하는 기술이기도 합니다. Google은 1주일에 20억 개 이상의 컨테이너 배포를 생성하며 이 모두가 내부 플랫폼인 Borg를 기반으로 하고 있습니다. Borg는 Kubernetes의 전신이었으며 수년 동안 Borg를 개발하는 과정에서 얻은 경험은 Kubernetes 기술이 탄생하는 데 큰 영향을 미쳤습니다.

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

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


Kubernetes가 필요한 이유는 무엇일까요?

실제 프로덕션 애플리케이션은 멀티플 컨테이너에 걸쳐 있으며 이러한 컨테이너는 멀티플 서버 호스트에 배포되어야 합니다. Kubernetes는 이러한 워크로드를 위해 규모에 맞는 컨테이너를 배포하는 데 필요한 오케스트레이션 및 관리 기능을 제공합니다. Kubernetes 오케스트레이션을 사용하면 멀티플 컨테이너를 포괄하고, 클러스터 전체에서 컨테이너를 스케줄링하고, 컨테이너를 확장하고, 시간 경과에 따라 컨테이너의 상태를 관리할 수 있는 애플리케이션 서비스를 구축할 수 있습니다.

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

Kubernetes explained - diagram

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

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

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


Kubernetes를 사용해 어떤 작업을 수행할 수 있을까요?

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

Kubernetes를 사용하여 수행할 수 있는 작업은 다음과 같습니다.

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

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

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

Kubernetes 사용 방법을 알아보세요

여타 기술과 마찬가지로 입문하는 데 장벽이 될 수 있는 기술 용어들이 있습니다. Kubernetes를 이해할 수 있도록 좀 더 일반적인 용어로 분류해서 설명해보겠습니다.

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

노드: 이 머신은 할당된 태스크를 요청대로 수행합니다. Kubernetes 마스터가 이러한 노드를 제어합니다.

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

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

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

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

kubectl: Kubernetes를 위한 명령줄 설정 툴입니다.


프로덕션에서 Kubernetes 사용

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

여기서 바로 Red Hat OpenShift가 필요합니다. OpenShift는 기업을 위한 Kubernetes이며 다양한 분야에도 사용할 수 있습니다. OpenShift에는 레지스트리, 네트워킹, 텔레메트리, 보안, 자동화, 서비스 등을 비롯한 부가 기술이 모두 내장되어 있어서 기업이 강력하고 성공적인 Kubernetes를 구축할 수 있습니다. OpenShift를 사용하면 개발자는 확장성, 제어, 오케스트레이션을 통해 컨테이너화된 새 애플케이션을 구축하고 호스팅하고 클라우드에 배포함으로써 훌륭한 아이디어를 바탕으로 새로운 비즈니스를 쉽고 빠르게 개시할 수 있습니다.

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


Kubernetes가 귀사의 인프라에 적합한지 알아보세요

Kubernetes diagram

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

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

Docker는 어떨까요?

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

컨테이너를 활용하는 방법을 살펴 보세요