2024. 11. 27. 17:38, note
Horizontal Pod Autoscaler (HPA)๋ Kubernetes์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถํ์ ๋ฐ๋ผ Pod์ ๊ฐ์๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋๋ ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ(์: ๋คํธ์ํฌ ํธ๋ํฝ, ์์ฒญ ์ ๋ฑ)์ ๊ธฐ์ค์ผ๋ก ์ค์ผ์ผ๋งํฉ๋๋ค.
HPA์ ์ฃผ์ ๊ตฌ์ฑ ์์
- Target Resource:
- HPA๊ฐ ์ ์ฉ๋ Deployment, ReplicaSet, ๋๋ StatefulSet ๋ฑ์ ๋ฆฌ์์ค.
- Metrics:
- ๊ธฐ๋ณธ์ ์ผ๋ก CPU/๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ๊ฐ์ ๋ฆฌ์์ค ๋ฉํธ๋ฆญ์ ์ฌ์ฉ.
- ์ฌ์ฉ์ ์ ์ ๋ฉํธ๋ฆญ(Custom Metrics)๊ณผ ์ธ๋ถ ๋ฉํธ๋ฆญ(External Metrics)๋ ์ง์.
- ์ค์ผ์ผ๋ง ๋ฒ์:
- ์ต์ ๋ฐ ์ต๋ Pod ๊ฐ์๋ฅผ ์ค์ .
HPA ์๋ ๋ฐฉ์
- ๋ฉํธ๋ฆญ ์์ง:
- HPA๋ Metrics Server๋ฅผ ํตํด ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์กฐํํฉ๋๋ค.
- ์ค์ผ์ผ๋ง ๊ณ์ฐ:
- HPA๋ ๋ชฉํ ๋ฉํธ๋ฆญ(Target Value)๊ณผ ํ์ฌ ๋ฉํธ๋ฆญ(Current Value)์ ๋น๊ตํ์ฌ Pod ๊ฐ์๋ฅผ ์กฐ์ .
- ์: CPU ์ฌ์ฉ๋ ๊ธฐ์ค ์ค์ผ์ผ๋ง ๊ณต์
$DesiredReplicas = CurrentReplicas \times \frac{CurrentMetricValue}{TargetMetricValue}$
- Pod ์ ์กฐ์ :
- ๊ณ์ฐ๋ Pod ์๊ฐ ์ค์ ๋ ๋ฒ์๋ฅผ ์ด๊ณผํ์ง ์๋ ํ, Kubernetes๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Pod๋ฅผ ์์ฑํ๊ฑฐ๋ ์ ๊ฑฐ.
HPA ์ค์ ๋ฐฉ๋ฒ
1. ์ ์ ์กฐ๊ฑด
- Metrics Server ์ค์น: HPA๋ Metrics Server๋ฅผ ํตํด ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ฏ๋ก ๋ฐ๋์ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- ๋์ ๋ฆฌ์์ค(์: Deployment)๊ฐ ์ด๋ฏธ ๋ฐฐํฌ๋์ด ์์ด์ผ ํฉ๋๋ค.
2. HPA ๋งค๋ํ์คํธ ์์ฑ ๋ฐ ์ ์ฉ
(1) Deployment ์์ฑ
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx
resources:
requests:
cpu: 200m
limits:
cpu: 500m
์ ์ฉํ๊ธฐ
kubectl apply -f deployment.yaml
(2) HPA ๋งค๋ํ์คํธ ์์ฑ
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
์ ์ฉํ๊ธฐ
kubectl apply -f hpa.yaml
3. HPA ํ์ธ
kubectl get hpa
์ถ๋ ฅ ์์
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
my-app-hpa Deployment/my-app 40% / 50% 2 10 3 5m
HPA ๋์ ํ ์คํธ
- ๋ถํ ์์ฑ
- ๋ถํ๋ฅผ ์๋ฎฌ๋ ์ด์
ํ๊ธฐ ์ํด
kubectl run
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ๋ถํ ํ ์คํธ ๋๊ตฌ(์:stress
,ab
)๋ฅผ ํ์ฉํฉ๋๋ค.
kubectl run -i --tty load-generator --image=busybox /bin/sh
# ๋ถํ ์์ฑ (CPU๋ฅผ 100% ์ฌ์ฉ)
while true; do :; done
- HPA ์ํ ํ์ธ
kubectl get hpa
๋ถํ๊ฐ ์ฆ๊ฐํ๋ฉด REPLICAS
๊ฐ์ด ์ฆ๊ฐํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฃผ์ ์ค์ ์ต์
- ๋ฉํธ๋ฆญ ํ์
- Resource: CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฑ ๋ฆฌ์์ค ๊ธฐ๋ฐ ๋ฉํธ๋ฆญ.
- Pods: Pod์ ํน์ ๋ฉํธ๋ฆญ(์: ์์ฒญ ์).
- External: ์ธ๋ถ ๋ฉํธ๋ฆญ(์: ํด๋ผ์ฐ๋ ์๋น์ค, ์ธ๋ถ API).
- ์ค์ผ์ผ๋ง ์ ์ฑ
HPA v2๋ถํฐ๋ ์ค์ผ์ผ๋ง ์ ์ฑ ์ ์ธ๋ถ์ ์ผ๋ก ์ ์ํ ์ ์์ต๋๋ค.behavior: scaleUp: stabilizationWindowSeconds: 30 selectPolicy: Max policies: - type: Percent value: 50 periodSeconds: 60 scaleDown: stabilizationWindowSeconds: 60 selectPolicy: Min policies: - type: Percent value: 20 periodSeconds: 60
๊ธฐํ ํ
- HPA๊ฐ ์๋ํ์ง ์๋ ๊ฒฝ์ฐ:
- Metrics Server๊ฐ ์ ๋๋ก ์ค์น๋์ด ์๋์ง ํ์ธ:
kubectl get apiservices | grep metrics
- Deployment๊ฐ
resources.requests
๋ฅผ ์ ์ํ๋์ง ํ์ธ.
- Metrics Server๊ฐ ์ ๋๋ก ์ค์น๋์ด ์๋์ง ํ์ธ:
- Custom Metrics ์ฌ์ฉ:
- Prometheus Adapter๋ฅผ ์ค์นํ๊ณ Prometheus ๋ฉํธ๋ฆญ์ ํ์ฉ.
HPA๋ Kubernetes ํ๊ฒฝ์์ ์ํฌ๋ก๋๋ฅผ ๋์ ์ผ๋ก ํ์ฅํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ธ CPU/๋ฉ๋ชจ๋ฆฌ ๊ธฐ์ค ์ธ์๋ ๋ค์ํ ๋ฉํธ๋ฆญ์ ํ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ํ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
'note' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SparkSession๊ณผ SparkContext ์ดํดํ๊ธฐ (0) | 2024.12.04 |
---|---|
์์ ๋ก ์ดํด๋ณด๋ AI๋ฅผ ์ํ ๋ฐ์ดํฐ ์์ง๋์ด๋ง (0) | 2024.11.30 |
Spark ์กฐ์ธ(join) ์ต์ ํ (0) | 2024.11.26 |
Kubernetes์ Probe ์์๋ณด๊ธฐ (0) | 2024.11.25 |
๋์ปค ๋ฉํฐ์คํ ์ด์ง (0) | 2024.11.24 |