Kubernetes(K8s) 클러스터란 무엇인가요?

최신 애플리케이션을 빌드하고 배포하는 엔터프라이즈 개발자에게 컨테이너화된 워크로드를 대규모로 관리하는 것은 흔한 과제입니다. Kubernetes(K8s로 줄여 쓰기도 함)는 컨테이너 조정의 표준으로 부상했습니다. 이 강력한 오픈소스 시스템의 핵심은 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하도록 설계된 강력한 환경인 Kubernetes 클러스터입니다.

Kubernetes 클러스터
Kubernetes 클러스터 다이어그램

Kubernetes 클러스터 정의

Kubernetes 클러스터는 컨테이너화된 애플리케이션을 실행하기 위해 그룹화된 노드 또는 머신 집합입니다. 통합되고 추상화된 컴퓨팅 환경을 제공하므로 개별 서버와 직접 상호작용할 필요 없이 서비스를 배포하고 관리할 수 있습니다.

K8s 클러스터의 주요 역할은 컨테이너 조정입니다. 애플리케이션 가용성 유지, 수요에 따른 리소스 확장, 다운타임 없는 업데이트 출시와 관련된 복잡한 작업을 자동화합니다. 

컨테이너의 전체 수명 주기를 관리하는 Kubernetes 클러스터는 엔터프라이즈 애플리케이션이 확장 가능하고 민첩하게 작동하는 데 필요한 기반 플랫폼을 제공합니다.

노드

노드는 Kubernetes 클러스터 내의 작업자 머신으로, 클라우드 제공업체의 가상 머신(VM) 또는 데이터 센터의 물리적 서버일 수 있습니다. 각 노드는 컨테이너를 실행하는 데 필요한 CPU, 메모리, 네트워킹 리소스를 제공합니다. K8s 클러스터는 컨트롤 플레인과 하나 이상의 워커 노드로 구성되며, 이들이 함께 클러스터의 컴퓨팅 용량을 제공합니다.

포드

Kubernetes 객체 모델에서 가장 작고 가장 기본적인 배포 가능한 단위는 포드입니다. 포드는 클러스터 내에서 활성 프로세스의 단일 인스턴스를 나타내며, 긴밀하게 결합된 하나 이상의 컨테이너, 공유 저장소 리소스, 고유한 네트워크 IP 주소를 캡슐화합니다. 포드에는 여러 컨테이너가 포함될 수 있지만 가장 일반적인 패턴은 포드에 단일 컨테이너를 수용하여 포드와 컨테이너화된 애플리케이션 간에 1대1 매핑을 만드는 것입니다.

컨테이너

컨테이너는 코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정 등 애플리케이션을 실행하는 데 필요한 모든 것이 포함된 독립적으로 실행 가능한 경량형 소프트웨어 패키지입니다. 이러한 캡슐화를 통해 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 할 수 있습니다. 컨테이너는 이동성과 효율성이 뛰어나 최신 마이크로서비스 기반 애플리케이션의 이상적인 구성요소입니다.

K8s 클러스터 아키텍처

Kubernetes 클러스터 아키텍처는 애플리케이션 실행을 위한 내결함성 시스템을 만드는 데 도움이 되는 두 가지 주요 유형의 구성요소로 구성됩니다.

  • 컨트롤 플레인: 클러스터를 관리하는 두뇌 역할을 합니다. 
  • 워커 노드: 런타임 환경을 제공하여 힘을 발휘합니다.

컨트롤 플레인(마스터 노드)

컨트롤 플레인은 전체 클러스터의 원하는 상태를 유지하는 역할을 합니다. 스케줄링에 대한 전역 결정을 내리고, 클러스터 이벤트에 응답하며, 모든 Kubernetes 객체의 수명 주기를 관리합니다. 컨트롤 플레인의 주요 구성요소는 다음과 같습니다.

  • 백업 저장소(etcd): 모든 클러스터 데이터의 Kubernetes 백업 저장소로 사용되는 일관성 있고 가용성이 높은 키-값 저장소입니다.
  • API 서버(kube-apiserver): 컨트롤 플레인의 프런트엔드 역할을 하며 Kubernetes API를 노출합니다. REST 요청을 관리하고 검증한 다음 etcd 내의 관련 객체 상태를 업데이트합니다.
  • 스케줄러(kube-scheduler): 스케줄러는 노드가 할당되지 않은 새로 생성된 포드를 감시하고 리소스 가용성, 정책, 어피니티 사양을 기반으로 포드가 실행될 노드를 선택합니다.
  • 컨트롤러 관리자(kube-controller-manager)[선택사항]: 이 구성요소는 클러스터의 상태를 규제하는 다양한 컨트롤러 프로세스를 실행합니다. 예를 들어 컨트롤러는 노드 장애를 처리하고 배포에 필요한 포드 수를 유지하며 서비스 엔드포인트를 관리합니다.

