ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kubernetes] 쿠버네티스란
    Kubernetes 2022. 1. 10. 22:27
    728x90

    Kubernetes 는 구글이 출시한 오픈소스 프로젝트로, 컨테이너화된 애플리케이션을 쉽게 배포하고 관리할 수 있게 해주는 소프트웨어 시스템이다. 컨테이너 기반답게 동일한 서버 내의 다른 애플리케이션에게 영향을 미치지 않는다.

    쿠버네티스를 활용하면 인프라를 추상화하여 개발, 배포, 관리를 단순화시킬 수 있다.

    시스템

    쿠버네티스 시스템은 마스터 노드와 여러 워커 노드로 구성된다.

    개발자가 애플리케이션 메니페스트를 마스터에 게시하면 쿠버네티스는 해당 애플리케이션을 워커 노드 클러스터에 배포한다.

    마스터 노드 : 쿠버네티스 시스템을 제어하고 관리하는 쿠버네티스 컨트롤 플레인을 실행

    워커 노드 : 실제 배포되는 컨테이너 애플리케이션을 실행

    클러스터 아키텍처

    컨트롤 플레인(마스터 노드)

    클러스터를 제어하고 작동시킨다.

    구성 요소

    • Kubernetes API 서버 : 사용자, 컨트롤 플레인 구성 요소와 통신
    • 스케줄러 : 애플리케이션의 배포를 담당
    • 컨트롤러 매니저 : 구성 요소 복제본, 워커 노드 추적, 노드 장애 처리 등 클러스터단의 기능을 수행
    • Etcd : 클러스터 구성을 지속적으로 저장하는 신뢰할 수 있는 분산 데이터 저장소

    노드(워커 노드)

    컨테이너화 된 애플리케이션을 실행하는 시스템이다. 노드 개념이 너무 추상적이라 와닿지 않는다면 노드 -> 컴퓨터로 치환해서 읽으면 한 층 이해가 쉽다.

    구성요소

    • 컨테이너 런타임 : 예) Docker
    • Kubelet : API 서버와 통신
    • Kube-proxy : 애플리케이션 구성 요소 간에 네트워크 트래픽을 로드밸런싱

    쿠버네티스에서 애플리케이션 실행하는 과정

    • 애플리케이션 컨테이너로 패키징
    • 패키징한 이미지를 레지스트리에 푸시
    • 쿠버네티스 API 서버에 애플리케이션 디스크립션을 게시

    쿠버네티스는 애플리케이션 실행 이후에도 배포 상태가 사용자가 제공한 디스크립션과 일치하는지 지속적으로 확인한다. 애플리케이션이 에러와 같은 이유로 응답을 중지하면 쿠버네티스가 자동으로 재시작시킨다.

    워커 노드 전체가 종료되거나 액세스할 수 없게 되면 쿠버네티스는 이 노드에서 실행 중인 모든 컨테이너의 노드를 새로 스케줄링하고, 실행한다.

    스케일링

    애플리케이션의 복제본 수를 동적으로 관리할 수 있다. 개발자가 직접 지정할 수도 있고, 리소스 사용량에 따라 쿠버네티스가 자동으로 조정하도록 할 수도 있다.

    애플리케이션에 접근

    컨테이너 애플리케이션에 접근하고 통신하는건 좋은데 쿠버네티스가 애플리케이션의 노드 위치를 바꾸는 경우도 있다. (노드 자체가 죽는 경우) 이를 위해서 쿠버네티스는 서비스 개념을 도입한다. 쿠버네티스에게 서비스와 그에 소속되는 컨테이너를 알려주면 서비스는 고정 IP 를 할당받는다. (컨테이너는 노드가 바뀌면 새로운 IP 를 할당 받음) 애플리케이션 간 통신은 서비스로 이루어지므로 컨테이너가 다른 노드로 이동해도 통신하는데에는 아무런 문제가 없다. kube-proxy 는 서비스 연결에 대해서 로드밸런싱을 제공한다.

     

    댓글

Designed by Tistory.