Cloud/Oracle Cloud Infrastructure

OCI Compute Instance Auto Scaling 사용하기

고물줄 2021. 12. 1. 15:16

1. Create VCN


  VCN은 기존에 생성해둔 리소스를 활용한다. 참고로 나는 Always Free 계정을 사용하기 때문에 NAT Gateway를 생성할 수 없어 Public Subnet에 Compute Instance를 생성할 예정이다. VCN 구성은 아래 참고

VCN 콘솔 화면
Route Table 콘솔 화면
Default Security List 콘솔 화면

2. Create Load Balancer and Update Security List


 1) Create Load Balancer

위치 : Networking -> Load Balancers -> Compartment 선택 후 Create Load Balancer -> Load Balancer, Network Load Balancer 중 Load Balancer 선택

Always Free 계정이라 Bandwidth를 10Mbp만 설정할 수 있다.
트래픽에 대한 방화벽 처리를 Security Group이 아닌 Security List로 하기 때문에 하단의 체크박스는 체크하지 않는다.
위 단계에서는 Backend를 추가하지 않는다. 추후 Instance Pool 생성 단계에서 관리할 예정.
위 설정값과 동일하게 적용할 것, 대부분 Default 값이다.
Load Balancer에 대한 Logging 기능도 적용 가능하지만 본 포스팅에선 다루지 않는다.
Load Balancer 생성 완료 화면, Backend가 등록되어 있지 않아 Incomplete 상태이다.

 2) Update Security List

 위치 : Networking -> Virtual Cloud Networks -> VCN 선택 -> 좌측 하단 Resources -> Security Lists -> Default Security List -> Ingress Rules -> Add Ingress Rules 

* 본 포스팅에선 Load Balancer와 Compute Instance가 동일 Subnet에 있고, 해당 Subnet이 Default Security List를 사용하기 때문에 Default S/L 내 방화벽 정책을 적용한다. 만약 네트워크 구성을 위와 다르게 했다면 LB 및 Compute의 Security List에 해당 정책을 동일하게 적용해야 한다.

위 항목과 같이 입력 후 Add Ingress Rules 클릭

3. Configure Instance Pool and Auto Scaling


 1) Compute Instance 생성

 위치 : Compute -> Instances -> Create Instance

Placement, Image, Shape은 Always Free 계정에 맞게 자동으로 선택된다. (Image는 Oracle Linux로 되어 있는지 확인)
본 포스팅에서는 Load Balancer, Compute를 동일 Subnet에 생성할 예정이며 SSH Key는 기존에 사용하던 것을 써도 무방하다.
하단의 Advanced Option 클릭 후 Paste cloud-init script를 선택하여 아래 스크립트를 붙여넣은 후 Create 클릭

#cloud-config
packages:
- httpd
- stress

runcmd:
- [sh, -c, echo "<html>Web Server IP `hostname --ip-address`</html>" > /var/www/html/index.html]
- [firewall-offline-cmd, --add-port=80/tcp]
- [systemctl, start, httpd]
- [systemctl, restart, firewalld]

 2) Instance Configuration 생성

생성된 인스턴스 화면에서 More Actions -&amp;gt; Create Instance Configuration 클릭
Compartment 및 Name 지정 후 Create Instance Configuration 클릭

 3) Instance Pool 생성

생성된 Instance Configuration 화면에서 Create Instance Pool 클릭
Compartment 및 Name 지정, Number of Instances는 0으로 선택해도 Pool 생성 시 1개의 인스턴스가 생성됨
Instance Pool 내 생성될 리소스를 모든 FD에 나누어 생성하기 위해 Fault Domain을 전부 선택하였음
Attach a load balancer 버튼을 클릭하여 위에서 생성한 LB의 Backendset에 해당 리소스를 자동으로 등록하게끔 설정하였음
이후 설정에 문제가 없는지 확인 후 Create 버튼 클릭

 4) Autoscaling Configuration 생성

생성된 Instance Pool 화면에서 More Actions -&amp;amp;gt; Create Autoscaling Configuration 클릭
Compartment 및 Name 지정
본 포스팅에서는 인스턴스의 Metric에서 CPU의 사용률을 기준으로 Scaling 한다.
CPU 사용률이 10%를 넘기면 Compute 1대를 추가 생성, 5% 아래로 떨어지면 1대를 감소 시킨다. Compute의 최대 댓수는 2대, 최소 댓수는 1대
모든 정책이 알맞게 설정되었는지 확인 후 Create 클릭

이제 기본적인 Auto Scaling 환경을 구성 완료하였으며 내용을 정리하면 아래와 같다.

  • 최소 1개의 Instance가 Instance Pool에 있으며 최대 2개 까지 확장 가능하다.
  • CPU 사용률이 최소 300초 동안 10% 이상으로 확인되면 Instance Configuration에 기반한 신규 Compute를 생성한다.
  • CPU 사용률이 300초 동안 5% 미만으로 확인되면 가장 먼저 생성된 Compute 하나를 제거한다.

4. Test the setup


 Instance Pool 내 생성된 인스턴스의 Public IP를 참조하여 SSH Client를 통해 서버에 접속한다.

Instance Pool 화면, Pool 내 인스턴스가 1개 있는 것을 볼 수 있다.
인스턴스 접속 화면

 여기를 통해 Stress 패키지를 설치한 후 OS에 과부하를 주었더니 정상적으로 Auto Scaling이 이루어지는 것을 확인할 수 있었다.

$ sudo stress --cpu 4 --timeout 350

인스턴스 OS 내에서 Stress 명령어 수행
Instance Pool Metric에서 CPU 사용률이 증가하였음을 감지
Instance Pool의 상태가 'SCALING' 으로 변경됨
이후 Instance Pool의 Attached Instance가 두 개가 되었음을 확인

5. 참고