Kubernetes (AWS EKS) 의 Autoscaler
Kubernetes 의 Autoscaler 를 사용하기 위해서는 우선
- Deployment 의 Resource request, limit을 모두 설정해야 한다.
- Horizontal Pod Autoscaler (HPA) 를 설정한다.
- AWS 의 Cluster Autoscaler (CA) 를 설정한다.
여기서 Resource의 request, limit 설정을 위해 Vertical Pod Autoscaler 및 Goldilocks를 활용하고 이를 통해 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와 서비스의 성격에 따라 실제 운영하면서 맞추어 나가는 방법이 좋은거 같다.
Top comments (0)