Kubernetes 이야기

Nginx Ingress 트래픽 모니터링 결과로 Auto Scale 사용하기 본문

Kubernetes/일반

Nginx Ingress 트래픽 모니터링 결과로 Auto Scale 사용하기

kmaster 2022. 2. 28. 22:40
반응형

소개

 

Kubernetes 는 기본적으로 Metrics Server 에서 제공하는 CPU, Memory 메트릭을 기반으로 Auto Scale을 적용할 수 있다.

 

하지만, CPU나 Memory 기반이 아닌 사용량 ( 예: 사용자 요청 수 ) 에 따라 Auto Scale을 하고 싶은 경우가 있다.

 

준비사항

사용자의 요청 메트릭을 수집하기 위해 Nginx Controller에 메트릭 수집 가능한 설정을 해 보자.

 

자세한 설정은 아래의 URL을 참고한다.

https://kubernetes.github.io/ingress-nginx/user-guide/monitoring/

 

Prometheus and Grafana installation - NGINX Ingress Controller

Prometheus and Grafana installation Two different methods to install and configure Prometheus and Grafana are described in this doc. - Prometheus and Grafana installation using Pod Annotations. This installs Prometheus and Grafana in the same namespace as

kubernetes.github.io

 

정상적으로 prometheus에 수집된다면 다음과 같은 metric을 조회할 수 있다.

 

 

이렇게 Prometheus에 수집된 정보를 HPA (Horizontal Pod Autoscaling) 에서 사용하기 위해서는 Prometheus Adapter 를 사용하여 연동할 수 있다.

 

참조 : https://medium.com/@avkanumuri/kubernetes-hpa-using-custom-metrics-b14d70e50818

 

Prometheus Adapter configuation

Prometheus Adapter 가 설치되어 있으면 adapter-config라는 Configmap 이 생성되어 있다. 여기에 사용자가 정의하는 Query 를 만들어 넣을 수 있다. 

 

    - seriesQuery: '{__name__=~"^nginx_ingress_controller_requests.*",namespace!="",ingress!=""}'
      seriesFilters: []
      resources:
        template: <<.Resource>>
        overrides:
          exported_namespace: {resource: "namespace"}
          ingress: {resource: "ingress"}
      name:
        matches: ""
        as: "http_request_per_second"
      metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)'

 

설정 후 HPA 를 설정해 보자.

 

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: as-test
  namespace: test
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: rollouts-bluegreen
  minReplicas: 2
  maxReplicas: 4
  metrics:
    - type: Object
      object:
        metricName: http_request_per_second
        target:
          apiVersion: networking.k8s.io/v1
          kind: Ingress
          name: prod-ingress
        targetValue: 20

 

hpa 실행 후 부하테스트를 실행하면 아래와 같이 auto scale이 됨을 확인할 수 있다.

 

# client 한명이 40tps 발생
# hey -n 10000 -q 40 -c 1 http://test.prod.10.60.200.121.sslip.io/


# kubectl get hpa -n test                                                                                 Mon Feb 28 22:38:11 2022
NAME      REFERENCE                       TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
as-test   Deployment/rollouts-bluegreen   41100m/20   2         4         4          7m36s
반응형
Comments