Spring Cloud 기반 MSA 환경을 쿠버네티스로 전환하기
[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)란 컨테이너 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들로 이루어진 집합을 의미한다.
쿠버네티스
쿠버네티스는 컨테이너 오케스트레이션 툴로,
여러 대의 서버에 걸쳐 컨테이너화된 애플리케이션을 배포하고 관리할 수 있도록 도와주는 도구입니다.
따라서, 쿠버네티스는 도커를 사용한 컨테이너화된 애플리케이션을 배포하고 관리하는 데 사용됩니다.
클러스터
쿠버네티스 클러스터는 마스터 노드와 워커 노드로 구성됩니다.
마스터 노드는 쿠버네티스 클러스터의 제어센터로, 쿠버네티스의 모든 컴포넌트가 실행됩니다.
워커 노드는 컨테이너를 실행하는 데 사용됩니다.
따라서, 컨테이너는 워커 노드에서 실행되며, 마스터 노드는 워커 노드에서 실행되는 컨테이너를 관리합니다
쿠버네티스 클러스터에는 도커 이미지가 직접 포함되는 것이 아니라,
도커 이미지를 기반으로 만들어진 컨테이너를 쿠버네티스가 관리합니다.
도커 이미지는 쿠버네티스에서 사용할 수 있는 도커 레지스트리에 업로드된 후, 쿠버네티스 클러스터에서 사용됩니다.
쿠버네티스 클러스터 구성 단계
- 가용성 영역 결정
- 쿠버네티스 클러스터를 구성할 가용성 영역을 결정합니다.
- 클라우드 서비스를 사용하는 경우에는 해당 클라우드 서비스의 콘솔을 사용하여 가용성 영역을 결정할 수 있습니다.
- 마스터 노드 생성
- 마스터 노드를 생성합니다.
- 마스터 노드에는 API 서버, etcd, 컨트롤 플레인, 스케줄러 등의 컴포넌트가 포함됩니다.
- 마스터 노드를 생성하는 방법은 kubeadm, kops, Rancher 등의 도구를 사용할 수 있습니다.
- 워커 노드 생성
- 워커 노드를 생성합니다.
- 워커 노드에는 kubelet, kube-proxy, 컨테이너 런타임 등의 컴포넌트가 포함됩니다.
- 워커 노드를 생성하는 방법은 kubeadm, kops, Rancher 등의 도구를 사용할 수 있습니다.
- 네트워크 구성
- 쿠버네티스 클러스터 내부와 외부의 네트워크 구성을 설정합니다.
- 쿠버네티스는 Pod 간의 통신과 외부와의 통신을 위한 네트워크 구성이 필요합니다.
- 네트워크 구성을 위한 도구로는 Calico, Flannel, Weave Net 등이 있습니다.
- 노드 등록
- 마스터 노드에서 워커 노드를 등록합니다.
- 등록된 워커 노드는 쿠버네티스 클러스터 내부에서 사용할 수 있습니다.
- 쿠버네티스 애플리케이션 설치
- 쿠버네티스 애플리케이션 설치를 위한 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에서 제공하는 여러 인터페이스 중 몇가지에 대해 쿠버네티스를 활용한 구현체를 제공