쿠버네티스

쿠버네티스 마이크로서비스 애플리케이션 이론

우잉~ 2024. 11. 18. 04:48

MicroServices Application에서의 마이크로서비스란 애플리케이션을 독립적인 여러 개의 서비스로 분리하여 개발하고 배포하는 것이다.

프론트엔드/백엔드/인메모리캐시/데이터베이스 등...의 서비스로 나누어서 특정 기능을 수행한다.

 

마이크로서비스 애플리케이션을 설계하는 것이 중요한 이유는 각 서비스가 독립적으로 움직이기 때문에 배포 및 확장, 유지보수를 편하게 할 수 있다.

 

각 서비스는 서로 다른 프로그래밍 언어나 데이터베이스를 사용할 수 있다! 왜??? → 독립적으로 움직이기 때문에 한 서비스가 잠깐 고장나도 전체 시스템에 엄청난 영향을 주지 않기 때문이다.

 

넷플릭스나 아마존과 같은 회사들도 수많은 마이크로서비스를 통해 플랫폼의 기능을 독립적으로 관리하고 있다.

 

[마이크로서비스 애플리케이션의 구조 예시]

1. 사용자는 강아지와 고양이를 선택할 수 있는 화면을 보게 된다.

2. 사용자가 강아지를 선택했을 경우, 이 데이터를 메모리에 저장하는 인메모리 데이터베이스에 저장한다.

3. 실제 투표 작업은 응용 프로그램에서 진행된다.

4. 투표 작업 결과를 데이터베이스에 업데이트한다.

5. 사용자는 모든 작업이 끝난 후 투표 결과 화면을 보게 된다.

마이크로서비스 애플리케이션 설계 예시

 

 

 

 

그렇다면 쿠버네티스에서는 어떻게 마이크로서비스 애플리케이션을 배포해야 할까??

 

쿠버네티스에서의 마이크로서비스 배포 최종 목표는 3가지이다.

1. 컨테이너 배포

2. 쿠버네티스 클러스터의 컨테이너로 배포

3. 컨테이너 간 연결을 활성화하여 서로 액세스할 수 있도록 함

 

이제 차례대로 

쿠버네티스 배포 순서

1. Pod 배포

쿠버네티스는 직접 컨테이너를 배포하는 것이 아니기 때문에 가장 먼저 Pod로 배포해야 한다.

그리고 어떤 서비스끼리 연결해야 하는지에 대한 계획을 잘 세워야 한다!

Pod 배포

 

 

2. 내부에서의 접근을 위한 서비스 생성하기

다른 서비스에 접근하는 방법은 IP를 사용할 수 있다.

근데 문제점!!! 포트가 재시작되면 포트의 IP가 바뀌어버릴 수도 있다.,,

이러한 문제를 해결하기 위해 서비스를 생성한다.

데이터베이스의 경우, 클러스터 외부에서 액세스할 수 없기 때문에 ClusterIP 유형이어야 한다.

내부 액세스를 위한 ClusterIP 생성

 

3. 외부에서의 접근을 위한 서비스 생성하기

외부 액세스를 위한 서비스는 NodePort이다.

사용자가 직접 pod에 접근하는 pod는 투표 진행 화면과 투표 결과 화면이다.

외부 액세스를 위한 NodePort 생성

 

* 투표 처리 작업 Pod에는 왜 서비스가 필요 없을까??

→ 다른 프로그램이나 외부 사용자가 액세스해야 할 기능이 실행되지 않기 때문이다.

 

결국 서비스는 응용 프로그램이 어떤 프로세스나 데이터베이스 서비스 혹은 웹 서비스를 갖고 있을 때만 요구되는 것을 파악할 수 있다.

 

4. 생성한 pod와 service를 Deployment로 배포하기

사실 단일 pod로 배포를 하는 것은... 일반적이지 않다. 관리가 굉장히 어려워짐!

그래서 제일 이상적인 접근법은 Deployment를 이용하는 것이다.

자동으로 복제본 세트를 생성하고, 업데이트와 롤백을 수행할 수 있기 때문이다.

 

최종 마이크로서비스 애플리케이션 구조

 

 

강아지 vs 고양이 투표 웹 애플리케이션 yaml 파일 작성 실습 코드

https://github.com/iamwooinge/exam-kubernetes/tree/main/voting-app

 

exam-kubernetes/voting-app at main · iamwooinge/exam-kubernetes

Contribute to iamwooinge/exam-kubernetes development by creating an account on GitHub.

github.com