* 쿠버네티스 공식 문서에서 튜토리얼 진행하며 한국어로 번역하여 정리한 내용입니다.
* 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/
'Kubernetes' 카테고리의 다른 글
쿠버네티스 튜토리얼 : Java 마이크로서비스 구성하기 (Kubernetes tutorial) (0) | 2021.11.11 |
---|---|
쿠버네티스 튜토리얼 6 : 앱 업데이트하기 (Kubernetes tutorial) (0) | 2021.11.11 |
쿠버네티스 튜토리얼 4 : 앱 외부로 노출하기 (Kubernetes tutorial) (0) | 2021.11.11 |
쿠버네티스 튜토리얼 3 : 앱 조사하기 (Kubernetes tutorial) (0) | 2021.11.11 |
쿠버네티스 튜토리얼 2 : 앱 배포하기 (Kubernetes tutorial) (0) | 2021.11.11 |