Hpa의 동작 방식

 

 

출처: 쿠버네티스 공식 홈페이지

Horizontal Pod Autoscaler 다이어그램

https://kubernetes.io/ko/docs/tasks/run-application/horizontal-pod-autoscale/

자세한 설명은 공식홈페이지에 잘 나와있다.

 

Prometheus를 이용한 Hpa

공식문서에 보면 Hpa는 Api 집합 에서 메트릭을 가져오는데 기본은 metrics.k8s.io고

Prometheus metric을 이용하기 위해선 custom.metrics.k8s.io를 사용한다.

 

출처: https://morioh.com/p/1cc4fd9693fa

 

Custom Metrics은 Prometheus Adapter를 바라보고 Prometheus Adapter는 Prometheus를 바라본다.

실질적으론 서비스를 바라보고 있다.

 

적용해보기

 

  1. Prometheus adapter 설치
  1. Prometheus 와의 연결 확인
  1. Custom Metrics ApiServer 설치
  1. Prometheus Adapter와의 연결 확인

 

  • Prometheus Adapter yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: custom-metrics-apiserver
  name: custom-metrics-apiserver
  namespace: custom-metrics
spec:
  replicas: 1
  selector:
    matchLabels:
      app: custom-metrics-apiserver
  template:
    metadata:
      labels:
        app: custom-metrics-apiserver
      name: custom-metrics-apiserver
    spec:
      serviceAccountName: custom-metrics-apiserver
      containers:
      - name: custom-metrics-apiserver
        image: directxman12/k8s-prometheus-adapter-amd64
        args:
        - --secure-port=6443
        - --tls-cert-file=/var/run/serving-cert/serving.crt
        - --tls-private-key-file=/var/run/serving-cert/serving.key
        - --logtostderr=true
        - --prometheus-url=http://prometheus.prom.svc:9090/
        - --metrics-relist-interval=1m
        - --v=10
        - --config=/etc/adapter/config.yaml
        ports:
        - containerPort: 6443
        volumeMounts:
        - mountPath: /var/run/serving-cert
          name: volume-serving-cert
          readOnly: true
        - mountPath: /etc/adapter/
          name: config
          readOnly: true
        - mountPath: /tmp
          name: tmp-vol
      volumes:
      - name: volume-serving-cert
        secret:
          secretName: cm-adapter-serving-certs
      - name: config
        configMap:
          name: adapter-config
      - name: tmp-vol
        emptyDir: {}
  • pod spec의 args 부분에 prometheus-url에 prometheus k8s dns 를 적어준다.

 

  • Prometheus Service yaml
apiVersion: v1
kind: Service
metadata:
  name: custom-metrics-apiserver
  namespace: custom-metrics
spec:
  ports:
  - port: 443
    targetPort: 6443
  selector:
    app: custom-metrics-apiserver

 

  • Custom Metrics ApiService
apiVersion: apiregistration.k8s.io/v1beta1
kind: APIService
metadata:
  name: v1beta2.custom.metrics.k8s.io
spec:
  service:
    name: custom-metrics-apiserver
    namespace: custom-metrics
  group: custom.metrics.k8s.io
  version: v1beta2
  insecureSkipTLSVerify: true
  groupPriorityMinimum: 100
  versionPriority: 200
  • spec의 service는 prometheus-adapter의 svc를 입력한다.

 


 

 

예제는 아래의 깃주소를 참고

https://github.com/kubernetes-sigs/prometheus-adapter/blob/master/deploy/manifests/custom-metrics-apiservice.yaml

 

 


 

원하는 메트릭을 hpa의 조건으로 정하기

위와 같이 연결을 하면 이제 prometheus의 metric을 사용할 기본 토대가 마련되었다.

 

원하는 메트릭을 가져올 쿼리를 설정하는 곳은 prometheus adapter args로 설정한

/etc/adapter/config.yaml 에서 설정한다.

configmap으로 연결되어있으므로 adapter-config cm에 설정하면 된다.

 

설정하는 방법은 아래의 깃주소를 참고

https://github.com/kubernetes-sigs/prometheus-adapter/blob/master/docs/config.md

 

 

적용이 안되는 경우

  1. custom metric apiserver가 존재하지 않거나 연결이 되지 않은 경우
  1. 프로메테우스에 조건에 맞는 메트릭이 없는 경우
  1. 기타 이유들...

 

 

 

+ Recent posts