공부/Server

Spring Cloud 기반 MSA 환경을 쿠버네티스로 전환하기

sandbackend 2023. 5. 26. 00:46

[NHN FORWARD 22] Spring Cloud 기반 MSA 환경을 쿠버네티스로 전환하기 - YouTube

-영상을 보며 정리한 블로그 내용입니다.


개요

VM 환경에서 Spring Cloud 및 컨테이너 기반 MSA 환경을 운영하는데 여러가지 어려움이 있습니다. MSA 환경이 커지면서 컨테이너 기반 애플리케이션을 유연하게 스케쥴링하고, 스케일링 (scale-up & scale cout)하며 장애가 생긴 애플리케이션을 자동으로 복구시키는 등 컨테이너 애플리케이션을 관리하는 방식이 필요한데, 이를 직접 구축하고 관리하는 것은 어렵습니다.

그래서 VM 환경에서 Spring Cloud 및 컨테이너 기반 MSA 환경을 쿠버네티스로 전환하기로 합니다.

 

VM 환경에서 Spring Cloud 및 컨테이너 기반 MSA 환경을 쿠버네티스로 어떻게 전환하였으며, 전환하면서 생긴 고민 및 해결방안에 대해서 공유합니다.


쿠버네티스 아키텍처에서 클러스터(Cluster) 컨테이너 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들로 이루어진 집합을 의미한다.

쿠버네티스

쿠버네티스는 컨테이너 오케스트레이션 툴로,

여러 대의 서버에 걸쳐 컨테이너화된 애플리케이션을 배포하고 관리할 수 있도록 도와주는 도구입니다.

따라서, 쿠버네티스는 도커를 사용한 컨테이너화된 애플리케이션을 배포하고 관리하는 데 사용됩니다.

 

클러스터

쿠버네티스 클러스터는 마스터 노드와 워커 노드로 구성됩니다.

마스터 노드는 쿠버네티스 클러스터의 제어센터로, 쿠버네티스의 모든 컴포넌트가 실행됩니다.

워커 노드는 컨테이너를 실행하는 데 사용됩니다.

따라서, 컨테이너는 워커 노드에서 실행되며, 마스터 노드는 워커 노드에서 실행되는 컨테이너를 관리합니다

 

쿠버네티스 클러스터에는 도커 이미지가 직접 포함되는 것이 아니라,
도커 이미지를 기반으로 만들어진 컨테이너를 쿠버네티스가 관리합니다.
도커 이미지는 쿠버네티스에서 사용할 수 있는 도커 레지스트리에 업로드된 후, 쿠버네티스 클러스터에서 사용됩니다.

 

쿠버네티스 클러스터 구성 단계

  1. 가용성 영역 결정
    • 쿠버네티스 클러스터를 구성할 가용성 영역을 결정합니다.
    • 클라우드 서비스를 사용하는 경우에는 해당 클라우드 서비스의 콘솔을 사용하여 가용성 영역을 결정할 수 있습니다.
  2. 마스터 노드 생성
    • 마스터 노드를 생성합니다.
    • 마스터 노드에는 API 서버, etcd, 컨트롤 플레인, 스케줄러 등의 컴포넌트가 포함됩니다.
    • 마스터 노드를 생성하는 방법은 kubeadm, kops, Rancher 등의 도구를 사용할 수 있습니다.
  3. 워커 노드 생성
    • 워커 노드를 생성합니다.
    • 워커 노드에는 kubelet, kube-proxy, 컨테이너 런타임 등의 컴포넌트가 포함됩니다.
    • 워커 노드를 생성하는 방법은 kubeadm, kops, Rancher 등의 도구를 사용할 수 있습니다.
  4. 네트워크 구성
    • 쿠버네티스 클러스터 내부와 외부의 네트워크 구성을 설정합니다.
    • 쿠버네티스는 Pod 간의 통신과 외부와의 통신을 위한 네트워크 구성이 필요합니다.
    • 네트워크 구성을 위한 도구로는 Calico, Flannel, Weave Net 등이 있습니다.
  5. 노드 등록
    • 마스터 노드에서 워커 노드를 등록합니다.
    • 등록된 워커 노드는 쿠버네티스 클러스터 내부에서 사용할 수 있습니다.
  6. 쿠버네티스 애플리케이션 설치
    • 쿠버네티스 애플리케이션 설치를 위한 Helm 등의 도구를 사용하여 애플리케이션을 설치합니다.

 


 

Spring Cloud Gateway

  • Spring Framwork 5 기반
  • Host & Path 기반 L7 라우팅 지원
  • Custom Filter 구현 가능
  • Path Rewrite 기능 제공

API Gateway

  • Ingress vs Spring Cloud Gateway

Spring Cloud Kubernetes

  • Spring Cloud에서 제공하는 여러 인터페이스 중 몇가지에 대해 쿠버네티스를 활용한 구현체를 제공