Hpa의 동작 방식
출처: 쿠버네티스 공식 홈페이지
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를 바라본다.
실질적으론 서비스를 바라보고 있다.
적용해보기
- Prometheus adapter 설치
- Prometheus 와의 연결 확인
- Custom Metrics ApiServer 설치
- 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를 입력한다.
예제는 아래의 깃주소를 참고
원하는 메트릭을 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
적용이 안되는 경우
- custom metric apiserver가 존재하지 않거나 연결이 되지 않은 경우
- 프로메테우스에 조건에 맞는 메트릭이 없는 경우
- 기타 이유들...
Uploaded by Notion2Tistory v1.1.0