[쿠버네티스] Spring Cloud, Docker, MSA 프로젝트에 쿠버네티스를 어떻게 적용할까?
프로젝트에서 MSA 아키텍처를 직접 구성했지만, 쿠버네티스를 사용하지 않아 무중단 배포를 시도하며 어려움을 겪었습니다.
이에 쿠버네티스를 학습할 필요를 느꼈으며, 진행 중인 프로젝트에 쿠버네티스를 적용해보고 싶었습니다.
이 게시글은 쿠버네티스 처음 공부하며, 학습 내용들을 정리하기 위해 작성한 게시글입니다.
쿠버네티스
쿠버네티스는 컨테이너 오케스트레이션 툴로,
여러 대의 서버에 걸쳐 컨테이너화된 애플리케이션을 배포하고 관리할 수 있도록 도와주는 도구입니다.
따라서, 쿠버네티스는 도커를 사용한 컨테이너화된 애플리케이션을 배포하고 관리하는 데 사용됩니다.
클러스터
쿠버네티스 클러스터는 마스터 노드와 워커 노드로 구성됩니다.
마스터 노드는 쿠버네티스 클러스터의 제어센터로, 쿠버네티스의 모든 컴포넌트가 실행됩니다.
워커 노드는 컨테이너를 실행하는 데 사용됩니다.
따라서, 컨테이너는 워커 노드에서 실행되며, 마스터 노드는 워커 노드에서 실행되는 컨테이너를 관리합니다.
쿠버네티스 클러스터에는 도커 이미지가 직접 포함되는 것이 아니라,
도커 이미지를 기반으로 만들어진 컨테이너를 쿠버네티스가 관리합니다.
도커 이미지는 쿠버네티스에서 사용할 수 있는 도커 레지스트리에 업로드된 후,쿠버네티스 클러스터에서 사용됩니다.
쿠버네티스 클러스터 구성 단계
- 가용성 영역 결정
- 쿠버네티스 클러스터를 구성할 가용성 영역을 결정합니다.
- 클라우드 서비스를 사용하는 경우에는 해당 클라우드 서비스의 콘솔을 사용하여 가용성 영역을 결정할 수 있습니다.
- 마스터 노드 생성
- 마스터 노드를 생성합니다.
- 마스터 노드에는 API 서버, etcd, 컨트롤 플레인, 스케줄러 등의 컴포넌트가 포함됩니다.
- 마스터 노드를 생성하는 방법은 kubeadm, kops, Rancher 등의 도구를 사용할 수 있습니다.
- 워커 노드 생성
- 워커 노드를 생성합니다.
- 워커 노드에는 kubelet, kube-proxy, 컨테이너 런타임 등의 컴포넌트가 포함됩니다.
- 워커 노드를 생성하는 방법은 kubeadm, kops, Rancher 등의 도구를 사용할 수 있습니다.
- 네트워크 구성
- 쿠버네티스 클러스터 내부와 외부의 네트워크 구성을 설정합니다.
- 쿠버네티스는 Pod 간의 통신과 외부와의 통신을 위한 네트워크 구성이 필요합니다.
- 네트워크 구성을 위한 도구로는 Calico, Flannel, Weave Net 등이 있습니다.
- 노드 등록
- 마스터 노드에서 워커 노드를 등록합니다.
- 등록된 워커 노드는 쿠버네티스 클러스터 내부에서 사용할 수 있습니다.
- 쿠버네티스 애플리케이션 설치
- 쿠버네티스 애플리케이션 설치를 위한 Helm 등의 도구를 사용하여 애플리케이션을 설치합니다.
이 게시글을 작성하고 있는 현재 진행중인 프로젝트에서는 Docker에 Jenkins, SpringBoot를 올려 사용 중이며,
MSA 아키텍처를 적용하고자 여러 개의 마이크로 서비스들이 컨테이너로 올라가 있는 형태로 구성되어 있습니다.
또한, 개발/운영 서버로 나누어 구성했으며 그로인해 도커에는 약 20개 가량의 컨테이너가 존재합니다.
현 상황에서 쿠버네티스를 적용 할 방법은 다음과 같습니다.
1.
쿠버네티스 클러스터를 구성한 후에는 먼저 각각의 마이크로서비스를 도커 이미지로 빌드하고,
쿠버네티스에서 사용할 수 있는 도커 레지스트리에 업로드해야 합니다.
2.
각각의 마이크로서비스를 쿠버네티스에서 실행할 수 있는 형태로 변환해야 합니다.
이를 위해서는 쿠버네티스의 리소스 타입인 Deployment와 Service를 사용할 수 있습니다.
Deployment는 애플리케이션의 인스턴스를 관리하는 리소스 타입이며, Service는 인스턴스에 접근하기 위한 로드 밸런서 역할을 합니다.
3.
Spring Cloud의 API Gateway를 쿠버네티스에서 실행할 수 있는 형태로 변환해야 합니다.
이를 위해서는 API Gateway를 포함한 모든 마이크로서비스를 쿠버네티스에서 실행해야 합니다.
API Gateway를 쿠버네티스에서 실행할 경우에는 Kubernetes Ingress 리소스를 사용하면 됩니다.
4.
Jenkins를 쿠버네티스에서 실행해야 합니다.
Jenkins를 쿠버네티스에서 실행하는 경우에는 Jenkins의 Master와 Agent를 쿠버네티스에서 실행할 수 있습니다.
이를 위해서는 Kubernetes Pod 및 Kubernetes ConfigMap 등의 리소스를 사용할 수 있습니다.
쿠버네티스를 사용하면 애플리케이션을 더욱 쉽게 배포하고 관리할 수 있으며, 확장성과 가용성도 높일 수 있습니다.