지난 포스팅에서 구글 쿠버네티스 엔진(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의 도움없이 마스터 노드와 워커 노드로 이루어진 클러스터를 구성하고 똑같이 톰캣 컨테이너를 빌드하고 배포해보겠다.
참고자료
'DevOps > K8S' 카테고리의 다른 글
[Kubernetes] 우분투 환경에서 클러스터 구성하기(3) - 넷필터 브릿지 (0) | 2023.09.25 |
---|---|
[Kubernetes] 우분투 환경에서 클러스터 구성하기(2) - kubeadm, kubelet, kubectl (0) | 2023.09.22 |
[Kubernetes] 우분투 환경에서 클러스터 구성하기(1) - 컨테이너D 설치하기 (0) | 2023.09.22 |
[Kubernetes] Google Cloud에서 VM인스턴스 만들기 (0) | 2023.09.21 |
[Kubernetes] GKE 환경에서 클러스터 만들기 (0) | 2023.09.21 |