Kubernetes 의 Resources 설정을 위한 VPA 및 Goldilocks

Thomas Kim·2021년 12월 17일
0

Kubernetes 의 Autoscaler

Kubernetes (AWS EKS) 의 Autoscaler 를 사용하기 위해서는 우선
1. Deployment 의 Resource request, limit을 모두 설정해야 한다.
2. Horizontal Pod Autoscaler (HPA) 를 설정한다.
3. AWS 의 Cluster Autoscaler (CA) 를 설정한다.

여기서 Resource의 request, limit 설정을 위해 Vertical Pod AutoscalerGoldilocks를 활용하고 이를 통해 request, limit 을 설정하는데 참고 할 수 있다.


VPA 및 Goldilocks의 역할

사실 VPA는 Kubernetes 의 Autoscaler 중 하나로 Horizontal 하게 Pod/ Node를 늘리는 HPA와 달리 Vertical 하게 스펙을 높이는 방법이다. 그런데 VPA controller stack은 recommendation engine 을 포함하고 있고, 가이드라인을 제공하기 위해 현재 resource 사용량을 계속 수집한다. 결국 보통 실제 VPA를 사용한 Autoscale을 사용 하지는 않고, recommendation engine 만 사용하도록 설정하여 request, limit을 정하고 HPA, CA를 통해 Autoscale을 한다.

여기서 Goldilocks 의 역할은 불편하게 kubectl 을 통해 필요한 서비스의 VPA recommendation 을 확인하는 대신 쉽게 Web UI를 통해 이를 확인 할 수 있게 도와준다.


Kube Metrics Server 설치

우선 지표 수집을 위해 Kubernetes 의 metrics-server를 설치해야 한다.

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

제대로 적용되었는지 확인한다.

kubectl get deployment metrics-server -n kube-system

VPA 및 Goldilocks 설치

우리는 full VPA install 이 필요하지 않고 recommender 만 필요하다. 아래와 같이 설치하면 VPA recommender와 Goldilocks를 설치한다.

$ helm repo add fairwinds-stable https://charts.fairwinds.com/stable
$ helm install --set updater.enabled=false vpa fairwinds-stable/vpa --namespace vpa --create-namespace
$ helm install goldilocks fairwinds-stable/goldilocks --namespace goldilocks --create-namespace 

Goldilocks 의 chart를 통해 VPA를 설치하면 쉽게 원하는 recommendation engine 만을 설치할 수 있다. https://github.com/FairwindsOps/charts/tree/master/stable/vpa#components 참고

VPA recommender를 사용할 namespace를 지정한다.

$ kubectl label ns default goldilocks.fairwinds.com/enabled=true

Goldilocks 확인

kubernetes port forwarding 을 통해 Goldilocks 에 접속한다.

$ kubectl -n goldilocks port-forward svc/goldilocks-dashboard 8080:80

kubernetes port forwarding을 remote 에서 하는 경우 localhost를 통해 Goldilocks를 접근하기 위해 local 에서 Local Port Forwarding을 해야한다.

ssh -L 8080:127.0.0.1:8080 ec2-~~.compute.amazonaws.com

http://localhost:8080 을 열어본다.

서비스가 배포되지 않은 상황에서는 아무것도 없을것이다. 서비스를 올리고 사용하면서 확인하면 각 서비스의 설정과 recommendation 을 확인할 수 있다.
하지만... 실제 사용해본 결과 참고는 할 수 있지만 이 수치가 절대적인 값이 될 수는 없다. Language와 서비스의 성격에 따라 실제 운영하면서 맞추어 나가는 방법이 좋은거 같다.

profile
Software Developer at SK Telecom

0개의 댓글