Goal

  • 쿠버네티스 애플리케이션을 Scale Out 한다.

Scale out

 Pod에 트래픽이 증가하면, 사용자 요청에 맞추어 App의 규모를 조정할 필요가 있다.
Deployment의 Replica를 변경하면 스케일링이 수행된다.

non-scale.PNG

completed-scale.PNG

 Deployment를 Scale Out하면 신규 파드가 생성되어서 이용가능한 자원이 있는 Node에 스케쥴된다.

 Service는 노출된 Deployment의 모든 Pod에 트래픽을 분산시켜줄 통합 로드밸런서를 갖는다. 또한, End-point를 이용해서 구동중인 Pod를 지속적으로 모니터링함으로써 가용한 파드에만 트래픽이 전달되도록 한다.

실습

Step1 : deployment 스케일링

  1. 현재 deployment 상태 확인하기
    kubectl get deployments
     k8s 클러스터에 존재하는 deployment를 확인한다. UP-TO-DATE 항목에서 설정된 replicas를 확인할 수 있다. 현재는 1로 설정이 되어 있다. AVAILABLE는 replicas중에서 실제로 이용가능한 갯수를 보여준다.

scale1.PNG

Step2 : deployment replica 변경

  1. deployment replica 변경하기
kubectl scale deployments/kubernetes-bootcamp --replicas=4

replicas 를 4로변경하고 kubectl get deployments를 입력하면 UP-TO-DATE가 변경된 것을 확인할 수있다. Deployment에 변경이 적용된것 이고, 4개의 app인스턴스가 이용가능한 상태이다.

complete replica.PNG

Step3 : Service Load - Balancing 확인하기

4개의 앱인스턴스가 구동중인 k8s 클러스터에서 Service가 Load-balancing을 해주는지 확인을 해보겠습니다.

  1.  NODE_PORT라는 환경변수를 생성하겠습니다.

    export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
    $ echo NODE_PORT=$NODE_PORT
  2. 환경변수로 설정된 NODE_PORT에 curl 요청 보내기

    curl $(minikube ip):$NODE_PORT
  1. 명령어를 연속해서 입력 해보면, 서로 다른 IP주소로 요청이 가는것을 확인할 수 있습니다.

    LOAD-BALANCING.PNG