Study Note

쿠버네티스 아키텍처 - [Kubernetes, k8s] 본문

Kubernetes/Kubernetes 소개

쿠버네티스 아키텍처 - [Kubernetes, k8s]

moreLearn 2021. 7. 15. 21:36

쿠버네티스는 그림과 같은 구조를 가지고 있습니다.

쿠버네티스 구조

마스터

마스터는 쿠버네티스 클러스터를 구성하는 핵심 컴포넌트들을 가지고 있습니다. 마스터는 단일 서버로 구성할 수 있지만 고가용성을 위해 여러 버서를 묶어서 클러스터 마스터로 구축할 수도 있습니다.

  • kube-apiserver(API 서버) : 마스터로 전달되는 모든 요청을 받아 드리는 REST API 서버
  • etcd(저장소) : 클러스터의 모든 메타 정보를 저장하는 저장소
  • kube-scheduler(컨테이너 스케줄러) : 사용자의 요청에 따라 컨테이너를 워커 노드에 배치하는 스케줄러
  • kube-controller-manager(컨트롤러 집합) : 현재 상태와 바라는 상태를 지속적으로 확인하며 특정 이벤트에 따라 특정 동작을 수행하는 컨트롤러
  • cloud-controller-namager(클라우드 컨트롤러) : 클라우드 플랫폼(AWS, GCP, Azure)에 특화된 리소스를 제어하는 클라우드 컨트롤러

노드

워커 노드는 다음과 같이 구성되어 있습니다.

  • kubelet : 마스터의 명령에 따라 컨테이너의 라이프 사이클을 관리하는 노드 관리자
  • kube-proxy : 컨테이너의 네트워킹을 책임지는 프록시
  • container runtime : 실제 컨테이너를 실행하는 컨테이너 실행 환경

장점

  • 실행 환경 고립화
    쿠버네티스의 모든 프로세스는 컨터이너로 실행되기 때문에 사용자는 각 서버의 실행 환경에 대해서 걱정하지 않고 서비스를 운영할 수 있습니다.
  • 리소스 관리
    쿠버네티스 자체적으로 각 서버의 리소스를 체계적으로 관리할 수 있는 기능(리소스 사용량 모니터링, 리소스 사용량 제한 등)을 제공합니다.
  • 스케줄링
    쿠버네티스 내장 스케줄러가 최적의 노드를 찾아 컨테이너를 배치하기 때문에 스케줄링이 편리합니다. 필요에 따라 사용자가 직접 특정 노드로 컨테이너를 할당할 수 있게 상세 스케줄링 정책을 설정할 수 있습니다.
  • 프로세스 관리
    쿠버네티스는 클러스터는 마스터 API 서버에 요청하면 프로세스 조회, 프로세스 기능 제어가 가능하기 때문에 클러스터 레벨에서 프로세스 관리가 편합니다.
  • 통합 설정 관리
    쿠버네티스를 이용해 중앙에서 통합하여 설정값을 관리하여 특정 서버와의 종속성 없이 어느 서버에서나 프로세스를 정상적으로 실행 할 수 있습니다.
  • 장애 대응
    작게는 리소스 관리 기능을 통해 특정 프로세스의 메모리 고갈 이슈를 다른 서버에게로 전의시키지 않을 수 있으며 크게는 문제가 되는 컨테이너를 다른 서버로 교체할 수 있습니다.. 
  • 자동 확장
    프로비저닝한 리소스가 부족하여 새로운 리소스가 필요한 경우에도 자동확장 기능을 설정하여 해결할 수 있습니다.
  • 하이브리드 클라우드 운영
    쿠버네티스는 온프레미스 환경이나 클라우드 환경에서 동일한 기술 스택을 이용해 시스템을 운영할 수 있습니다.
  • 자가 치유
    쿠버네티스는 컨테이너가 죽더라도 바라는 상태(Desired State)를 확인해서 컨터이너를 다시 실행할 수 있습니다.
  • 데이터 스토리지 관리
    쿠버네티스는 다양한 데이터 저장소(로컬 스토리지, 클라우드에서 제공하는 저장소, NFS 같은 네트워크 스토리지)를 자동으로 관리할 수 있습니다.
  • 배포 자동화
    바라는 상태(Desired State)를 통해 배포 되거나, 신규 버전 배포, 이전 버전 롤백 등의 작업에서 쿠버네티스는 자동으로 배포합니다.