반응형

* 쿠버네티스 공식 문서에서 튜토리얼 진행하며 한국어로 번역하여 정리한 내용입니다.

* https://kubernetes.io/ko/docs/tutorials/ 에서 Katacoda를 사용하여 브라우저 상 터미널로 동일한 내용을 실습해 볼 수 있습니다.

목표 : kubectl scale로 deployment를 스케일하고, 로드 밸런싱이 작동하는지 확인하기

- Step 1 : Scailing a deployment

get deployments 명령어를 사용하여 deployments 목록을 확인하세요.

$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           2m29s

1개의 포드를 가져야합니다.

NAME : 클러스터의 deployment 이름 목록

READY : CURRENT/DESIRED 레플리카의 비율

UP_TO_DATE : 원하는 상태를 달성하기 위해 업데이트된 레플리카의 수

AVAILABLE : 사용자가 사용할 수 있는 애플리케이션 레플리카 수

AGE : 애플리케이션이 실행된 시간

Deployment에 의해 만들어진 ReplicaSet을 보기 위해, kubectl get rs 명령을 실행합니다.

$ kubectl get rs
NAME                            DESIRED   CURRENT   READY   AGE
kubernetes-bootcamp-fb5c67579   1         1         1       7m23s

ReplicaSet의 이름은 항상 [DEPLOYMENT-NAME]-[RANDOM-STRING]의 형식으로 지정됩니다.

랜덤 스트링은 무작위로 생성되고, pod-template-hash를 시드로 사용합니다.

이 명령어의 두 가지 중요한 컬럼은 다음과 같습니다.

DESIRED : 정의한 애플리케이션 레플리카의 수를 보여주고, 이것은 deployment를 만들 때 지정할 수 있습니다. 원하는 상태를 나타냅니다.

CURRENT : 현재 실행 중인 레플리카의 수를 나타냅니다.

다음으로 deployment를 4개의 레플리카로 스케일해봅시다.

deployment 타입, 이름, 인스턴스의 원하는 수를 지정하여 kubectl scale 명령어를 사용할 수 있습니다.

$ kubectl scale deployments/kubernetes-bootcamp --replicas=4
deployment.apps/kubernetes-bootcamp scaled

다시 get deployments를 사용하여 deployment 목록을 나열해보면,

$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4/4     4            4           13m

변경 사항이 적용되고, 4개의 사용 가능한 애플리케이션 인스턴스를 가지게 됩니다.

다음으로 포드의 개수가 변경되었는지 확인해봅시다.

$ kubectl get pods -o wide
NAME                                  READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-fb5c67579-4c7v7   1/1     Running   0          2m11s   172.18.0.7   minikube   <none>           <none>
kubernetes-bootcamp-fb5c67579-j4zw7   1/1     Running   0          2m11s   172.18.0.8   minikube   <none>           <none>
kubernetes-bootcamp-fb5c67579-rvnkx   1/1     Running   0          14m     172.18.0.2   minikube   <none>           <none>
kubernetes-bootcamp-fb5c67579-th59x   1/1     Running   0          2m11s   172.18.0.9   minikube   <none>           <none>

이제는 다른 IP 주소를 가지는 4개의 포드가 있습니다.

변경 사항이 deployment 이벤트 로그에 등록되었습니다.

이를 확인하기 위해, describe 명령어를 사용합시다.

$ kubectl describe deployments/kubernetes-bootcamp
...
NewReplicaSet:   kubernetes-bootcamp-fb5c67579 (4/4 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  16m    deployment-controller  Scaled up replica set kubernetes-bootcamp-fb5c67579 to 1
  Normal  ScalingReplicaSet  4m28s  deployment-controller  Scaled up replica set kubernetes-bootcamp-fb5c67579 to 4

이 명령의 출력으로 4개의 레플리카가 있는 것을 확인할 수 있습니다.

- Step 2 : Load Balancing

서비스가 트래픽을 로드밸런싱 하고 있는지 확인해봅시다.

노출된 IP와 포트를 찾기 위해서, 지난 튜토리얼에서 배웠던 describe service를 사용해봅시다.

$ kubectl describe services/kubernetes-bootcamp
Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   app=kubernetes-bootcamp
Annotations:              <none>
Selector:                 app=kubernetes-bootcamp
Type:                     NodePort
IP Families:              <none>
IP:                       10.105.15.154
IPs:                      10.105.15.154
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  30684/TCP
Endpoints:                172.18.0.2:8080,172.18.0.7:8080,172.18.0.8:8080 + 1 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

노드 포트의 값을 NODE_PORT 환경 변수로 만들어줍니다.

$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
$ echo NODE_PORT=$NODE_PORT
NODE_PORT=30684

 

다음으로 노출된 IP와 포트에 curl을 사용할 것 입니다.

curl 명령어를 여러 번 실행해봅시다.

 

$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-fb5c67579-th59x | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-fb5c67579-4c7v7 | v=1
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-fb5c67579-j4zw7 | v=1

요청마다 다른 포드가 사용되면서, 로드 밸런싱이 작동하고 있음을 보여줍니다.

- Step 3 : Scale Down

서비스를 2개의 레플리카로 스케일 다운 하기 위해서, scale 명령을 다시 실행해줍니다.

$ kubectl scale deployments/kubernetes-bootcamp --replicas=2
deployment.apps/kubernetes-bootcamp scaled

get deployments 명령으로 deployment 목록을 나타내서 변경 사항이 적용되었는지 확인합니다.

$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   2/2     2            2           26m

레플리카의 수가 2개로 감소되었습니다.

get pods를 사용하여 포드의 개수를 나열해줍니다.

$ kubectl get pods -o wide
NAME                                  READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
kubernetes-bootcamp-fb5c67579-4c7v7   1/1     Running   0          14m   172.18.0.7   minikube   <none>           <none>
kubernetes-bootcamp-fb5c67579-rvnkx   1/1     Running   0          26m   172.18.0.2   minikube   <none>           <none>

2개의 포드가 종료된 것을 확인할 수 있습니다.

출처 : https://kubernetes.io/ko/docs/tutorials/kubernetes-basics/scale/scale-interactive/ 

 

반응형

+ Recent posts