kubernetes
[따배쿠] Kubernetes Autoscaling - 운영
bbiyak2da
2025. 1. 19. 15:45
Metric Server
Metric server 설치
[Metric Server 설치]
root@master:~/Getting-Start-Kubernetes/18# git clone https://github.com/237summit/kubernetes-metrics-server.git
Cloning into 'kubernetes-metrics-server'...
remote: Enumerating objects: 25, done.
remote: Counting objects: 100% (25/25), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 25 (delta 9), reused 9 (delta 1), pack-reused 0 (from 0)
Receiving objects: 100% (25/25), 5.48 KiB | 5.48 MiB/s, done.
Resolving deltas: 100% (9/9), done.
root@master:~/Getting-Start-Kubernetes/18# ls
deploy_web.yaml hpa_web.yaml kubernetes-metrics-server
root@master:~/Getting-Start-Kubernetes/18# cd kubernetes-metrics-server
root@master:~/Getting-Start-Kubernetes/18/kubernetes-metrics-server# kubectl apply -f .
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
[Metric Server 확인]
root@master:~/Getting-Start-Kubernetes/18/kubernetes-metrics-server# kubectl get deploy -A
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
default my-nginx 2/2 2 2 11d
kube-logging elasticsearch-client 1/1 1 1 10d
kube-logging elasticsearch-master 1/1 1 1 10d
kube-system calico-kube-controllers 1/1 1 1 11d
kube-system coredns 2/2 2 2 11d
kube-system metrics-server 1/1 1 1 113s
Pod 및 Service 생성
[Pod 및 Service 생성]
root@master:~/Getting-Start-Kubernetes/18# vi deploy_web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- image: smlinux/hpa-example
name: web
ports:
- containerPort: 80
resources:
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: svc-web
spec:
ports:
- port: 80
targetPort: 80
selector:
app: web
[Pod 및 Service 확인]
root@master:~/Getting-Start-Kubernetes/18# kubectl get deploy,service
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/deploy-web 1/1 1 1 94s
deployment.apps/my-nginx 2/2 2 2 11d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d
service/svc-web ClusterIP 10.100.59.214 <none> 80/TCP 94s
Horizontal Pod Autoscaler 생성
[Horizontal Pod Autoscaler 생성]
root@master:~/Getting-Start-Kubernetes/18# vi hpa_web.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: hpe-web
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: deploy-web
targetCPUUtilizationPercentage: 50
CPU가 50% 넘기면, Replicas를 최소 1개에서 10개까지 자동으로 scaling 요청
root@master:~/Getting-Start-Kubernetes/18# kubectl apply -f hpa_web.yaml
horizontalpodautoscaler.autoscaling/hpe-web created
[확인]
root@master:~/Getting-Start-Kubernetes/18# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpe-web Deployment/deploy-web cpu: <unknown>/50% 1 10 1 30s
[무한루프 실행]
무한루프를 실행해서 CPU 부하를 가한다.
HPA를 통해 Pod가 Scale in 된 것을 확인
무한루프 실행을 멈추면 CPU가 감소하고 다시 Scale Out
Scale in 되면 5분 대기 후 작동
[참고 영상]
https://www.youtube.com/watch?v=gaYBOH-obJA&list=PLApuRlvrZKohLYdvfX-UEFYTE7kfnnY36&index=11