[K8s] 쿠버네티스(Kubernetes) 입문 완벽 가이드: 배경, 도커와의 관계, 핵심 컴포넌트까지


현재 IT 실무 생태계를 지배하고 있는 단 하나의 인프라 '표준'을 꼽으라면, 주저 없이 쿠버네티스(Kubernetes, K8s)를 말할 수 있다. 네이버, 카카오, 토스 같은 대형 IT 기업은 물론이고, 성장을 준비하는 수많은 스타트업들까지 이제는 쿠버네티스 없이 대규모 서비스를 운영하는 것을 상상하기 어려워졌다.

수십, 수백 개의 마이크로서비스가 맞물려 돌아가는 현대의 아키텍처에서, 쿠버네티스(k8s)는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해 주는 오픈소스 플랫폼이다. 오늘은 이 거대한 인프라 생태계의 마에스트로, 쿠버네티스에 대해 완벽하게 파헤쳐 보자.


1. 쿠버네티스가 나온 배경


  • 전통적인 배포(Traditional Deployment) : 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 프로그램을 사용 ⇒ 여러 app을 사용할 경우 성능 저하, 그렇다고 컴퓨터를 늘리기엔 비용적 문제가 있음
  • 가상화 배포(Virtualized Deployment) : Hypervisor를 통해 하나의 시스템 상에서 여러 가상 컴퓨터를 구동하여 app 끼리 서로 간섭하지 않게 한다. (가상 머신끼리 간섭할 가능성이 낮다.) ⇒ 단점은 가상머신에 일일이 OS를 설치해야해서 컨테이너 배포 방식보다는 무겁다.
  • 컨테이너 배포(Container Deployment) : 프로그램 구동을 위해 OS를 매번 설치할 필요 없다. 물리적 컴퓨터이든 가상머신이든 상관 없이 배포 가능하다. 예를 들어 2개의 프로그램이 같은 OS에 설치되지만 서로 간섭하지 않는다. OS에서 할당 받은 CPU, 메모리 등의 자원을 독립적으로 사용가능하다. ⇒ 컨테이너는 OS를 공유하는 방식이기 때문에 OS가 문제가 일어날 경우 전체 컨테이너의 문제가 될 가능성이 있다.

2. 쿠버네티스와 도커 관계

즉, 쿠버네티스의 역할은 컨테이너를 분산 배치, 상태 관리 및 컨테이너 구동 환경까지 관리해주는 도구이고 도커는 컨테이너를 다루는 도구 중 하나이다. (쿠버네티스가 컨테이너를 다루기 위해 도커를 사용할 수 있다.)

3. 쿠버네티스를 처음 구성할 때 사용할 수 있는 도구

3-1. 미니쿠브 - 실습이나 연습용

  • 용도 : 간단한 학습 및  개발 환경 구성
  • 장점 : 설치가 쉽고 개발 도구와 연계가 편리함
  • 단점 : 단일 노드만 지원하며 추가적이 가상화 도구 필요함

3-2. k3s - 실제로 활용 가능한 쿠버네티스 클러스터를 구성하고 싶다

k3s 실행 파일을 통해 서버와 에이전트만 구동하면 쿠버네티스의 각 구성 요소가 간편하게 설치되면서 쿠버네티스 클러스터를 쉽게 구성할 수 있다. (k3s)



3-3. 랜처(Rancher) - 대규모 환경에 적합한 쿠버네티스

  • 쿠버네티스 클러스터뿐 아니라 운영에 필요한 모니터링, 보안 관련 기능을 쉽게 설치할 수 있다.
  • 랜처의 관리 도구를 사용해서 새로운 쿠버네티스 클러스터를 쉽게 생성하고 여러 클러스터를 한곳에서 관리 (퍼블릭 클라우드와 프라이핏 클라우드를 가리지 않고 설치 가능하다.)

  • 용도 : 대규모 및 기업용 환경에서도 활용 가능한 다목적 쿠버네티스 관리 플랫폼
  • 장점 : 기본적으로 포함되어 있는 기능이 많고 추가 도구 설치도 쉬움. 멀티 클라우드 관리 가능함
  • 단점 : 다른 도구에 비해 무거우므로 시스템 환경에 따라 적절한 고려가 필요함

3-4. 매니지드 쿠버네티스 서비스

퍼블릭 클라우드에서 제공하는 서비스 ⇒ 생선된 클러스터의 관리까지 퍼블릭 클라우드에서 해주기 때문에 사용자는 쿠버네티스 기능을 사용하는 데에만 집중할 수 있다.

  • AWS : EKS 서비스
  • Azure : AKS 서비스
  • GCP : GKE 서비스

4. 쿠버네티스 실습 방법

위의 링크에서 쿠버네티스 클러스터를 구성하기 위해 필요한 모든 구성 요소를 단계별로 직접 설정하는 방법을 가이드하고 있다.

위 문서의 학습을 통해 쿠버네티스의 전체적인 구성을 이해할 수 있으며, 쿠버네티스 지식을 한 단계 도약시킬 수 있다.


5. 쿠버네티스 컴포넌트

쿠버네티스 컴포넌트는 쿠버네티스를 이루는 구성 요소이다. 크게 2가지로 분류할 수 있다.
  1. 컨트롤 플레인(Control Plane) 컴포넌트 : 쿠버네티스 기능 제어를 전체적으로 담당
  2. 노드(Node) 컴포넌트 : 컴포넌트와 컨트롤 플레인 컴포넌트의 요청을 받아 각 노드에 동작 담당

전체 구조

  • 컴포넌트 플레인 : 회사 전반에 해당하는 ‘본사의 업무’
  • 노드 : 각 지역별 ‘지사의 업무’

컨트롤 플레인(Control Plane) 컴포넌트

  • kube-apiserver : 쿠버네티스 클러스터로 들어오는 요청을 가장 앞에서 접수하는 역할
  • etcd :클러스터가 동작을 위한 클러스터 및 리소스의 구성 정보, 상태 정보 및 명세 정보 등을 key-value 형태로 저장하는 저장소
  • kube-scheduler : 새로 생성된 파드를 감지하여 어떤 노드로 배치할지 결정하는 작업인 스케줄링을 담당
  • kube-controller-manager : 다운된 노드가 없는지 파드가 의도한 복제 숫자 유지나 서비스와 파드가 적절하게 연결되어 있는지 확인하고 적절하지 않다면 적절한 수준을 유지하는 역할 (관리자 역할)

노드(Node) 컴포넌트

  • kubelet(쿠블릿) : 노드에서 컨테이너가 동작하도록 관리해 주는 핵심 요소, 각 노드에서 파드를 생성하고 정상적으로 동작하는지 관리하는 역할을 담당
  • container runtime : 컨테이너 런타임은 파드에 포함된 컨테이너 실행을 실질적으로 담당하는 애플리케이션 (예로 도커가 있다.)
  • kube-proxy : 쿠버네티스 클러스터 내부에서 네트워크 요청을 전달하는 역할

댓글 쓰기

0 댓글