만자의 개발일지

[Kubernetes] Kubernetes란 본문

Kubernetes

[Kubernetes] Kubernetes란

박만자 2022. 7. 11. 20:19

Kubernetes

쿠버네티스는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 컨테이너 오케스트레이션 도구입니다.

도커 스웜, Amazon ECS, Apache Mesos 등 다양한 컨테이너 오케스트레이션 도구들이 있지만 그 중에서도 쿠버네티스는 컨테이너 오케스트레이션 도구의 표준이라고 말할 수 있을 정도로 많은 회사들이 쿠버네티스를 도입하고 있고 타 도구들과는 다른 쿠버네티스만의 강력한 기능들을 제공하고 있습니다.

 

쿠버네티스 장점

  • 셀프 힐링(Self-Healing)
    • 쿠버네티스는 장애가 생기는 컨테이너가 있는지 확인하기 위해 주기적으로 컨테이너를 진단합니다.
    • 정상적으로 작동하지 않는 컨테이너가 있으면 컨테이너를 다시 시작하거나 교체해 정상적으로 작동하게 합니다.
  • 오토 스케일링(Auto Scaling)
    • 특정 컨테이너에 부하가 급격하게 발생할 경우, 자동으로 스케일 아웃하여 컨테이너를 늘려서 부하를 분산시켜줍니다.
    • 사용이 줄어 부하가 감소하면 쿠버네티스는 다시 컨테이너를 이전 수준으로 줄여줍니다.
  • 리소스 활용
    • 쿠버네티스는 배포할 어플리케이션이 요구하는 리소스 등을 고려해 배포될 노드를 자동으로 선택해 줍니다.
    • 이를 통해 낭비되는 자원을 최소화 할 수 있습니다.
  • 안정성
    • 쿠버네티스는 CNCF 재단에서 관리하는 오픈소스 프로젝트로서, 다양한 기업(구글, VM, 레드햇, 마이크로 소프트 등등..)들이 쿠버네티스의 소스코드에 기여하고 있어 안정성 면에서 높은 신뢰를 받고 있습니다.
  • 확장성
    • CNCF의 다른 클라우드 운영 도구들과 쉽게 연동되어 높은 확장성을 지니고 있습니다.
    • https://landscape.cncf.io/
더보기
CNCF(Cloud Native Computing Foundation)
CNCF는 쿠버네티스와 프로메테우스 같은 클라우드 네이티브 오픈소스 기술들을 추진하고 관리하는 단체입니다.
CNCF는 2015 년에 Linux Foundation 산하에 설립되어 첫 번째 프로젝트로 Kubernetes를 Google에서 기증하였습니다.

 

쿠버네티스 단점

  • 어렵다
    • 강력한 기능들을 제공하는 만큼 훨씬 많고 다양한 지식을 필요로 합니다.
    • 사용법도 다양하고 구조도 복잡하기 때문에 학습 비용을 고려할 필요가 있습니다.
  • 오버 엔지니어링
    • 소규모 프로젝트에서는 쿠버네티스로 컨테이너를 관리하는 것이 오히려 독이 될 수도 있습니다.
    • 따라서 소규모 프로젝트에서는 도커 스웜이나 ECS 같은 비교적 가벼운 도구를 사용할 것을 추천드립니다.

 

Kubernetes 구조

쿠버네티스는 마스터 노드(컨트롤 플레인)와 워커 노드로 구성되어있고 각각은 다른 구성요소를 지니고 있습니다.

마스터 노드

마스터 노드는 쿠버네티스 클러스터를 관리하고 클러스터의 기능을 실행합니다. 마스터 노드는 단일 혹은 여러대의 노드로 생성할 수 있으며 고가용성을 보장할 수 있는 여러 구성요소로 구성되어있습니다.

  • API Server
    • 쿠버네티스 클러스터의 API를 사용할 수 있도록 하는 컨트롤 플레인 컴포넌트입니다.
    • 클러스터로 온 요청이 유효한지 검증하고, API Server를 통해 다른 컴포넌트가 서로 필요한 정보를 주고받게 됩니다.
    • etcd에는 API Server만 접근할 수 있습니다.
  • etcd
    • 쿠버네티스에서 필요한 모든 데이터를 키-값 형태로 저장하는 데이터베이스 역할을 합니다.
    • etcd는 서버 하나당 1개의 프로세스만 사용가능합니다.
    • 따라서 보통 etcd를 여러 개 마스터 서버에 분산해서 실행해 안정성을 보장하도록 합니다.
  • Scheduler
    • 클러스터 안에서 자원 할당이 가능한 노드 중 알맞은 노드를 선택해서 새로운 파드(Pod)를 실행해주는 역할을 합니다.
  • Controller Manager
    • 쿠버네티스의 파드들을 관리하는 컨트롤러입니다.
    • 구성 요소 복제, 워커 노드 추적, 노드 장애 처리 등 클러스터 기능을 실행합니다.

워커 노드

워커 노드는 컨테이너화된 어플리케이션을 실행하는 시스템으로 서비스 실행, 모니터링을 제공합니다.

  • Kubelet
    • 클러스터 안에 있는 모든 워커 노드에서 실행되는 에이전트입니다.
    • 파드스펙(PodSpec) 설정을 주기적으로 전달받아서 파드 컨테이너의 실행을 직접적으로 관리하고 해당 컨테이너가 정상적으로 진행되는지 헬스 체크를 진행합니다.
    • 다만, 워커 노드 안에 있는 컨테이너라도 쿠버네티스를 통해 만들어지지 않은 컨테이너는 관리하지 않습니다.
  • Kube-proxy
    • 클러스터 안에서 생성되는 가상 네트워크의 동작을 관리하는 컴포넌트입니다.
    • 어플리케이션 구성 요소 간에 네트워크 트래픽을 분산시킵니다.

 

참고

Comments