쿠버네티스란 무엇인가요?

게시일 2024년 03월 11일
검은색 배경 중앙에서 푸른빛 줄기가 방사형으로 뻗어 나와 워프 속도 또는 빛이 폭발하는 듯한 효과를 연출하는 모습
By Stephanie Susnjara and Ian Smalley

Kubernetes 정의

k8s 또는 kube라고도 하는 Kubernetes는 컨테이너화된 애플리케이션의 배포, 관리 및 확장을 예약하고 자동화하기 위한 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다.

오늘날 Kubernetes와 이를 둘러싼 컨테이너 기술 생태계는 현대적인 클라우드 인프라의 기반을 이루는 핵심 요소로 자리 잡았습니다. 이 생태계는 조직이 인프라와 운영 전반의 복잡한 작업을 수행할 수 있는 생산성이 높은 하이브리드 멀티클라우드 컴퓨팅 환경을 구축하도록 지원합니다. 또한 애플리케이션을 한 번만 빌드하면 어디서나 배포할 수 있는 방식을 지원하여 클라우드 네이티브 개발을 지원합니다.

Kubernetes는 그리스어로 조타수 또는 항해사를 의미하며, 이러한 의미에서 Kubernetes 로고에 키가 사용되었습니다.

배경: 컨테이너, Docker 및 Kubernetes

컨테이너란 무엇인가요?

컨테이너는 모든 환경에서 코드를 실행하는 데 필요한 운영 체제(OS) 라이브러리와 종속성을 소스 코드와 함께 포함하는 경량의 실행 가능한 애플리케이션 구성 요소입니다.

컨테이너는 프로세스를 서로 격리하고 각 프로세스가 사용할 수 있는 CPU, 메모리 및 디스크 리소스를 제어함으로써 여러 애플리케이션이 하나의 운영 체제 인스턴스를 공유할 수 있도록 하는 운영 체제 가상화 기술을 활용합니다. 컨테이너는 가상 머신(VM)보다 크기가 작고 리소스 효율성과 이식성이 뛰어나 현대적인 클라우드 네이티브 애플리케이션의 사실상 표준 컴퓨팅 단위로 자리 잡았습니다. 컨테이너는 리소스 효율성도 뛰어납니다. 컨테이너를 사용하면 더 적은 운영 체제 인스턴스로 더 적은 수의 시스템(가상 서버 및 물리적 서버)에서 더 많은 애플리케이션을 실행할 수 있습니다.

컨테이너는 어디에서나 일관되게 실행될 수 있기 때문에 온프레미스, 프라이빗 클라우드, 퍼블릭 클라우드 및 여러 클라우드 공급업체의 다양한 클라우드 서비스를 결합한 하이브리드 멀티클라우드 환경을 지원하는 기반 아키텍처의 핵심 요소가 되었습니다.

Docker란?

Docker는 Linux 컨테이너를 생성하고 실행하는 데 가장 많이 사용되는 툴입니다. 초기 형태의 컨테이너는 수십 년 전에 도입되었지만(FreeBSD Jails 및 AIX 워크로드 파티션과 같은 기술로), 컨테이너는 2013년에 Docker가 개발자 친화적이고 클라우드 친화적인 새로운 구현을 통해 대중에게 제공하면서 대중화되었습니다.

Docker는 오픈 소스 프로젝트로 시작되었지만, 오늘날에는 오픈 소스 프로젝트를 기반으로 하는 (그리고 개선 사항을 오픈 소스 커뮤니티에 다시 기여하는) 상용 컨테이너 툴킷인 Docker를 생산하는 회사인 Docker Inc.를 지칭하기도 합니다.

Docker는 기존 Linux 컨테이너 기술을 기반으로 구축되었지만 Linux 커널 프로세스를 더욱 세밀하게 가상화할 수 있으며, 개발자가 컨테이너를 더욱 쉽게 구축, 배포, 관리 및 보호할 수 있는 기능을 추가합니다.

현재 OCI(오픈 컨테이너 이니셔티브), CoreOS 및 Canonical(Ubuntu) LXD와 같은 대체 컨테이너 런타임 플랫폼이 존재하지만, Docker가 주로 선택됩니다. 더 나아가 Docker는 사실상 컨테이너와 동의어가 되었으며, 때로는 Kubernetes와 같은 보완 기술의 경쟁자로 오해받기도 합니다.

