7) HPA 설정 가이드
Actuator 및 프로메테우스 설정 추가
설명
- HPA 구성을 위한 프로메테우스 설정 가이드
- 메모리 사용량 70%초과 시 POD 추가
ConfigMap 설정
- cloud-ekms-config
# 프로메테우스 앤드포인트 노출 포트 (기본 설정: 9090)
METRICS_PORT: 9090
# Metric 사용 여부 (기본 설정: true)
METRICS_ENABLED: true
# Metric 경로에 대한 인증 활성화 (기본 설정: false)
SECURITY_ACTUATOR_ENABLED: false
- cloud-skms-config
# 프로메테우스 앤드포인트 노출 포트 (기본 설정: 9090)
METRICS_PORT: 9090
# Metric 사용 여부 (기본 설정: true)
METRICS_ENABLED: true
# Metric 경로에 대한 인증 활성화 (기본 설정: false)
SECURITY_ACTUATOR_ENABLED: false
Service의 labels 및 metric port 추가
- cloud-ekms-service
apiVersion: v1
kind: Service
metadata:
labels:
app: cloud-ekms-service ### labels.app 정보 추가 ###
name: cloud-ekms-service
namespace: dev
spec:
type: ClusterIP
ports:
- name : ekms
port : 80
protocol: TCP
targetPort: 8080
- name : metric ### metric 포트 정보 추가 ###
port : 9090
protocol: TCP
targetPort: 9090
selector:
app: cloud-ekms-service
- cloud-skms-service
apiVersion: v1
kind: Service
metadata:
labels:
app: cloud-skms-service ### labels.app 정보 추가 ###
name: cloud-skms-service
namespace: dev
spec:
type: ClusterIP
ports:
- name : skms
port : 80
protocol: TCP
targetPort: 8080
- name : metric ### metric 포트 정보 추가 ###
port : 9090
protocol: TCP
targetPort: 9090
selector:
app: cloud-skms-service
쿠버네티스 설정
ServiceMonitor 추가
- cloud-ekms-service-monitor
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: cloud-ekms-service-monitor
namespace: dev
labels:
app: cloud-ekms-service-monitor
release: rancher-monitoring
spec:
selector:
matchLabels:
app: cloud-ekms-service
endpoints:
- interval: 30s
path: /sc-actuator/prometheus
port: metric
namespaceSelector:
matchNames:
- dev
- cloud-skms-service-monitor
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: cloud-skms-service-monitor
namespace: dev
labels:
app: cloud-skms-service-monitor
release: rancher-monitoring
spec:
selector:
matchLabels:
app: cloud-skms-service
endpoints:
- interval: 30s
path: /sc-actuator/prometheus
port: metric
namespaceSelector:
matchNames:
- dev
HPA 적용 : 메모리 사용량 70%초과 시 POD 추가
- cloud-ekms-service-hpa
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: cloud-ekms-service-hpa
namespace: dev
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: cloud-ekms-service
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 30
scaleUp:
stabilizationWindowSeconds: 30
- cloud-skms-service-hpa
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: cloud-skms-service-hpa
namespace: dev
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: cloud-skms-service
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 30
scaleUp:
stabilizationWindowSeconds: 30
- hpa 리소스 목록 조회 : kubectl get hpa -n dev
소스 적용 내용(개발자 확인 사항)
Spring Boot 디펜던시 추가
- build.gradle
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
implementation 'org.springframework.boot:spring-boot-starter-security'
ConfigMap 설정 추가
- application.yml
management:
#매트릭스에 추가적인 태그 설정 (prometheus 에서 매트릭스 수집할 때 애플리케이션 이름으로 구분 가능)
metrics:
export:
prometheus:
enabled: ${METRICS_ENABLED:true} #prometheus 매트릭스 수집 기능을 활성화
tags:
application: ${spring.application.name}
#엔드포인트 설정
endpoints:
enabled-by-default: false #모든 엔드포인트 비활성화
jmx:
exposure:
exclude: health #JMX를 통해 health 정보 노출하지 않도록 설정
web:
exposure:
include: metrics,health,info,prometheus #웹 환경에서 노출할 엔드포인트 지정
base-path: /sc-actuator #웹 엔드포인트가 /sc-actuator 경로 아래에 노출되도록 설정
#개별 엔드포인트 활성화 설정
endpoint:
info:
enabled: ${METRICS_ENABLED:true}
health:
enabled: ${METRICS_ENABLED:true}
prometheus:
enabled: ${METRICS_ENABLED:true}
metrics:
enabled: ${METRICS_ENABLED:true}
server:
port: ${METRICS_PORT:9090} #엔드포인트들이 노출되는 포트
security:
actuator:
enabled: ${SECURITY_ACTUATOR_ENABLED:false}