EKS AutoScaling
VPA
Kubernetes에서 지원하는 autoscaler로 파드에 대한 CPU 및 메모리를 자동으로 조정할 수 있게 지원한다. VPA를 사용하기 위해서는 메트릭 서버를 클러스터에 설치해 놓아야 한다.
https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler/hack 에 vpa-up.sh를 실행하여 VPA를 클러스터에 배포한다.
설치하게 될 경우 kube-system 네임스페이스에 VPA파드들이 설치된다.
파드가 조정이 필요한 경우 vpa-updater가 업데이트된 값으로 파드를 다시 시작한다.
반영되는데 꽤 많은 시간이 소요되었다.
테스트 결과 limit이 걸려있는 파드는 조정하지 못했다.
pod설정에 request와 lmit을 설정할 수 있는데 왜 사용해야 하는 경우는 언제일까
참고자료
HPA
파드의 수를 리소스 사용률에 따라 자동으로 조정한다. 메트릭 서버가 설치되어 있어야 한다.
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
# 최소 1개에서 최대 10개의 파드로 배포에 대해 50%의 사용률을 달성하려는 autoscaler가 생성된다.
리소스의 사용량과 파드의 최소 최대 크기를 명시해줘야한다.
kubectl get hpa
참고자료
- AWS HPA
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/horizontal-pod-autoscaler.html - Kubernetes HPA
https://kubernetes.io/ko/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
CA
파드가 실패하거나 다른 노드로 예약될 때 클러스터의 노드 수를 자동으로 조정한다.
kubernetes에서 제공하는 오픈소스이지만 클라우드와 연동되어 작동하기 때문에 몇가지 사전 조건이 필요하다.
- 클러스터 OIDC 공급자 생성
- Auto Scaling 태그 지정
- IAM 정책 및 역할 생성
kubernetes에 올라와있는 yaml파일을 다운받아 몇가지 커스텀해서 클러스터에 배포하면 된다.
https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
자동으로 노드를 Sclae out하고 싶은 경우에는 HPA와 연동하여 사용하면 된다.
주의사항
- 정책에 지정된 첫 번째 인스턴스 유형으로 스케줄링한다.
- 원래 인스턴스 유형보다 리소스가 적은 인스턴스가 있는 경우 파드가 배포되지 않을 수 있다.
- 원래 인스턴스 유형보다 리소스가 큰 경우 리소스가 낭비될 수 있다.
참고자료
- AWS AutoScaling
https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html - AWS 워크샵
https://awskrug.github.io/eks-workshop/scaling/deploy_ca/
Karpenter
쿠버네티스를 위해 노드를 프로비저닝 해 주는 오픈소스 프로젝트이다.
사전 조건
- 클러스터 OIDC 공급자 생성
- IAM 정책 생성
- Helm 설치
추가적으로 로드벨런스를 노출하기 위해선 CA와 마찬가지로 보안 그룹에 태그를 지정해주어야 한다.
카핀터 설치하기
helm repo add karpenter https://charts.karpenter.sh/
helm repo update
helm upgrade --install --namespace karpenter --create-namespace \
karpenter karpenter/karpenter \
--version ${KARPENTER_VERSION} \
--set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"=${KARPENTER_IAM_ROLE_ARN} \
--set clusterName=${CLUSTER_NAME} \
--set clusterEndpoint=${CLUSTER_ENDPOINT} \
--set aws.defaultInstanceProfile=KarpenterNodeInstanceProfile-${CLUSTER_NAME} \
--wait # for the defaulting webhook to install before creating a Provisioner
위 코드를 따라 helm차트를 배포한다.
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
name: default
spec:
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot"]
limits:
resources:
cpu: 1000
provider:
subnetSelector:
karpenter.sh/discovery: ${CLUSTER_NAME}
securityGroupSelector:
karpenter.sh/discovery: ${CLUSTER_NAME}
ttlSecondsAfterEmpty: 30
EOF
쿠버네티스에 Provisioner를 배포해야 한다.
CA의 경우 노드가 증가하거나 늘 때 노드의 수를 조정하는데 karpenter의 경우 JIT방식으로 항상 관찰하고 있다.
scale 조정이 ca에 비해 매우 빠르다
karpenter의 가장 큰 장점은 인스턴스의 크기를 자동으로 조절해준다.
Author And Source
이 문제에 관하여(EKS AutoScaling), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@choiys0212/EKS-AutoScaling저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)