ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kubernetes] Kubernetes 탄생배경, 구성요소 이해, 동작 과정 알아보기
    CI-CD/Kubernetes 2023. 1. 15. 12:52
    반응형

    Kubernetes란?

    쿠버네티스는 컨테이너 오케스트레이션 툴이다. 쿠버네티스는 클러스터로 node를 여러개 묶어서 구성할 수 있으며, 이곳에 컨테이너를 몇개를 생성할 것인지, 생성한 컨테이너를 어떻게 유지보수 할 것인지, 컨테이너들은 어떻게 연동 할 것인지를 편리하게 구성 및 조작 할 수 있다.

     

    Kubernetes 탄생 배경

    그럼 쿠버네티스는 왜 탄생하게 되었고 현대에 꼭 많이 사용하는 툴 이 되었을까? 먼저 개발을 진행한 내용을 배포 할 때 예전에는 하나의 웹 서버와 하나의 DB로 구성된 모놀리식으로 구성하였다. 하지만, 현대로 오면서 서버 운영의 확장성과 유동성을 제공하기 위해서 MSA 아키텍쳐의 필요성을 느끼게 되었고, 서버도 분리 DB도 분리하여 관리하게 되었다. 하지만, 이렇게 관리하게 되면 배포와 트래픽 제어는 어떻게 하여야 될까?

    https://kubernetes.io/ko/docs/concepts/overview/

    아래의 그림 처럼 6개의 서버를 MSA아키텍쳐로 구성하였다고 가정해보자 그럼 이것을 컨테이너화 하지 않고 사람의 힘으로 배포 했다고 하면, 얼마나 트래픽이 일어날지 한 컴퓨터에 어느정도 크기의 리소스를 사용해야할지 사람이 계산하고 사용할 수가 없다. 어느 컴퓨터는 똑같은 애플리케이션을 배포하여도 그 컴퓨터의 리소스를 다 잡아 먹을 수도 있고, 다른 컴퓨터는 리소스를 하나도 사용하지 않고 가만히 있을 수 있기 때문이다.

    이렇게 리소스 관리, 배포, 로드밸런싱까지 사람이 수작업을 하는 것이 아니라, 쿠버네티스가 직접 컨테이너 단위로 조작을 해주어 트래픽이나 리소스 관리를 자동적으로 해준다는 것이다.

     

    Kubernetes 특징

    쿠버네티스는 다음과 같은 특징을 가진다.

    • 서비스 디스커버리와 로드 밸런싱 - 쿠버네티스 DNS이름을 사용하거나 자체 IP주소를 사용하여 컨테이너를 노출하여, 쿠버네티스 클러스터 안에서 트래픽 제어를 가능하게 해준다
    • 스토리지 오케스트레이션 - 쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 할 수 있다.
    • 자동화된 롤아웃과 롤백 - 배포된 컨테이너를 원하는 상태로 서술할 수 있으며, 서술한 내용으로 배포나 설정을 할 수 있다.
    • 자동화된 빈 패킹 - 쿠버네티스는 컨테이너를 노드에 맞춰 리소스를 가장 잘 사용하게 조절한다,
    • 자동화된 복구 - 쿠버네티스는 실패한 컨테이너를 다시 시작하고, 교체하며, 사용자 정의 상태 검사에 응답하지 않는 컨테이너는 죽이고, 컨테이너를 자동으로 관리한다.
    • 시크릿과 구성 관리 - OAuth 및 SSH 키와 같은 중요한 정보를 저장하고 관리한다.

     

    Kubernetes Architecture

    • Developer - 개발자나 Kubernetes 관리자를 칭한다. Kubectl을 이용하여 클러스터에 명령어를 날려 관리 한다.
    • Master Node - api server를 가지고 있어, 명령어가 들어오면 그것에 맞게 컨트롤 플랜, 스케쥴링 및 상태를 etcd에 저장하고, 이 내용을 Node들에게 작업을 전달한다.
    • Woker Node - 작업자 노드를 칭한다. Kubelet이 api server에서 명령을 받아 k8s의 object들을 조작한다.
    • User-  user는 워커노드에 붙어서 서비스를 제공 받는다. user가 원하는 서비스(컨테이너)에 접근 할 때는 Kube-Proxy를 이용하여 네트워킹이 되어 서비스를 찾아 갈 수 있도록 제공된다.

    출처 - https://www.clickittech.com/devops/kubernetes-architecture-diagram/

    Master Node(=Control Plane)

    https://www.clickittech.com/devops/kubernetes-architecture-diagram/

    • Kube-apiserver - 개발자가 kubectl 명령어를 날리면 api server가 먼저 받아 어떤 동작을 처리할지 정한다. 또한, worker노드에 etcd에 연동하여 Kubelet에 명령을 호출하고 호출한 명령의 처리가 완료되면 개발자에게 다시 결과값을 반환해주는 역할을 한다.
    • ETCD - key-value 저장소로 서비스 디스커버리 역할을 하며 클러스터에 배포된 애플리케이션 실행 정보를 저장 하는 역할을 한다.
    • Controller - api-server에 명령어가 들어오면 Controller가 명령어를 변환해서 다시 어떤 행위를 해야하는지 api-server에 알려준다. 그리고 이 정보를 해석하여 etcd에 key-value를 생성하거나 업데이트 한다.
    • Scheduler - etcd와 연동을 하여 Controller에서 정의한 명령을 업데이트 하지 않은 Pod나 Deploy등을 읽어들여 수행할 로직을 scheduling을 한다. 그리고 그 scheduling에 맡게 실제도 worker노드에서 실행하고 완료 되었다면 etcd에 다시 상태를 업데이트 한다.

     

    Worker Node

    https://www.clickittech.com/devops/kubernetes-architecture-diagram/

    • Kubelet - master node에 Api server에서 명령을 받아 container runtime에 생성 및 실행의 명령을 날리거나 컨테이너의 헬스체크를 담당한다.
    • Kube-Proxy - worker Node에 올라간 컨테이는 자체적으로 ip를 할당하여 보관하는데 이 내용을 ip table형태로 가지고 있으며, User가 접근을 한다고 하면 어떤 container에 접근을 해야하는지 변형을 해준다. net-gateway같은 역할을 한다고 보면된다.
    • Pod - kubernetes에서 container를 관리하는 단위이다. 즉, 컨테이너의 묶음이라고 보면된다.

     

    Kubernetes동작과정

    https://www.clickittech.com/devops/kubernetes-architecture-diagram/

     

     

     

     

     

     

     

     

     

    참고문헌

    https://kubernetes.io/ko/docs/concepts/overview/

    https://www.clickittech.com/devops/kubernetes-architecture-diagram/

    반응형

    댓글

Designed by Tistory.