ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [54일차] 쿠버네티스의 주요 컴포넌트
    교육/코드스테이츠 2023. 2. 13. 15:49

    https://zdnet.co.kr/view/?no=20220722100024

     

    쿠버네티스(Kubernetes, k8s)

    오픈소스로 만들어진 컨테이너 오케스트레이션 도구로 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링하는 등의 관리 기능을 제공한다. 각기 다른 환경(온프레미스 서버, VM, 클라우드)에 대응 가능하다

     

    orchestrate는 사전적 의미를 살펴보면 다음과 같다.

    to plan and organize something carefully and sometimes secretly in order to achieve a desired result

    즉 컨테이너 오케스트레이션 도구는, 수십~수백개의 컨테이너를 관리하고자 할 때 보다 더 잘 관리하기 위한 툴이다.

     

    언제 사용하면 안되나

    여러 Tier(단계)로 나뉘어지지 않은 모놀리식 아키텍처에서는 적합하지 않다.

    모놀리식 아키텍처는 먼저 마이크로서비스 분해 전략을 세우는 것이 우선이며 고작 서너 개에 불과한 컨테이너만을 다루려면 적합하지 않으며 docker-compose로도 충분하다.

     

    비교적 단순한 아키텍처에, 스케일링이 필요하지 않은 경우에는 적합하지 않다.

    트래픽이 증가하거나, 스케일링이 필요한 경우, 서버리스 서비스를 사용하면 다소 저렴한 가격에 관리형 서비스를 이용할 수 있으며, AWS 내에서도 오토 스케일링과 같은 관리형 서비스가 배포 환경에서 제공된다.

     

    쿠버네티스 workflow

    • 클러스터

    클러스터는 최소 하나 이상의 제어판(Control Plane) 컴포넌트와, 이것과 연결된 몇개의 워커 노드로 구성되어 있다.

     

    • 노드

    워커 노드는 kubelet이라는 프로세스가 돌아가고 있는데, kubelet은 다른 노드와 서로 통신하거나 컨테이너를 실행하는 등의 태스크를 실행할 수 있게 한다.

    • 파드

    쿠버네티스에서는 이러한 컨테이너(정확히는 컨테이너 그룹)와 컨테이너가 사용하는 볼륨, 그리고 컨테이너의 작동 정보를 특별히 파드(Pod)라는 이름으로 부른다.

     

    • Control Plane

    관리를 위해 필요한 프로세스들은 전부 제어판 컴포넌트에 있습니다. 제어판 컴포넌트는 클러스터가 잘 작동할 수 있게 돕습니다.

     

    • API서버

    API서버는 모든 클러스터 관리의 입구로써, 명령을 내릴 수 있는 관문이다. 실제로 쿠버네티스에서 제공되는 UICLI등에서 클러스터 관리를 위해 뭔가 명령을 내리면 API가 호출된다.

     

     

    • Controller manager

    클러스터에서 무슨 일이 발생하는지를 추적하는 역할을 한다. 예를 들어 컨테이너가 죽거나 재시작되었을 경우, 컨트롤러 매니저는 이를 알 수 있다.

     

    • 스케쥴러

    서버(노드) 리소스를 바탕으로 컨테이너(정확히는 pod)가 노드에 배치되게 만드는 역할을 담당한다. 새로 생성된 컨테이너를 찾아 노드에 할당한다

     

    • ETCD

    이는 Key-value 저장소인데, 클러스터 관리에 필요한 모든 데이터를 저장하는 공간이다. 인프라를 원하는 상태로 만들기 위해서는, 정상 상태에 대한 snapshot 및 관리에 필요한 메타데이터가 어딘가에 저장되어야 하는데, ETCD는 바로 이를 담당한다.

     

    파드(Pod)

    쿠버네티스의 배포 가능한 가장 작은 컴퓨팅 유닛으로. 그 자체로 하나의 논리적인 호스트이다.

    하나 이상의 애플리케이션 컨테이너, IP 주소, 볼륨과 같은 공유 스토리지를 포함할 수 잇다.

     

     

     

    디플로이먼트

    쿠버네티스에서는 사실 직접 사용자가 개별 파드를 만들 일이 많지 않다. 파드는 일시적이고, 언제나 삭제될 수 있음을 감안하고 만들기 때문이다. 예를 들어, 파드가 실행되는 공간인 노드가 만일 실패하는 경우, 그 안에서 실행되는 파드 역시 사용할 수 없게 된다.

     

    디플로이먼트는 파드를 업데이트하기 위한 선언적 명세로서, 파드를 원하는 개수만큼 실행시킬 수 있으며(레플리카셋, 즉 복제본 구성을 이용하여) , 업데이트 할 수 있다(제어판 Control Plane을 이용하여) .

     

    파드를 외부로 노출시키기

    서비스 리소스를 사용하면 파드에서 실행 중인 애플리케이션을 클러스터 외부에서 접근할 수 있다.

    쿠버네티스에서 서비스는 파드의 집합에 접근할 수 있는 정책을 정의하는 추상적 개념으로, 서비스 리소스가 정의된 YAML 파일에 selector라는 것을 이용해 서비스할 대상 타겟을 설정할 수 있다.

Designed by Tistory.