Machine 자동 확장 (Autoscale Machines)
트래픽 수요에 따라 Machine을 자동으로 시작하고 중지하도록 서비스가 설정된 앱이 있는데, 하루 중 트래픽이 크게 변해서 저트래픽 시간대에 중지된 Machine을 많이 유지하고 싶지 않을 때가 있어요. 이 가이드는 fly-autoscaler 앱과 Fly Proxy의 autostop/autostart를 함께 구성해서, Fly Proxy가 빠르게 시작할 수 있도록 고정된 수의 Machine을 항상 준비해 두는 과정을 안내합니다.
출처: 문서
본문
개요 (Overview)
서비스가 있는 앱이 트래픽 수요에 따라 Machine을 자동으로 시작하고 중지하도록 구성되어 있다고 가정해 볼게요. 하지만 하루 동안 앱에 대한 트래픽이 크게 변해서, 저트래픽 기간 동안 중지된 Machine을 많이 유지하고 싶지 않을 수 있습니다.
이 가이드는 fly-autoscaler 앱을 Fly Proxy autostop/autostart와 함께 구성해서, Fly Proxy가 빠르게 시작할 수 있도록 항상 고정된 수의 Machine을 준비해 두는 과정을 안내합니다.
autostop/autostart 구성하기
먼저, 아직 하지 않았다면 트래픽 수요에 따라 Machine을 자동으로 시작하고 중지하거나 일시 중지하도록 앱을 구성해 주세요. autostop/autostart 설정은 서비스별로 적용되므로, fly.toml의 [[services]] 또는 [http_service] 섹션 안에서 설정합니다:
...
[[services]]
...
auto_stop_machines = "stop"
auto_start_machines = true
min_machines_running = 0
...
이 설정을 사용하면 모든 실행 중인 Machine이 동시성 soft_limit를 초과할 때 Fly Proxy가 추가 Machine을 시작하고, 트래픽이 줄어들면 실행 중인 Machine을 중지해요. Machine을 "stop" 대신 "suspend"로 설정하면 시작이 훨씬 빨라질 수 있지만, Machine 유형에 따른 몇 가지 제한이 있습니다.
다음 섹션에서는 앱이 항상 Fly Proxy가 시작할 수 있는 여분의 중지된 Machine을 갖도록 fly-autoscaler를 구성하고 배포할 거예요.
fly-autoscaler 구성 및 배포
fly-autoscaler는 모든 지표를 기준으로 앱의 Machine을 확장하는 지표 기반 오토스케일러입니다. 트래픽이 증가할 경우 Fly Proxy가 시작할 수 있는 추가 Machine이 항상 있도록 구성할 수 있어요.
먼저, 오토스케일러를 실행할 새 Fly.io 앱을 만듭니다.
$ fly apps create my-autoscaler
오토스케일러 앱이 대상 앱을 확장하거나 축소할 권한을 갖도록 배포 토큰(deploy token)을 만듭니다:
$ fly tokens create deploy -a my-target-app
$ fly secrets set -a my-autoscaler --stage FAS_API_TOKEN="FlyV1 ..."
오토스케일러 앱이 Prometheus 인스턴스에 접근할 수 있도록 읽기 전용 토큰을 만듭니다:
$ fly tokens create readonly
$ fly secrets set -a my-autoscaler --stage FAS_PROMETHEUS_TOKEN="FlyV1 ..."
오토스케일러의 fly.toml을 다음과 같이 구성합니다:
app = "my-autoscaler"
[build]
image = "flyio/fly-autoscaler:0.3.1"
[env]
FAS_PROMETHEUS_ADDRESS = "https://api.fly.io/prometheus/my-org"
FAS_PROMETHEUS_METRIC_NAME = "running_machines"
FAS_PROMETHEUS_QUERY = "count(fly_instance_up{app='$APP_NAME'})"
FAS_APP_NAME = "my-target-app"
FAS_CREATED_MACHINE_COUNT = "min(running_machines + 1, 10)"
FAS_INITIAL_MACHINE_STATE = "stopped"
[metrics]
port = 9090
path = "/metrics"
이 구성에서는 사용 가능한 모든 Machine이 실행 중이 되는 즉시(하지만 10개를 넘지 않게) 새 중지된 Machine을 만들고, 하나 이상의 Machine이 중지되어 있으면 추가 중지 Machine을 파괴합니다.
FAS_INITIAL_MACHINE_STATE 구성 옵션이 동작하도록 autoscaler 버전 0.3.1 이상을 사용하고 있는지 확인하세요.
마지막으로, --ha 옵션을 사용해 Machine을 하나만 배포하도록 오토스케일러를 배포합니다:
$ fly deploy --ha=false