Rad Blog

Archive

kubernetes 소개

2023-06-14 kubernetes xfrnk2

쿠버네티스(Kubernetes)란?

쿠버네티스(Kubernetes) 는 컨테이너화 된 애플리케이션의 대규모 배포, 스케일링 및 관리를 간편하게 만들어주는 오픈 소스 기반 컨테이너 오케스트레이션(Container Orchestration) 도구 다.

컨테이너 오케스트레이션

“컨테이너화 된 애플리케이션에 대한,

자동화된 설정, 관리 및 제어 체계”

  • Kubernetes 및 OpenShift 다음으로 Docker Swarm이 업계에서 더 많이 사용되고 있다. image
  • Kubernetes 외 오케스트레이션 도구 : Docker Swarm, ,Open Shift, Mesos, Rancher, Amazon ECS, Apache Marathon, Nomad, Kontena, Minikube

쿠버네티스(Kubernetes)의 특징

  • 쿠버네티스는 과거 15년이 넘는 시간 동안 구글 내부에서 프로덕션 규모의 워크로드를 운영하는 수단으로 사용되었다.

  • 글로벌 3대 클라우드사(AWS, Azure, GCP) 뿐만 아니라 RedHat, VMWare 등에서도 자사 솔루션에 최적화된 버전의 쿠버네티스 플랫폼을 제공하고 있다.

  • 마이크로서비스 아키텍처(MSA; Microservice Architecture)에서는 프로젝트에 포함된 세부 기능들이 작은 서비스 단위로 분리되어 구축된다. 따라서 동시에 수백, 수천 개의 컨테이너를 배포하고 관리해야 하는 상황과 대응해야하며, 다음과 같은 4가지 이슈가 있다.

    1. 배포 관리 : 어떤 컨테이너를 어느 호스트에 배치하여 구동시킬 것인가? 각 호스트가 가진 한정된 리소스에 맞춰 어떻게 최적의 스케줄링을 구현할 것인가? 어떻게 하면 이러한 배포 상태를 최소한의 노력으로 유지 관리할 수 있을 것인가?
    2. 제어 및 모니터링 : 구동 중인 각 컨테이너들의 상태를 어떻게 추적하고 관리할 것인가?
    3. 스케일링 : 수시로 변화하는 운영 상황과 사용량 규모에 어떻게 대응할 것인가?
    4. 네트워킹 : 이렇게 운영되는 인스턴스 및 컨테이너들을 어떻게 상호 연결할 것인가?

쿠버네티스(Kubernetes)의 핵심 설계 사상

1. 선언적 구성 기반의 배포 환경

  • k8s에서는 동작을 지시하는 개념(예: 레플리카를 5개 만들어라)보다는 원하는 상태를 선언하는 개념(예: 내 호스트의 레플리카를 항상 5개로 유지하라)을 주로 사용한다.
  • 원하는 상태(Desired state)와 현재의 상태(Current state)가 상호 일치하는지를 지속적으로 체크하고 업데이트한다. image (이미지 출처 : Leverage)

2.기능 단위의 분산

  • 쿠버네티스에서는 각각의 기능들이 개별적인 구성 요소로서 독립적으로 분산되어 있다.
  • 쿠버네티스는 내부 요소들의 상태 관리를 위해 컨트롤러를 이용한다.
  • 노드(Node), 레플리카셋(ReplicaSet), 디플로이먼트(Deployment), 네임스페이스(Namespace) 등 클러스터를 구성하는 주요 요소들이 모두 컨트롤러(Controller)로 구성되어 있으며, Kube Controller Manager안에 패키징 되어 있다.

image (이미지 출처: iximiuz.com)

3. 클러스터 단위 중앙 제어

  • 쿠버네티스에서는 전체 물리 리소스를 클러스터 단위로 추상화하여 관리한다. 클러스터 내부에는 클러스터의 구성 요소들에 대해 제어 권한을 가진 컨트롤 플레인(Control Plane) 역할의 마스터 노드(Master Node)를 두게 되며, 관리자는 이 마스터 노드를 이용하여 클러스터 전체를 제어한다.

image (이미지 출처: Kubernetes Documentation)

4. 동적 그룹화

  • 쿠버네티스의 구성 요소들에는 쿼리 가능한 레이블(Label)과 메타데이터용 어노테이션(Annotation)에 임의로 키-값 쌍을 삽입할 수 있다.
  • 관리자는 selector를 이용해서 레이블 기준으로 구성 요소들을 유연하게 관리할 수 있고, 어노테이션에 기재된 내용을 참고하여 해당 요소의 특징적인 내역을 추적할 수 있다.

image (이미지 출처 : K21Academy)

5. API 기반 상호작용

  • 쿠버네티스 요소들이 서로 직접 접근 불가, Kubernetes API server(kube-apiserver)를 통해서만 상호 접근이 가능한 구조를 가진다.

image (이미지 출처: Sysdig)

Reference

comments powered by Disqus