오늘날 Docker와 Kubernetes는 선도적인 컨테이너화 도구로, 2024년에는 Docker가 82%의 시장 점유율을, Kubernetes가 11.52%의 시장 점유율을 기록했습니다.

Kubernetes를 사용한 컨테이너 오케스트레이션

컨테이너 사용이 확산되면서 오늘날 조직은 수백 개에서 수천 개에 이르는 컨테이너를 운영하는 경우도 있습니다. 운영팀은 컨테이너 배포, 네트워킹, 확장성 및 가용성을 관리하고 자동화해야 합니다. 이때 필요한 것이 바로 컨테이너 오케스트레이션입니다.

Google의 내부 컨테이너 오케스트레이션 플랫폼인 Borg를 기반으로 개발된 Kubernetes는 2014년에 오픈 소스 툴로 공개되었으며, Microsoft, Red Hat, IBM을 비롯한 주요 기술 기업들이 초창기부터 Kubernetes 커뮤니티에 참여했습니다. 2015년 Google은 Kubernetes를 클라우드 네이티브 컴퓨팅을 위한 오픈 소스 벤더 중립 허브인 Cloud Native Computing Foundation(CNCF)에 기증했습니다.

Kubernetes는 2016년 3월 CNCF의 첫 번째 호스팅 프로젝트가 되었습니다. 이후 Kubernetes는 전 세계에서 컨테이너 기반 워크로드를 실행하기 위해 가장 널리 사용되는 컨테이너 오케스트레이션 툴이 되었습니다. CNCF 보고서에 따르면 Kubernetes는 Linux에 이어 세계에서 두 번째로 큰 오픈 소스 프로젝트이며, Fortune 100 기업의 71%가 사용하는 주요 컨테이너 오케스트레이션 툴입니다.

2018년 Kubernetes는 CNCF 최초의 졸업 프로젝트가 되었으며, 역사상 가장 빠르게 성장한 오픈 소스 프로젝트 중 하나로 자리매김했습니다. Docker Swarm과 Apache Mesos를 비롯한 다른 컨테이너 오케스트레이션 기술도 초기에 일부 채택되었지만, Kubernetes는 빠르게 가장 널리 사용되는 플랫폼으로 자리 잡았습니다.

Kubernetes가 2016년에 CNCF에 합류한 이후 기여자 수는 996% 증가하여 8,012명에 이르렀습니다. 이 글을 작성하는 시점 기준으로 기여자들은 GitHub의 Kubernetes 리포지터리에 123,000건이 넘는 커밋을 추가했습니다.

Kubernetes는 어떤 기능을 하나요?

Kubernetes는 다음을 포함하여 애플리케이션 라이프사이클 전반에 걸쳐 컨테이너 관련 작업을 예약하고 자동화합니다.

배포

지정된 수의 컨테이너를 지정된 호스트에 배포하고 원하는 상태로 계속 실행합니다.

롤아웃

롤아웃은 배포 상태를 변경하는 것입니다. Kubernetes를 사용하면 롤아웃을 시작, 일시 중지, 재개 또는 롤백할 수 있습니다.

서비스 검색

Kubernetes는 도메인 이름 시스템 (DNS) 이름이나 IP 주소를 사용하여 컨테이너를 인터넷 또는 다른 컨테이너에 자동으로 노출할 수 있습니다.

스토리지 프로비저닝

필요에 따라 컨테이너에 대한 영구 로컬 또는 클라우드 스토리지를 탑재하도록 Kubernetes를 설정합니다.

로드 밸런싱

Kubernetes는 CPU 사용량이나 사용자 지정 지표를 기반으로 로드 밸런싱을 수행하여 네트워크 전반에 워크로드를 분산하고 성능과 안정성을 유지합니다.

자동 확장

트래픽이 급증하면 Kubernetes 자동 확장은 필요에 따라 새 클러스터를 스핀업하여 추가 워크로드를 처리할 수 있습니다.

고가용성을 위한 자가 치료

