반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- serving
- Argo
- Model Serving
- MLflow
- seldon core
- mlops
- Continuous Deployment
- eBPF
- keda
- Kopf
- Litmus
- Kubernetes
- operator
- argocd
- kubernetes operator
- gitops
- blue/green
- opentelemetry
- CI/CD
- Kubeflow
- 오퍼레이터
- xdp
- knative
- opensearch
- Pulumi
- 카오스 엔지니어링
- nginx ingress
- CANARY
- tekton
- Kubernetes 인증
Archives
- Today
- Total
Kubernetes 이야기
Keda와 Prometheus를 이용한 Scale in/out 본문
반응형
KEDA와 Prometheus를 사용하면 사용자 요청을 기반으로 애플리케이션의 확장/축소를 할 수 있다.
KEDA는 Azure Queue, Kafka, RabbitMQ, Redis, NATS 등 20여가지가 넘는 다양한 메시지 이벤트를 이용하여 Scale in/out을 할 수 있도록 지원한다. 그러나 HTTP 요청 이벤트 기반의 확장은 지원하지 않아서 Prometheus를 이용한 확장을 사용한다.
Nginx 설치
helm install ingress-controller stable/nginx-ingress \
--namespace ingress-nginx \
--set controller.metrics.enabled=true \
--set controller.podAnnotations."prometheus\.io/scrape"="true" \
--set controller.podAnnotations."prometheus\.io/port"="10254"
KEDA 배포
https://kmaster.tistory.com/57
앱 배포
apiVersion: apps/v1
kind: Deployment
metadata:
name: sampleapp
spec:
replicas: 1
selector:
matchLabels:
app: sampleapp
template:
metadata:
labels:
app: sampleapp
spec:
containers:
- name: sampleapp
image: nginx
ports:
- containerPort: 80
imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: sampleapp
spec:
type: ClusterIP
selector:
app: sampleapp
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: ingress-sampleapp
spec:
rules:
- host: sampleapp.10.20.200.121.nip.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sampleapp
port:
number: 80
호출해 보면 아래와 같다.
KEDA 설정
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: prometheus-scaledobject
labels:
deploymentName: sampleapp
spec:
scaleTargetRef:
name: sampleapp
pollingInterval: 15
cooldownPeriod: 30
minReplicaCount: 1
maxReplicaCount: 10
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus-operator-prometheus.ingress-nginx.svc.cluster.local:9090
metricName: access_frequency
threshold: '100'
query: sum(rate(nginx_ingress_controller_request_size_count{exported_service="sampleapp"}[1m]))
위의 설정은 1분 평균 요청 수를 기반으로 scale을 조정하지만 nginx_ingress_nginx_connections_active 등 다양한 조건으로 scale을 할 수 있다.
반응형
'Kubernetes > devops' 카테고리의 다른 글
GitOps and Flux (0) | 2022.05.07 |
---|---|
Argo Event (0) | 2022.05.03 |
Kubernetes의 Replica를 0으로 확장 (KEDA) (0) | 2022.04.27 |
OWASP ZAP 을 Kubernetes 환경에서 사용하기 (0) | 2022.04.02 |
code-server로 개발하기 (0) | 2022.03.30 |
Comments