DevOps/K8S

[Kubernetes] GKE 클러스터에서 톰캣 컨테이너 배포 및 외부접속하기

IT록흐 2023. 9. 21. 19:02
반응형

 

 

[Kubernetes] 클러스터 구성하기(1) - GKE 클러스터

구글에서 제공하는 쿠버네티스 엔진(Google Kubernetes Engine)으로 단순한 클러스터를 구성해보자. Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com 1. Kubernetes Engine 클러

lordofkangs.tistory.com

 

 

지난 포스팅에서 구글 쿠버네티스 엔진(GKE)에서 제공하는 클러스터를 만들어 보았다. 이번 포스팅에서는 GKE가 관리하는 클러스터가 어떤 원리로 동작하는지 알아보겠다.

 

 

 

쿠버네티스는 아키텍처가 로컬개발머신(ex. 클라우드쉘)으로 마스터노드에 명령어( kubectl )를 보내면 마스터노드는 워커노드에 명령을 보내어 워커노드가 가진 파드를 관리하는 원리로 동작한다. 파드 안에는 컨테이너가 있는데, 보통 하나의 파드에 하나의 컨테이너를 실행되므로 파드를 컨테이너로 생각하면 정답은 아니지만 이해하기가 쉽다. 

 

GKE는 마스터노드를 직접 관리한다.

 

아키텍처는 마스터노드에 접속할 수 없고 클라우드쉘로만 대화가 가능하다. GKE가 마스터노드를 직접 관리하므로써 도커설정이나 네트워크 설정, 보안 설정 등이 자동화되었다. 아키텍처는 그저 웹페이지에서 원하는 스펙을 선택하여 클러스터를 생성하면 된다. 

 

그럼 GKE가 제공하는 클러스터 환경에서

톰캣 컨테이너를 워커노드에 배포하고 포트포워딩하여 외부에서 접근가능하도록 구성해보자. 

 

 

1) 톰캣 컨테이너 5개 생성하여 워커노드에 배포하기 ( deploy )

 

> kubectl create deploy tc --image=consol/tomcat-7.0 --replicas=5

 

 kubectl create deploy [컨테이너명] --image=[이미지명] --replicas=[컨테이너수]

 

마스터 노드는 이미지를 도커허브에서 가져와 빌드하여 컨테이너를 생성할 수 있도록 도커 설정이 되어있다. GKE가 자동으로 설정하므로 우리가 따로 도커 설정을 할 필요는 없다.  --replicas 옵션에 생성할 컨테이너 수를 설정하면 컨테이너가 생성되어 3개의 워커노드에 배포된다.

 

> kubectl get pods -o wide

 

dwcf 워커노드 - 컨테이너 1개

1d0m 워커노드 - 컨테이너 2개

6nwt 워커노드 - 컨테이너 2개

 

위 명령어를 수행하면 배포된 워커노드의 정보를 알 수 있다. 

 

 

2) 컨테이너 외부로 노출시키기 ( expose )

 

> kubectl expose deploy tc --type=LoadBalancer --port 80 --target-port=8080

 

외부에서 컨테이너로 접근하려면 외부에 IP와 포트번호를 노출해야 한다. 

 

GKE는 로드밸런서를 제공한다. type 설정은 LoadBalancer로 하고 LoadBalancer의 80포트와 컨테이너의 포트인 8080을 target-port로 하여 연결한다.  

 

> kubectl get svc

 

현재 운영중인 서비스를 보자.

 

name은 tc이고 type은 LoadBalancer이다. 해당 서비스는 34.133.168.203의 ip와 80포트를 부여받았다. 그리고 80포트는 31598과 매핑되는데, 이는 컨테이너가 들어있는 워커노드의 포트번호이다.  

 

 

 

 

로드밸런서는 균형있게 요청(Request)을 워커노드에 분산한다. 워커노드 안에는 파드가 여러 개 있기에 프록시가 동작하여 적절한 컨테이너에 요청을 전달한다. 

 

 

3) 외부에서 톰캣 컨테이너에 접속해보기

 

> url : 34.133.168.203:80 

 

브라우저에 로드밸런서 IP와 80포트를 주소로 입력하니 톰캣 페이지가 열렸다. 

 

그럼 Server Status 버튼을 클릭해보자. 

 

 

Server Information의 Hostname을 보면 요청이 접근한 컨테이너명을 알 수 있다. 컨테이너명이 우리가 배포한 컨테이너명과 일치한다. 요청을 계속 보내면 컨테이너명이 달라짐을 확인할 수 있다. 로드밸런서가 요청을 매번 같은 노드에 보내지 않고 노드 안에서도 프록시가 매번 같은 컨테이너에 전달하지 않기 때문이다.

 

 

여기까지 GKE에서 생성한 클러스터에 톰캣 컨테이너를 배포하고 외부에서 접근하는 과정을 알아보았다. 모든 설정을 자동으로 해주는 GKE는 매우 편리하다. 다음 포스팅에서는 가상머신을 띄어 GKE의 도움없이 마스터 노드와 워커 노드로 이루어진 클러스터를 구성하고 똑같이 톰캣 컨테이너를 빌드하고 배포해보겠다. 

 

 


 

 

참고자료

 

Production-Grade Container Orchestration

Production-Grade Container Orchestration

kubernetes.io

 

데브옵스(DevOps)를 위한 쿠버네티스 마스터 - 인프런 | 강의

컨테이너 기반 오픈 소스 가상화 프로젝트인 "쿠버네티스"를 이용한 컨테이너 환경의 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 활용하는 방법을 입문부터 활용까지 다룹니다., [

www.inflearn.com

 

 

 

 

 

 

 

반응형