컨테이너에 장애가 발생하면 Kubernetes는 자동으로 컨테이너를 재시작하거나 교체하여 중단 시간을 방지할 수 있습니다. 또한 상태 확인 요구 사항을 충족하지 않는 컨테이너를 삭제할 수도 있습니다.

IBM DevOps

DevOps란 무엇인가요?

Andrea Crawford는 DevOps의 정의, DevOps의 가치, 그리고 DevOps 사례와 툴이 아이디어 구상부터 프로덕션에 이르기까지 전체 소프트웨어 Delivery Pipeline을 통해 앱을 이동하는 데 어떻게 도움이 되는지 설명합니다. 최고의 IBM 사고 리더가 이끄는 이 커리큘럼은 비즈니스 리더가 성장을 주도할 수 있는 AI 투자의 우선순위를 정하는 데 필요한 지식을 얻을 수 있도록 설계되었습니다.

Kubernetes 아키텍처 및 구성 요소

Kubernetes를 배포하려면 Kubernetes 아키텍처의 구성 요소인 클러스터가 필요합니다. 클러스터는 노드로 구성되며, 각 노드는 단일 컴퓨팅 호스트, 즉 물리적 머신(bare metal server) 또는 VM을 나타냅니다.

Kubernetes 아키텍처는 제어판 구성 요소와 개별 노드를 관리하는 구성 요소의 두 가지 주요 부분으로 구성됩니다.

노드는 파드로 구성됩니다. 파드는 동일한 컴퓨팅 리소스와 동일한 네트워크를 공유하는 컨테이너 그룹이며 Kubernetes의 확장성 단위이기도 합니다. 파드의 컨테이너가 처리할 수 있는 것보다 더 많은 트래픽을 받는 경우, Kubernetes는 파드를 클러스터의 다른 노드에 복제합니다.

제어 플레인은 클러스터의 노드 전반에서 파드 스케줄링을 자동으로 처리합니다.

제어 평면 구성 요소

각 클러스터에는 클러스터의 제어 플레인을 처리하는 마스터 노드가 있습니다. 마스터 노드는 개발자가 설정한 배포 요구 사항과 사용 가능한 컴퓨팅 용량에 따라 컨테이너를 배포하는 시기와 위치를 자동화하는 스케줄러 서비스를 실행합니다.

Kubernetes 클러스터의 주요 구성 요소는 kube-apiserver, etcd, kube-scheduler, kube-controller-manager 및 cloud-controller-manager입니다.

API server:
Kubernetes의 애플리케이션 프로그래밍 인터페이스(API) 서버는 Kubernetes API(Kubernetes 클러스터를 관리, 생성 및 구성하는 데 사용하는 인터페이스)를 노출하며, 모든 명령과 쿼리의 진입점 역할을 합니다.

etcd
: etcd는 분산 시스템의 지속적인 운영에 필요한 중요한 정보를 저장하고 관리하는 데 사용되는 오픈 소스 분산형 키-값 저장소입니다. Kubernetes에서 etcd는 구성 데이터, 상태 데이터 및 메타데이터를 관리합니다.

Scheduler:
이 구성 요소는 새로 생성된 Pod를 추적하고 해당 Pod를 실행할 노드를 선택합니다. 스케줄러는 리소스 가용성 및 할당 제약 조건, 하드웨어 및 소프트웨어 요구 사항 등을 고려합니다.

Controller-manager:
Kubernetes controller-manager는 기본 제공되는 여러 컨트롤러로 구성되어 있으며, 클러스터의 공유 상태를 모니터링하는 제어 루프를 실행하고 API 서버와 통신하여 리소스, Pod 또는 서비스 엔드포인트를 관리합니다. The controller-manager는 복잡성을 줄이기 위해 여러 개의 개별 프로세스를 하나의 프로세스로 묶어 실행합니다.

Cloud-controller-manager:
이 구성 요소는 controller-manager와 유사한 기능을 수행합니다. 클라우드 공급자의 API와 연결되어 해당 클라우드 플랫폼과 상호 작용하는 구성 요소를 클러스터 내부에서만 상호 작용하는 구성 요소와 분리합니다.

노드 구성 요소

노드는 컨테이너화된 애플리케이션을 배포, 실행 및 관리하는 역할을 합니다.

