infra Kube KEDA를 이용한 Auto Scaling 목표 : 서버 리소스 부하 탐지(hpa)를 통한 스케일 아웃 뿐 아니라 급격히 트래픽 높아지는 상황에 대비하여 자동으로 파드 늘리기
파트 내에서 겜서버 동접이 늘어날 때 마다 손스케일링 해주는 불편함을 해소하기 위해 keda를 사용해보기로 했다. 기존에도 hpa로 오토 스케일링 되고 있긴한데 쿠베가 리소스 상태 감지하기 전에 선제적으로 스케일 아웃 시킬 필요가 있어 mysql scaler를 사용해서 pod를 증설 시키기로..
셋팅은 간단하다. 걍 헬름으로 케다 설치하고 yaml 작성해주면 됨. 대충 요로코롬?
Copy apiVersion: v1
kind: Secret
metadata:
name: "secret-{{ include "test.name" . }}-keda"
namespace: {{ $.Values.env }}
type: Opaque
data:
conn_info: |
{{- $rdb_user := "user" -}}
{{- $rdb_password := "password" -}}
{{- $rdb_host := "localhost" -}}
{{- $rdb_port := "3306" -}}
{{- $rdb_db_name := "test" -}}
{{- if ne .Values.env "dev-1" }}
{{- $rdb_db_name = printf "%s%s" $rdb_db_name (.Values.env_num | toString) -}}
{{- end }}
{{ printf "%s:%s@tcp(%s:%s)/%s"
$rdb_user
$rdb_password
$rdb_host
$rdb_port
$rdb_db_name
| b64enc }}
---
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: "triggerauth-{{ include "test.name" . }}-keda"
namespace: {{ $.Values.env }}
spec:
secretTargetRef:
- parameter: connectionString
name: "secret-{{ include "test.name" . }}-keda"
key: conn_info
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: "scaledobject-{{ include "test.name" . }}-keda"
namespace: {{ $.Values.env }}
spec:
scaleTargetRef:
kind: StatefulSet
name: {{ include "test.name" . }}
minReplicaCount: 2
maxReplicaCount: 10
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleDown:
selectPolicy: Disabled
triggers:
- type: mysql
metadata:
queryValue: "1"
query: "SELECT CASE WHEN SUM(player) <= 50 THEN 1 ELSE CEIL(SUM(player)/100) FROM table WHERE type = 4"
authenticationRef:
name: "triggerauth-{{ include "test.name" . }}-keda"
- type: cron
metadata:
timezone: Asia/Seoul
start: "0 0 * * *"
end: "2 0 * * *"
desiredReplicas: "2"
참고로 coooldownPeriod
는 트리거 조건이 해제된 후 파드를 줄이는 시간을 설정하는 것인데 암만 케다에서 설정해줘봤자 hpa 설정이 오버라이드 해버리기 때문에 애초에 케다에서 hpa behavior를 설정해줘야한다.
behavior 설정 안하면 hpa가 minReplicas 에 맞춰 스케일인 해버림..
그리고 우리는 사용량이 적은 특정 시간대에 서버를 내려줄거기 때문에 스케일인 트리거로 cron을 사용했다. 이제 동접 수가 오르고 내릴 때마다 손스케일링 해줄 필요가 없어졌다! 매우 편안
여기서 인프라 작업은 잘 마무리 됐으나, 우리 서버에는 파드 증설에 따른 운영 관리 포인트가 하나 있는데 이게 기존 eks 구조로는 운영이 어렵다는 사실이 발견 됐다. 서버+eks 트러블 슈팅에 대한 이야기는 다음 문서에 이어서..