Ssoon
[5주차] EKS Autoscaling - KARPENTER - EC2 SPOT DEPLOYMENTS 본문
[5주차] EKS Autoscaling - KARPENTER - EC2 SPOT DEPLOYMENTS
구구달스 2023. 5. 25. 12:20CloudNet@ 팀의 AWS EKS Workshop Study 5주차 정리입니다.
# Karpenter Workshop 의 내용입니다.
Karpenter는 애플리케이션의 요구 사항과 클러스터의 가용성을 고려하여 Spot 인스턴스를 적절하게 사용하여 리소스를 할당하고 파드를 배치합니다.
EC2 Spot Deployments를 사용하면 애플리케이션을 보다 비용 효율적으로 실행할 수 있습니다. Karpenter는 Spot 인스턴스의 가용성과 가격을 모니터링하고, Spot 인스턴스의 가격이 허용 가능한 범위 내에 있을 때 애플리케이션을 Spot 인스턴스에 배치합니다. 이를 통해 AWS의 저렴한 리소스를 활용하여 비용을 절감할 수 있습니다.
- EC2 Spot 을 사용할 때 카펜터는 다양한 인스턴스 목록을 선택하고 price-capacity-optimized 전략을 사용하여 Spot 종료 빈도를 줄이는 데 최적이면서 배치 대기 중인 pending pods 의 낭비를 줄이는 데 이상적인 EC2 Spot pools 을 선택합니다.
- 현재 rebalancing recommendation 을 지원하지 않으므로 rebalancing recommendation signals 를 정상적으로 처리하도록 node termination handler 를 설정합니다. 이 구성을 지원하기 위해 default 프로비저너를 사용합니다.
Spot Interruptions은 어떻게 작동하나요?
사용자가 pool 에서 pool 이 고갈될 때까지 On-Demand 인스턴스를 요청하면 시스템은 pool 에서 종료할 Spot Instances 집합을 선택합니다. Spot Instance pool 은 인스턴스 유형(예: m5.large), 운영 체제, 가용 영역 및 네트워크 플랫폼이 동일한 미사용 EC2 instances 집합입니다. Spot Instances 에는 2분 전에 중단 알림이 전송되어 정상적으로 종료됩니다.
Amazon EC2가 용량을 다시 필요로 할 때(또는 스팟 가격이 요청에 대한 최대 가격을 초과할 때) Spot Instance가 종료됩니다. 최근에는 Spot Instance 가 인스턴스 rebalance recommendations 도 지원합니다. Amazon EC2는 인스턴스 rebalance 권장 신호를 전송하여 스팟 인스턴스가 중단될 위험이 높다는 것을 알려줍니다. 이 신호는 2분 동안 Spot Instance interruption 알림을 기다릴 필요 없이 기존 또는 새로운 Spot Instance 전반에서 워크로드의 균형을 사전에 rebalance 할 수 있는 기회를 제공합니다.
Karpenter and Spot Interruptions
- Karpenter는 기본적으로 EventBridge 를 통해 Spot Interruption Notifications 으로 채워진 SQS 대기열에서 이벤트를 소비하여 Spot Interruption Notifications 을 처리합니다.
- 카펜터가 Spot Interruption Notifications 을 수신하면 실행 중인 모든 파드의 중단된 노드를 정상적으로 비우는 동시(drain)에 해당 파드가 신속하게 스케줄링할 수 있는 새 노드를 프로비저닝합니다.
- Karepnter는 아직 Rebalance Recommendation signals 를 지원하지 않으므로 이러한 신호를 캡처하고 노드를 정상적으로 종료 처리하기 위해 AWS Node Termination Handler 라는 프로젝트를 배포할 수 있습니다.
- Node termination handler 는 Queue Mode 와 Instance Metadata Mode 의 두 가지 모드로 작동합니다.
- Instance Metadata Mode 를 사용하는 경우, aws-node-termination-handler 는 각 호스트에서 (DaemonSet)으로 실행되는 작은 파드로 Instance Metadata Service 를 모니터링합니다.
- DaemonSet 은 /spot 및 /events와 같은 IMDS 경로를 모니터링하고 그에 따라 해당 노드를 drain 및/또는 cordon 합니다.
- 이 워크샵에서는 Karpenter의 기본 Spot Interruption handling 를 사용하므로 Node-Termination-Handler 를 배포하지 않습니다.
- 그러나 Rebalance Recommendation signals 를 처리해야 하는 경우 Node-Termination-Handler 가 필요하며 Karpenter의 Spot Interruption Handling 를 통해 안전하게 실행할 수 있습니다.
Create a Spot Deployment
cat <<EOF > inflate-spot.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: inflate-spot
spec:
replicas: 0
selector:
matchLabels:
app: inflate-spot
template:
metadata:
labels:
app: inflate-spot
spec:
nodeSelector:
intent: apps
karpenter.sh/capacity-type: spot
containers:
- image: public.ecr.aws/eks-distro/kubernetes/pause:3.2
name: inflate-spot
resources:
requests:
cpu: "1"
memory: 256M
EOF
kubectl apply -f inflate-spot.yaml
- EventBridge > Rules
Spot replicas 수를 2로 늘립니다.
kubectl scale deployment inflate-spot --replicas 2
- inflate-spot deploy 를 2개의 replicas 로 확장하는 것에 대한 응답으로 프로비저닝된 spot 노드를 확인합니다.
kubectl get node --selector=intent=apps -L kubernetes.io/arch -L node.kubernetes.io/instance-type -L karpenter.sh/provisioner-name -L topology.kubernetes.io/zone -L karpenter.sh/capacity-type
Spot replicas 수를 0로 변경합니다.
kubectl scale deployment inflate-spot --replicas 0
'AWS EKS Workshop Study' 카테고리의 다른 글
[5주차] EKS Autoscaling - KARPENTER - USING ALTERNATIVE PROVISIONERS (0) | 2023.05.25 |
---|---|
[5주차] EKS Autoscaling - KARPENTER - MULTI-ARCHITECTURE DEPLOYMENTS (0) | 2023.05.25 |
[5주차] EKS Autoscaling - KARPENTER - CONSOLIDATION (0) | 2023.05.25 |
[5주차] EKS Autoscaling - KARPENTER - AUTOMATIC NODE PROVISIONING (0) | 2023.05.25 |
[5주차] EKS Autoscaling - KARPENTER - INSTALL KARPENTER (0) | 2023.05.25 |