Kubelet:
Kubelet은 마스터 노드로부터 명령을 받고 실행하는 소프트웨어 에이전트이며, 컨테이너가 파드에서 실행되게 하는 데 도움을 줍니다.

Kube-proxy:
클러스터의 모든 노드에 설치되는 Kube-proxy는 호스트의 네트워크 규칙을 유지 관리하고 서비스와 파드의 변경 사항을 모니터링합니다.

기타 Kubernetes 개념 및 용어

  • ReplicaSet: ReplicaSet는 특정 워크로드에 대해 안정적인 복제본 파드 세트를 유지 관리합니다.

  • 배포: 배포는 컨테이너화된 애플리케이션의 생성과 상태를 제어하고 이를 계속 실행합니다. 클러스터에서 실행해야 하는 파드드의 복제본 수를 지정합니다. 파드가 실패하면 배포가 새 파드를 생성합니다.

  • Kubectl: 개발자는 Kubernetes API와 직접 통신하는 명령줄 인터페이스(CLI)로 구성된 개발자 도구인 kubectl을 사용하여 클러스터 작업을 관리합니다.

  • DaemonSets: DaemonSets는 클러스터의 모든 노드에 파드가 생성되도록 보장하는 역할을 합니다.

  • 추가 기능: Kubernetes 추가 기능은 기능을 확장하며, 클러스터 DNS(Kubernetes에 DNS 레코드를 제공하는 DNS 서버), 웹 UI(클러스터 관리를 위한 Kubernetes 대시보드) 등을 포함합니다.

  • 서비스: Kubernetes Service는 논리적 파드 집합과 이에 액세스하는 방법을 정의하는 추상화 계층입니다. 서비스는 클러스터 내의 하나 이상의 파드에서 실행되는 네트워크 애플리케이션을 노출합니다. 파드를 로드 밸런싱하기 위한 추상적인 방법을 제공합니다. 

Kubernetes 에코시스템

현재 애플리케이션의 개발 및 제공을 가속화하는 도구, 업그레이드 및 추가 능력을 제공하는 엔터프라이즈급 관리 플랫폼을 포함하여 90개 이상의 인증된 Kubernetes 제품이 있습니다.

관리형 Kubernetes Service

Kubernetes는 컨테이너 기반 클라우드 애플리케이션을 오케스트레이션하는 데 가장 널리 사용되는 기술이지만, 완전한 기능을 제공하려면 네트워킹, 인그레스, 로드 밸런싱, 스토리지, 지속적 통합, 지속적 제공(CI/CD) 등을 비롯한 다양한 구성 요소가 함께 필요합니다.

클라우드 기반 환경에서 Kubernetes 클러스터를 자체 호스팅하는 것도 가능하지만, 엔터프라이즈 조직의 경우 설정 및 관리가 복잡할 수 있습니다. 이러한 경우에는 Kubernetes Service가 필요합니다.

관리형 Kubernetes Service를 사용하면 공급자가 일반적으로 Kubernetes Service 제어 플레인 구성 요소를 관리합니다. 관리형 서비스 공급자는 업데이트, 로드 밸런싱, 확장 및 모니터링을 위한 일상적인 프로세스를 자동화하는 데 도움이 됩니다. 예를 들어, Red Hat OpenShift는 모든 환경과 Amazon Web Services(AWS), Microsoft Azure, Google Cloud 및 IBM Cloud를 포함한 모든 주요 퍼블릭 클라우드에 배포할 수 있는 Kubernetes Service입니다. 많은 클라우드 제공업체는 자체 관리형 Kubernetes Service도 제공합니다.

Kubernetes 모니터링 툴

Kubernetes 모니터링은 Kubernetes 클러스터에서 실행되는 컨테이너화된 애플리케이션의 상태, 성능 및 비용 특성과 관련된 데이터를 수집하고 분석하는 것을 의미합니다.

Kubernetes 클러스터를 모니터링하면 관리자와 사용자는 가동 시간, 클러스터 리소스 사용량, 그리고 클러스터 구성 요소 간의 상호 작용을 추적할 수 있습니다. 모니터링은 리소스 부족, 장애, 클러스터에 참여하지 못하는 노드와 같은 문제를 신속하게 식별하는 데 도움이 됩니다. 오늘날의 Kubernetes 모니터링 솔루션에는 애플리케이션 성능 관리(APM), 관측 가능성, 애플리케이션 리소스 관리(ARM) 등을 위한 자동화된 툴이 포함됩니다.

