KEDA를 이용한 Auto Scaling (+cronjob)

https://app.gitbook.com/o/69e3WYO1BpsZuS0lOzd9/s/tp8qVfKdTfhtK37vvefk/~/changes/6/infra/kube/keda-auto-scaling의 테스트 과정에서 누락 실수가 있었다. 사실 mysql 트리거와 함께 설정했던 cron 트리거는 hpa behavior 의 disabled 정책으로 정상적으로 동작하지 않는다.

keda는 결국 hpa를 핸들링하는 00이기 때문에 실제 스케일링 동작은 hpa가 관장하고 있어 scale down을 막아버리면 트리거를 통한 scale down 또한 동작하지 않는 것이다.

scale down 정책, stabilizationWindowSeconds 등 hpa 조정 값을 주어 어떻게든 우회하려고 해봤으나(외부 컨트롤러 OKG까지 붙여보려고 했음)

결국 현재 운영 환경에는 적용하기 어려운 부분이 많아 이에 대한 대안으로 크론잡으로 직접 scale command를 주기로 했다.

크론잡 설정은 간단히 이렇게 작성.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: gameserver-restart
  namespace: dev
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: role-gameserver-restart
  namespace: dev
rules:
  - apiGroups: ["apps"]
    resources: ["statefulsets", "statefulsets/scale"]
    resourceNames: ["sts-dev-gameserver"]
    verbs: ["get", "list", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rolebinding-webgameserver-quiz-restart
  namespace: stage
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: role-webgameserver-quiz-restart
subjects:
  - kind: ServiceAccount
    name: gameserver-restart
    namespace: stage
---

apiVersion: batch/v1
kind: CronJob
metadata:
  name: "{{ .Values.env }}-{{ .Chart.Name }}-scale-in"
  namespace: {{ .Values.env }}
spec:
  timeZone: 'Asia/Seoul'
  schedule: "00 00 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: gameserver-restart
          containers:
            - image: bitnami/kubectl:latest
              name: gameserver-restart
              command:
                - /bin/sh
                - -c
                - "kubectl scale statefulset sts-{{ .Values.env }}-{{ .Chart.Name }} --replicas={{ .Values.statefulset.minReplicas }} -n stage"
              securityContext:
                runAsUser: 0
          restartPolicy: Never

Last updated