워커 노드(컴퓨팅 노드)

워커 노드는 컨테이너화된 애플리케이션이 실제로 실행되는 머신입니다. 각 노드는 컨트롤 플레인에서 관리되며 포드를 실행하는 데 필요한 서비스를 포함합니다. 각 워커 노드의 핵심 구성요소는 다음과 같습니다.

  • kubelet: 클러스터의 각 노드에서 실행되는 에이전트인 kubelet은 컨트롤 플레인과 통신하며 포드 사양에 설명된 컨테이너가 실행되고 정상 상태인지 확인합니다.
  • kube-proxy[선택사항]: 각 노드에서 실행되는 네트워크 프록시로, 노드에서 네트워크 규칙을 유지하는 역할을 합니다. 이러한 네트워크 규칙을 사용하면 클러스터 내부 또는 외부의 네트워크 세션에서 포드로 네트워크 통신을 수행할 수 있습니다.
  • 컨테이너 런타임: 이 소프트웨어는 컨테이너의 실행을 관리하고 다양한 런타임을 지원하며 containerd가 인기 있는 옵션입니다.

K8s에서 클러스터 사용

Kubernetes 클러스터는 매우 다재다능하며 엔터프라이즈 개발팀과 운영팀이 직면한 많은 과제를 해결할 수 있습니다.

기존 애플리케이션 컨테이너화

기존 애플리케이션을 컨테이너로 이전하여 광범위한 리팩터링 없이도 이동성, 확장성, 리소스 사용률을 개선합니다.

새로운 클라우드 네이티브 애플리케이션 빌드

K8s 클러스터를 마이크로서비스 기반 아키텍처의 기반으로 사용하여 서비스의 독립적인 개발, 배포, 확장을 지원합니다.

DevOps 및 CI/CD

Kubernetes 클러스터와 통합하여 빌드, 테스트, 배포 파이프라인을 자동화하여 출시 주기를 단축하고 안정성을 개선합니다.

확장성 및 복원력

애플리케이션을 자동으로 확장 또는 축소하여 가변적인 트래픽 부하를 처리하고, 실패한 컨테이너를 자동으로 다시 시작하거나 교체하여 자가 복구를 지원합니다.

Resource efficiency

더 적은 수의 노드에 더 많은 컨테이너를 밀집시켜 인프라 사용률을 개선하면 비용을 크게 절감할 수 있습니다.


Google Cloud로 비즈니스 문제 해결

신규 고객에게는 Google Cloud에서 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.

Kubernetes 클러스터 관리

Kubernetes는 매우 강력하지만 안전한 프로덕션급 K8s 클러스터를 설정하고 운영하려면 상당한 운영 오버헤드가 발생합니다. 이때 Google Kubernetes Engine(GKE)과 같은 관리형 서비스가 엔터프라이즈팀에 막대한 가치를 제공할 수 있습니다. GKE는 복잡하고 시간이 오래 걸리는 많은 작업을 자동화하여 Kubernetes 클러스터 관리를 간소화하는 데 도움이 될 수 있습니다.

GKE는 완전 관리형 컨트롤 플레인을 제공하여 가용성, 패치, 업데이트를 처리하므로 팀에서 직접 처리할 필요가 없습니다. 노드 및 확장 등 클러스터 전체의 운영 관리를 자동화하여 오버헤드를 더욱 줄이고 리소스 사용량을 최적화하는 Autopilot 모드와 같은 기능을 제공합니다. GKE를 사용하면 개발자는 코드 작성과 애플리케이션 빌드에 집중할 수 있으며, 플랫폼은 기본 Kubernetes 클러스터 아키텍처와 인프라를 처리하여 보안, 안정성, 확장성을 보장합니다.

Kubernetes 클러스터 학습 리소스

Google Cloud