Istio 서비스 메시

Kubernetes는 포드를 배포하고 확장할 수 있지만 파드 간의 라우팅을 관리하거나 자동화할 수 없으며 이러한 연결을 모니터링, 보호 또는 디버깅하는 툴을 제공하지 않습니다.

러스터의 컨테이너 수가 증가함에 따라 컨테이너 간에 가능한 연결 경로의 수가 기하급수적으로 증가합니다. 예를 들어, 컨테이너 2개는 2개의 잠재적 연결이 있지만 10개 파드는 90개의 잠재적 연결이 있으므로 구성 및 관리가 상당히 복잡해질 수 있습니다.

구성 가능한 오픈 소스 서비스 메시 계층인 Istio는 클러스터에서 컨테이너를 연결, 모니터링 및 보호하여 솔루션을 제공합니다. 다른 중요한 이점으로는 향상된 디버깅 기능과, DevOps 팀과 관리자가 컨테이너 간 연결의 지연 시간, 서비스 중 오류 및 기타 특성을 모니터링하는 데 사용할 수 있는 대시보드가 있습니다.

Knative 및 서버리스 컴퓨팅

Knative('케이 네이티브'로 발음)는 개발자가 서버나 백엔드 인프라를 프로비저닝하거나 관리하지 않고도 애플리케이션 코드를 빌드하고 실행할 수 있게 해주는 클라우드 컴퓨팅 애플리케이션 개발 및 실행 모델인 서버리스 컴퓨팅으로 쉽게 진입할 수 있게 해주는 오픈 소스 플랫폼입니다 .

요청을 기다리는 동안 유휴 상태로 유지되는 코드의 지속적인 인스턴스를 배포하는 대신, 서버리스는 필요에 따라 코드를 불러와 수요 변동에 따라 크기를 늘리거나 줄인 다음 사용하지 않을 때는 코드를 중단합니다. 서버리스는 코드가 실행될 때만 비용을 지불하므로 컴퓨팅 용량과 전력 낭비를 방지하고 비용을 절감합니다.

Tekton

Tekton은 지속적 통합 및 배포(CI/CD) 시스템을 만들기 위한 벤더 중립적인 오픈 소스 프레임워크로, 지속적 배포 재단(CDF)에서 관리합니다(IBM 외부 링크).Kubernetes 프레임워크인 Tekton은 파이프라인, 워크플로 및 기타 빌딩 블록에 대한 업계 사양을 제공하여 여러 클라우드 제공업체 또는 하이브리드 환경에 더 빠르고 쉽게 배포함으로써 지속적 배포를 현대화하는 데 도움이 됩니다.

Tekton은 일부 Knative 배포판에서 여전히 지원되는 Knative Build의 후속 제품입니다. Tekton 파이프라인은 컨테이너 이미지를 빌드하고 Kubernetes 환경의 Container Registry에 배포하기 위한 표준이 되었습니다.

Kubernetes 사용 사례

엔터프라이즈 조직은 Kubernetes를 사용하여 최신 IT 인프라를 구성하는 데 중요한 역할을 하는 다음과 같은 사용 사례를 지원합니다.

마이크로서비스 아키텍처 또는 클라우드 네이티브 개발

클라우드 네이티브는 클라우드 기반 애플리케이션을 구축, 배포 및 관리하기 위한 소프트웨어 개발 접근 방식입니다. 클라우드 네이티브의 가장 큰 장점은 DevOps 및 기타 팀이 코드를 한 번만 작성하면 모든 클라우드 서비스 공급업체의 모든 클라우드 인프라에 배포할 수 있다는 점입니다.

이러한 최신 개발 방식은 마이크로서비스를 기반으로 합니다. 마이크로서비스는 하나의 애플리케이션을 느슨하게 결합되고 독립적으로 배포할 수 있는 여러 개의 작은 구성 요소 또는 서비스로 구성하는 방식이며, 이러한 구성 요소와 서비스는 Kubernetes가 관리하는 컨테이너에 배포됩니다.

