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이 걸려있는 파드는 조정하지 못했다.
참고자료
파드의 수를 리소스 사용률에 따라 자동으로 조정한다.
HPA를 사용하기 위해선 메트릭 서버가 설치되어 있어야 한다.
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
# 최소 1개에서 최대 10개의 파드로 배포에 대해 50%의 사용률을 달성하려는 autoscaler가 생성된다.
리소스의 사용량과 파드의 최소 최대 크기를 명시해줘야한다.
kubectl get hpa
참고자료
파드가 실패하거나 다른 노드로 예약될 때 클러스터의 노드 수를 자동으로 조정한다.
kubernetes에서 제공하는 오픈소스이지만 클라우드와 연동되어 작동하기 때문에 몇가지 사전 조건이 필요하다.
다음 조건은 AWS 기준이다.
kubernetes에 올라와있는 yaml파일을 다운받아 몇가지 커스텀해서 클러스터에 배포하면 된다.
https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
자동으로 노드를 Scale out하고 싶은 경우에는 HPA와 연동하여 사용하면 된다.
주의사항
참고자료
쿠버네티스를 위해 노드를 프로비저닝 해주는 AWS의 오픈소스 프로젝트이다.
CA와 마찬가지로 노드의 사용량에 따라 자동으로 수를 조정해준다.
사전 조건
추가적으로 로드벨런스를 노출하기 위해선 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와 차이점은 CA의 경우 노드가 증가하거나 늘 때 노드의 수를 조정하는데 karpenter의 경우 JIT방식으로 항상 관찰하고 있다.
JIT방식으로 노드를 관찰하고 있기 때문에 scale 조정이 ca에 비해 매우 빠르다.
karpenter의 가장 큰 장점은 노드의 인스턴스의 크기를 자동으로 조절해준다.
하지만 현재는 AWS에서만 공식적으로 지원하고있다.