-
클라우드: Django 웹서버 K8S NodePort로 배포하기K8S 2021. 4. 28. 21:02
우선 NodePort service에 대해서 잘 모른다면 다음을 참고하자.
이번 포스팅은 필자의 개인 서버에 쿠버네티스 NodePort 방식으로 전에 만들었던 django 웹을 배포할 것이다.
예전에 잘 쓰지 않는 노트북에 우분투를 설치해서 서버로 사용중인데
단지 NodePort방식으로 웹서버를 배포해보면 어떨까 싶어서 이 포스팅을 작성한다.
대략적인 아키텍처는 다음과 같다.
간략하게 설명하자면
1. NodePort 방식을 이용하여 외부에서 우분투 서버의 cluster service로 접근할때는 31000번 포트를 사용한다.
2. 클래스터 내부에서 service를 통해 pod로 접근할때는 80번 포트를 이용한다.
3. pod 내부 컨테이너들은 80번 포트를 사용한다.
지금은 외부에서 접근할 수 있게 nodeport service를 이용하는 것이므로 2번은 중요하지 않다.
노드포트 방식을 이용하기 위해 다음과 같이 deployment와 service yaml 파일을 작성해준다.
< web-deployment.yaml >
apiVersion: apps/v1 kind: Deployment metadata: name: trading-web-deployment spec: replicas: 3 selector: matchLabels: app: MyApp template: metadata: name: trading-webserver labels: app: MyApp spec: containers: - name: trading-webserver image: sjoh0704/xxx:latest command: ['python3'] args: ['Simple-Shopping-Mall-Web/manage.py', 'runserver', '0.0.0.0:80'] ports: - containerPort: 80
1) replica: 3
3개의 포드를 생성시켜줄 것이기 때문에 replica는 3으로 설정한다.
2) image: sjoh0704/xxx:latest
이미지는 이전에 만든 장고 웹서버를 커밋한 도커 이미지를 사용한다.
3) command, args, container port
커맨드는 장고 서버를 실행시켜주기 위한 커맨드로 container port 80번을 열 것이기 때문에
장고 웹서버도 80번으로 열어준다.
< web-service.yaml >
apiVersion: v1 kind: Service metadata: name: trading-web-service spec: ports: - name: web-port port: 80 targetPort: 80 nodePort: 31000 selector: app: webserver type: NodePort
1) nodePort : 31000
노드 외부에서 이 서비스까지 접근하기 위해 사용할 포트는 31000번으로 설정
2) port : 80
클러스터 내부에서 사용할 포트 80번으로 설정
(지금은 사용하지 않을 포트이므로 중요치 않다.)
3) targetPort : 80
열어준 컨테이너 포트를 적어준다.
이제 만들어준 yaml파일을 apply 해준 후,
확인해보면 디플로이먼트와 서비스가 잘 생성되었음을 알 수 있다.
(nodeport ip는 위의 아키텍처와 조금 다름)
그리고 31000포트로 웹서버에 접속해보면 다음과 같이 성공적으로 웹서버에 들어가진다.
하지만 이것만으로는 Load balancing이 잘 되고 있음을 확인할 수 없으므로 각 컨테이너의 로그를 확인해준다.
3개의 컨테이너 모두 각기 다른 로그를 갖는 것으로 보아 node port 서비스를 통해 load balancing 되고 있음을 알 수 있다.
성공적이다.
반응형'K8S' 카테고리의 다른 글
K8S 아키텍처 정리(ETCD, Kube-api server, Kube-controller-manager) (0) 2021.06.01 클라우드: 쿠버네티스 인그레스(Ingress) 실습하기(feat.minikube) (0) 2021.05.03 클라우드: 쿠버네티스 컨피그맵(Configmap) 실습하기 (2) 2021.03.31 클라우드: 쿠버네티스 네임스페이스(namespace) 실습하기 (0) 2021.03.28 클라우드: 쿠버네티스 서비스(Service) ClusterIP와 NodePort 실습하기 (0) 2021.02.18