컨테이너 오케스트레이션이란 무엇입니까?

hi·2023년 1월 22일
0

쿠버네티스

목록 보기
2/64
post-custom-banner

컨테이너 오케스트레이션이란 무엇입니까?

컨테이너 오케스트레이션은 컨테이너의 라이프사이클을 관리하는 체계입니다. 클랑드 네이티브 애플리케이션의 각 컨테이너들을 수동으로 관리하는 것은 불가능하다고 할 수 있습니다. 따라서 클라우드 네이티브 아키텍처에 컨테이너 오케스트레이션은 필수불가결한 요소입니다.


컨테이너 오케스트레이션의 핵심 기능

  • 자동화된 프로비저닝 (automatic provisioning)
    자동으로 컨테이너 인스턴스를 생성하고 배포합니다.

  • 고가용성 (hight availability)
    컨테이너가 실행 도중 중단될 경우 자동으로 컨테이너 인스턴스를 다시 생성합니다.

  • 수평 확장 (scaling)
    요구 조건에 따라 컨테이너 인스턴스 수를 늘리거나 줄여서 애플리케이션 크기를 조절합니다.

  • 자원 관리 (resource management)
    컨테이너에 적절한 자원을 할당해줍니다.

  • 서비스 인터페이스 (service interface) 및 부하 분산 (load balancing)
    컨테이너를 외부 시스템에서도 접근할 수 있도록 만들어주며 (게이트웨이) 시스템에 주어지는 부하를 컨테이너에 고루 분산합니다. (로드 밸런싱)

  • 기저 네트워크 추상화 (networking infrastructure abstraction)
    overlay 네트워크를 제공하여 컨테이너 간 통신을 가능하게 합니다.

  • 서비스 디스커버리 (service discovery)
    서비스 이름으로 서비스를 찾을 수 있는 기능을 제공합니다.

  • 컨트롤 플레인 (control plane)
    컨테이너 시스템을 관리하고 모니터링할 수 있는 시스템을 제공합니다.

  • 어피니티 (affinity)
    필요에 따라 컨테이너들을 가깝거나 멀게 배치함으로써 가용성 또는 목표 성능을 달성할 수 있도록 합니다.

  • 상태 모니터링 (health monitoring)
    오류나 실행 중단을 자동으로 탐지하고 스스로 복구할 수 있도록 만듭니다. (self-healing, health-check)

  • 롤링 업그레이드 (rolling upgrade)
    시스템을 중단하지 않고도 컨테이너들을 점진적으로 업그레이드할 수 있게 해줍니다.

  • 요소화 및 격리 (componentization and isolation)
    네임스페이스와 같은 논리적 구분 방법을 제공하여 여러 애플리케이션 도메인을 요소화하고 격리합니다.


쿠버네티스

2018년 쿠버네티스가 발표된 뒤 시간이 흐른 지금 쿠버네티스는 가장 인기있고 대중적인 컨테이너 오케스트레이션으로 자리잡았습니다. 쿠버네티스는 자동화된 배포, 스케일링, 장애 복구, 네트워크 등 컨테이너 관리에 필요한 수많은 기능들을 제공하여 컨테이너들을 쉽게 관리할 수 있는 추상화된 계층을 제공합니다. 쿠버네티스 환경에 올려진 애플리케이션들은 쿠버네티스를 지원하는 클라우드 서비스 또는 온-프레미스 데이터 센터에서 수정 없이 바로 실행 가능하며 이를 통해 애플리케이션에 이식성을 부여해줍니다.


쿠버네티스의 구성

쿠버네티스 클러스터는 실제 물리적 서버 또는 가상 머신들로 노드를 구성하며 이들 중 하나는 클러스터에 애플리케이션 인스턴스를 스케줄링하고 관리하는 '쿠버네티스 컨트롤 플레인 노드'가 나머지는 특정 애플리케이션 워크로드가 실행되는 환경인 워커 노드가 됩니다.

클러스터의 컨트롤 플레인 노드쿠버네티스 API 서버, kube-controller manager, 쿠버네티스 스케줄러, etcd로 구성이 되며 쿠버네티스 API 서버는 컨트롤 플레인 노드들과 워커 노드들 사이의 통신을 쿠버네티스 스케줄러는 각 워커 노드의 가용 자원과 정책에 따라 실행하고자 하는 특정 애플리케이션의 워크로드를 적정 노드에 지정하는 임무를 수행합니다.

클러스터의 각 워커 노드kubelet, kube-proxy, 파드로 구성되며 kubelet은 API 서버와 직접 통신해서 해야 할 일을 전달받고 현재 노드의 상태를 알려줍니다. 파드는 주어진 노드에서 실행되는 애플리케이션 실행 환경을 의미하는 가장 기본적인 배포 단위로 각 파드는 한 개 이상의 컨테이너를 실행할 수 있습니다. 각 파드는 쿠버네티스 클러스터 내에서 고유 IP 주소를 할당 받습니다.

이외에도 쿠버네티스틑 서비스, 디플로이먼트(Deployment), 레플리카셋(ReplicaSet) 과 같은 추상화 요소들을 가집니다. 서비스는 여러 파드를 하나의 네트웍 서비스로 묶어주며 이를 통해 여러 파드에 로드 밸런싱 작업을 가능하게 합니다. 레플리카셋은 애플리케이션에서 지정한 파드 수를 정의하고 관리합니다. 디플로이먼트는 애플리케이션에 대한 변경 사항을 처리하고 이를 레플리카셋 또는 파드에 반영합니다.

그리고 이 모든 종류의 쿠버네티스 객체는 YAML, Json 형태로 명세할 수 있으며 쿠버네티스 API 서버를 통해 쿠버네티스 컨트롤 플레인에 적용할 수 있습니다.



쿠버네티스 구성 자세히 알아보기

post-custom-banner

0개의 댓글