18.9. 튜토리얼: 애플리케이션 확장
18.9.1. 스케일링
HPA(horizontal Pod Autoscaler)를 사용하여 Pod를 수동으로 또는 자동으로 스케일링할 수 있습니다. 클러스터 노드를 확장할 수도 있습니다.
18.9.1.1. 수동 Pod 스케일링
다음 방법 중 하나를 사용하여 애플리케이션 Pod를 수동으로 스케일링할 수 있습니다.
- ReplicaSet 또는 배포 정의 변경
- 명령줄 사용
- 웹 콘솔 사용
이 워크샵은 마이크로 서비스에 하나의 Pod만 사용하여 시작됩니다. 배포 정의에서 1
개의 복제본을 정의하면 Kubernetes Replication Controller에서 하나의 Pod를 활성 상태로 유지합니다. 그런 다음 부하가 많은 경우 로드를 기반으로 하고 초기 정의 이상으로 더 많은 Pod를 확장하는 HPA(수평 Pod Autoscaler)를 사용하여 Pod 자동 스케일링을 정의하는 방법을 알아봅니다.
사전 요구 사항
- 활성 ROSA 클러스터
- OSToy 애플리케이션이 해제됨
프로세스
- OSToy 앱의 탐색 메뉴에서 네트워킹 탭을 클릭합니다.
"Intra-cluster communication" 섹션에서 무작위로 색상을 변경하는 "원격 Pod" 아래에 있는 상자를 찾습니다. 박스 내에는 마이크로 서비스의 포드 이름이 표시됩니다. 마이크로 서비스 pod가 하나뿐이므로 이 예제에는 하나의 박스만 있습니다.
다음 명령을 실행하여 마이크로 서비스에 대해 실행 중인 포드가 하나뿐인지 확인합니다.
$ oc get pods
출력 예
NAME READY STATUS RESTARTS AGE ostoy-frontend-679cb85695-5cn7x 1/1 Running 0 1h ostoy-microservice-86b4c6f559-p594d 1/1 Running 0 1h
- ostoy-microservice-deployment.yaml 을 다운로드하여 로컬 머신에 저장합니다.
다음 예제를 사용하여 배포 정의를 1개 대신 3개의 Pod로 변경합니다.
spec: selector: matchLabels: app: ostoy-microservice replicas: 3
다음 명령을 실행하여 복제본 변경 사항을 적용합니다.
$ oc apply -f ostoy-microservice-deployment.yaml
참고워크로드 > Deployments > ostoy-microservice > YAML 탭으로 이동하여 OpenShift 웹 콘솔에서
ostoy-microservice-
deployment.yaml 파일을 편집할 수도 있습니다.다음 명령을 실행하여 Pod 3개가 있는지 확인합니다.
$ oc get pods
출력에서는 이제 마이크로 서비스에 대한 포드가 하나만 아니라 3개의 포드가 있음을 보여줍니다.
출력 예
NAME READY STATUS RESTARTS AGE ostoy-frontend-5fbcc7d9-rzlgz 1/1 Running 0 26m ostoy-microservice-6666dcf455-2lcv4 1/1 Running 0 81s ostoy-microservice-6666dcf455-5z56w 1/1 Running 0 81s ostoy-microservice-6666dcf455-tqzmn 1/1 Running 0 26m
CLI를 사용하거나 웹 UI를 사용하여 애플리케이션을 확장합니다.
CLI에서 다음 명령을 실행하여 Pod 수를
3
에서2
로 줄입니다.$ oc scale deployment ostoy-microservice --replicas=2
- OpenShift 웹 콘솔 UI의 탐색 메뉴에서 워크로드 > 배포 > ostoy-microservice 를 클릭합니다.
- 페이지 왼쪽에서 중간에 "3 Pod" 라벨이 있는 파란색 원을 찾습니다.
원 옆에 있는 화살표를 선택하면 Pod 수가 스케일링됩니다.
2
의 아래쪽 화살표를 선택합니다.
검증
CLI, 웹 UI 또는 OSToy 앱을 사용하여 Pod 수를 확인합니다.
CLI에서 다음 명령을 실행하여 마이크로 서비스에 두 개의 포드를 사용하고 있는지 확인합니다.
$ oc get pods
출력 예
NAME READY STATUS RESTARTS AGE ostoy-frontend-5fbcc7d9-rzlgz 1/1 Running 0 75m ostoy-microservice-6666dcf455-2lcv4 1/1 Running 0 50m ostoy-microservice-6666dcf455-tqzmn 1/1 Running 0 75m
웹 UI에서 워크로드 > 배포 > ostoy-microservice 를 선택합니다.
OSToy 앱의 탐색 메뉴에서 네트워킹 을 선택하여 사용 중인 두 개의 포드가 있는지 확인할 수도 있습니다. 두 Pod에는 두 개의 색상이 지정된 박스가 있어야 합니다.
18.9.1.2. Pod 자동 확장
AWS의 Red Hat OpenShift Service는 Horizontal Pod Autoscaler (HPA)를 제공합니다. HPA는 필요한 경우 메트릭을 사용하여 Pod 수를 늘리거나 줄입니다.
프로세스
웹 UI의 탐색 메뉴에서 Pod 자동 스케일링을 선택합니다.
다음 명령을 실행하여 HPA를 생성합니다.
$ oc autoscale deployment/ostoy-microservice --cpu-percent=80 --min=1 --max=10
이 명령은 ostoy-microservice 배포에서 제어하는 Pod의 복제본 1~10개 사이를 유지 관리하는 HPA를 생성합니다. 배포가 충분하지만 HPA는 모든 Pod의 평균 CPU 사용을 80% 및 40밀리코어로 유지하기 위해 복제본 수를 늘리고 줄입니다.
Pod 자동 확장 > Horizontal Pod 자동 확장 페이지에서 로드 증가를 선택합니다.
중요부하를 늘리면 CPU 집약적 계산이 생성되므로 페이지가 응답하지 않을 수 있습니다. 이는 예상된 응답입니다. Increase the Load only once을 클릭합니다. 프로세스에 대한 자세한 내용은 마이크로 서비스의 GitHub 리포지토리 를 참조하십시오.
몇 분 후에 새 Pod가 색상이 지정된 박스로 표시되는 페이지에 표시됩니다.
참고이 페이지는 지연이 발생할 수 있습니다.
검증
다음 방법 중 하나를 사용하여 Pod 수를 확인합니다.
OSToy 애플리케이션의 웹 UI에서 원격 pod 상자를 참조하십시오.
Pod가 하나뿐이므로 워크로드를 늘리면 Pod 증가가 트리거됩니다.
CLI에서 다음 명령을 실행합니다.
oc get pods --field-selector=status.phase=Running | grep microservice
출력 예
ostoy-microservice-79894f6945-cdmbd 1/1 Running 0 3m14s ostoy-microservice-79894f6945-mgwk7 1/1 Running 0 4h24m ostoy-microservice-79894f6945-q925d 1/1 Running 0 3m14s
OpenShift Cluster Manager에서 자동 스케일링을 확인할 수도 있습니다.
- OpenShift 웹 콘솔 탐색 메뉴에서 모니터링 > 대시보드를 클릭합니다.
대시보드에서 Kubernetes / Compute Resources / Namespace (Pods) 및 네임스페이스 ostoy 를 선택합니다.
CPU 및 메모리 전반에 걸쳐 리소스 사용량이 표시되는 그래프가 표시됩니다. 상단 그래프는 Pod당 최근 CPU 사용량이 표시되고 더 낮은 그래프는 메모리 사용량을 나타냅니다. 다음은 그래프의 호출을 나열합니다.
- 부하 증가(A).
- 두 개의 새 Pod(B 및 C)가 생성되었습니다.
- 각 그래프의 간격은 CPU 소비를 나타내며 더 많은 로드를 처리하는 Pod를 나타냅니다.
로드가 감소하고 Pod가 삭제되었습니다.
18.9.1.3. 노드 자동 확장
AWS의 Red Hat OpenShift Service를 사용하면 노드 자동 스케일링을 사용할 수 있습니다. 이 시나리오에서는 클러스터가 처리할 수 없는 대규모 워크로드가 있는 작업으로 새 프로젝트를 생성합니다. 자동 스케일링이 활성화되면 로드가 현재 용량보다 크면 클러스터에서 자동으로 로드를 처리할 새 노드를 생성합니다.
사전 요구 사항
- 머신 풀에서 자동 스케일링이 활성화됩니다.
프로세스
다음 명령을 실행하여
autoscale-ex
라는 새 프로젝트를 생성합니다.$ oc new-project autoscale-ex
다음 명령을 실행하여 작업을 생성합니다.
$ oc create -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/job-work-queue.yaml
몇 가지 minuts 후 다음 명령을 실행하여 Pod를 확인합니다.
$ oc get pods
출력 예
NAME READY STATUS RESTARTS AGE work-queue-5x2nq-24xxn 0/1 Pending 0 10s work-queue-5x2nq-57zpt 0/1 Pending 0 10s work-queue-5x2nq-58bvs 0/1 Pending 0 10s work-queue-5x2nq-6c5tl 1/1 Running 0 10s work-queue-5x2nq-7b84p 0/1 Pending 0 10s work-queue-5x2nq-7hktm 0/1 Pending 0 10s work-queue-5x2nq-7md52 0/1 Pending 0 10s work-queue-5x2nq-7qgmp 0/1 Pending 0 10s work-queue-5x2nq-8279r 0/1 Pending 0 10s work-queue-5x2nq-8rkj2 0/1 Pending 0 10s work-queue-5x2nq-96cdl 0/1 Pending 0 10s work-queue-5x2nq-96tfr 0/1 Pending 0 10s
-
Pending
상태에 Pod가 많이 있으므로 이 상태는 자동 스케일러를 트리거하여 머신 풀에 더 많은 노드를 생성해야 합니다. 이러한 작업자 노드를 생성하는 시간을 허용합니다. 몇 분 후에 다음 명령을 사용하여 현재 보유하고 있는 작업자 노드 수를 확인합니다.
$ oc get nodes
출력 예
NAME STATUS ROLES AGE VERSION ip-10-0-138-106.us-west-2.compute.internal Ready infra,worker 22h v1.23.5+3afdacb ip-10-0-153-68.us-west-2.compute.internal Ready worker 2m12s v1.23.5+3afdacb ip-10-0-165-183.us-west-2.compute.internal Ready worker 2m8s v1.23.5+3afdacb ip-10-0-176-123.us-west-2.compute.internal Ready infra,worker 22h v1.23.5+3afdacb ip-10-0-195-210.us-west-2.compute.internal Ready master 23h v1.23.5+3afdacb ip-10-0-196-84.us-west-2.compute.internal Ready master 23h v1.23.5+3afdacb ip-10-0-203-104.us-west-2.compute.internal Ready worker 2m6s v1.23.5+3afdacb ip-10-0-217-202.us-west-2.compute.internal Ready master 23h v1.23.5+3afdacb ip-10-0-225-141.us-west-2.compute.internal Ready worker 23h v1.23.5+3afdacb ip-10-0-231-245.us-west-2.compute.internal Ready worker 2m11s v1.23.5+3afdacb ip-10-0-245-27.us-west-2.compute.internal Ready worker 2m8s v1.23.5+3afdacb ip-10-0-245-7.us-west-2.compute.internal Ready worker 23h v1.23.5+3afdacb
워크로드를 처리하기 위해 작업자 노드가 자동으로 생성되었는지 확인할 수 있습니다.
다음 명령을 입력하여 OSToy 앱으로 돌아갑니다.
$ oc project ostoy