Kubernetes는 각 마이크로서비스가 효과적으로 실행되는 데 필요한 리소스를 확보하는 동시에 여러 컨테이너를 수동으로 관리하는 데 따르는 운영 부담을 최소화하도록 지원합니다.

하이브리드 멀티클라우드 환경

하이브리드 클라우드는 퍼블릭 클라우드, 프라이빗 클라우드, 온프레미스 데이터 센터 인프라를 결합 및 통합하여 유연하고 비용 최적화된 단일 IT 인프라를 구축합니다.

오늘날 하이브리드 클라우드는 여러 클라우드 공급업체의 퍼블릭 클라우드 서비스인 멀티클라우드와 통합되어 하이브리드 멀티클라우드 환경을 조성했습니다.

하이브리드 멀티클라우드 접근 방식은 유연성을 높이고 한 공급업체에 대한 조직의 의존도를 줄여 공급업체 종속을 방지합니다. Kubernetes는 클라우드 네이티브 개발의 기반을 구축하므로, 하이브리드 멀티클라우드 채택의 핵심입니다.

대규모 애플리케이션

Kubernetes는 자동 확장을 통해 대규모 클라우드 앱 배포를 지원합니다. 이 프로세스를 통해 애플리케이션은 규모를 조정하여 속도와 효율성을 높이고 가동 중단 시간을 최소화하면서 수요 변화에 자동으로 적응할 수 있습니다.

Kubernetes 배포의 탄력적인 확장성은 소매 웹사이트의 반짝 세일과 같은 사용자 트래픽의 변화에 따라 리소스를 추가하거나 제거할 수 있음을 의미합니다.

애플리케이션 현대화

Kubernetes는 애플리케이션 현대화를 지원하는 데 필요한 최신 클라우드 플랫폼을 제공하여 모놀리식 레거시 애플리케이션을 마이크로서비스 아키텍처 기반의 클라우드 애플리케이션으로 마이그레이션하고 전환할 수 있도록 지원합니다.

DevOps 관행

자동화는 DevOps의 핵심으로, 소프트웨어 개발팀과 IT 운영팀의 작업을 통합하고 자동화하여 더 높은 품질의 소프트웨어를 더 빠르게 제공할 수 있도록 지원합니다.

Kubernetes는 애플리케이션 구성 및 배포를 자동화하여 DevOps 팀이 애플리케이션을 신속하게 구축하고 업데이트할 수 있도록 지원합니다.

인공 지능(AI) 및 머신 러닝(ML)

AI를 지원하는 ML 모델과 대규모 언어 모델(LLM)에는 개별적으로 관리하기 어렵고 시간이 많이 걸리는 구성 요소가 포함되어 있습니다. Kubernetes는 클라우드 환경 전반에서 구성, 배포 및 확장성을 자동화함으로써 이러한 복잡한 모델을 학습, 테스트 및 배포하는 데 필요한 민첩성과 유연성을 제공하는 데 도움이 됩니다.

Kubernetes 튜토리얼

Kubernetes로 작업을 시작할 준비가 되었거나 Kubernetes 및 Kubernetes 에코시스템 툴로 기술을 쌓고 싶다면 다음 튜토리얼 중 하나를 시도해 보세요.

작성자

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

관련 솔루션
IBM Instana Observability

AI와 자동화를 활용하여 애플리케이션 스택 전반의 문제를 선제적으로 해결하세요.

IBM Instana Observability 살펴보기
DevOps 솔루션

DevOps 소프트웨어와 도구를 사용해 다양한 장치와 환경에서 클라우드 네이티브 앱을 구축하고, 배포하고, 관리하세요.

DevOps 솔루션 살펴보기
클라우드 컨설팅 서비스

IBM 클라우드 컨설팅 서비스로 모든 플랫폼에서 애플리케이션을 지속적으로 현대화하여 기업의 민첩성과 성장을 가속화하세요.

클라우드 컨설팅 서비스 살펴보기
다음 단계 안내

IBM Instana®를 통한 사전 예방 문제 감지부터 스택 전반의 실시간 인사이트에 이르기까지 클라우드 네이티브 애플리케이션을 안정적으로 실행할 수 있습니다.

  1. IBM Instana 살펴보기
  2. DevOps 솔루션 살펴보기