[EKS]AWS-Node-Terminate-Handler(@Karpenter)

xgro·2023년 7월 29일
0

EKS

목록 보기
1/2

📌 Summary

  • Spot Rebalance Recommendations 이벤트를 핸들링하는 AWS NTH에 대해 알아봅니다.
  • Karpenter와 병행하여 Spot으로 이루어진 워크로드를 보다 안정적으로 관리할 수 있습니다.


📌 AWS Node Termination Handler

이 프로젝트 는 API 또는 콘솔을 통한 EC2 유지 관리 이벤트 , EC2 스팟 중단 , ASG Scale-In , ASG AZ 재조정 및 EC2 인스턴스 종료 와 같이 EC2 인스턴스를 사용할 수 없게 만들 수 있는 이벤트에 Kubernetes 컨트롤 플레인이 적절하게 응답하도록 합니다. . 처리하지 않으면 애플리케이션 코드가 정상적으로 중지되지 않거나 전체 가용성을 복구하는 데 시간이 더 오래 걸리거나 중단되는 노드에 대한 작업을 실수로 예약할 수 있습니다. - https://github.com/aws/aws-node-termination-handler

EKS 환경에서 Karpenter를 도입하여 인프라를 운영하고자 할때, 많이 고민하는 부분중에 하나가 Spot EC2를 사용하고자 하는 요구사항에 부딫히게 됩니다.


👉 Why AWS NTH?

카펜터는 워크로드가 중단될 수 있는 이벤트들에 대해서 감시합니다.

  • Spot Interruption Warnings
  • Scheduled Change Health Events (Maintenance Events)
  • Instance Terminating Events
  • Instance Stopping Events

카펜터는 각종 워크로드가 중단 될 수 있는 이벤트에 대해서 감시하지만, 아직까지는 Spot Rebalance Recommendations에 대해서는 지원하지 않습니다.

Note

Karpenter publishes Kubernetes events to the node for all events listed above in addition to Spot Rebalance Recommendations.

Karpenter does not currently support cordon, drain, and terminate logic for Spot Rebalance Recommendations. - karpenter docs

AWS NTH를 사용하여 Spot Rebalance Recommendations 에 대한 이벤트를 수신하여 운영에 적용할 수 있습니다.

Spot Rebalance Recommendations 신호는 스팟 인스턴스 중단 2분 전 공지보다 일찍 도착할 수 있으므로 스팟 인스턴스를 사전에 관리할 수 있는 기회를 제공합니다.

중단 위험이 높아지지 않는 신규 또는 기존 스팟 인스턴스에 대한 워크로드를 리밸런싱하도록 결정할 수 있습니다.

스팟 종료 이벤트에 보다 민감하게 반응하여 새로운 워크로드를 생성하여 인프라를 관리할 수 있습니다.


✅ Modes

본 블로그에서는 IMDS 프로세서를 통해 배포하는 방법만을 기술하였습니다.

Instance Metadata Service Processor

각각의 Spot 인스턴스에 aws-node-termination-handlerDaemonset으로 배치하여 인스턴스의 수명 주기와 같이 관리합니다.



Queue Processor


출처 - awsdocs

Spot 이벤트를 감지하는 파드를 여러개 배치하여 AWS의 SQS와 연동해 인스턴스의 수명주기를 관리합니다.


👉 Installation(IMDS)

Yaml과 Helm 차트를 이용하여 두가지 방법을 통해 AWS NTH를 배포할 수 있습니다.

✅ Yaml

kubectl apply -f https://github.com/aws/aws-node-termination-handler/releases/download/v1.20.0/all-resources.yaml

✅ Helm

export CHART_VERSION=0.22.0
echo $CHART_VERSION

aws ecr-public get-login-password \
  --region us-east-1 | helm registry login \
  --username AWS \
  --password-stdin public.ecr.aws

helm upgrade --install aws-node-termination-handler \
  --namespace kube-system \
  -f values.yaml \
  oci://public.ecr.aws/aws-ec2/helm/aws-node-termination-handler --version $CHART_VERSION

# values.yaml
# Create node OS specific daemonset(s). (e.g. "linux", "windows", "linux windows")
targetNodeOs: linux

# K8s DaemonSet update strategy.
updateStrategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 25%

# enableSpotInterruptionDraining If false, do not drain nodes when the spot interruption termination notice is received. Only used in IMDS mode.
enableSpotInterruptionDraining: true

# enableScheduledEventDraining If false, do not drain nodes before the maintenance window starts for an EC2 instance scheduled event. Only used in IMDS mode.
enableScheduledEventDraining: true

# enableRebalanceMonitoring If true, cordon nodes when the rebalance recommendation notice is received. Only used in IMDS mode.
enableRebalanceMonitoring: true

# enableRebalanceDraining If true, drain nodes when the rebalance recommendation notice is received. Only used in IMDS mode.
enableRebalanceDraining: true

# deleteSqsMsgIfNodeNotFound If true, delete the SQS Message from the SQS Queue if the targeted node(s) are not found. Only used in Queue Processor mode.
deleteSqsMsgIfNodeNotFound: false

daemonsetAffinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
            - key: "eks.amazonaws.com/compute-type"
              operator: NotIn
              values:
                - fargate

nodeSelector:
  "karpenter.sh/capacity-type": spot
  "karpenter.sh/initialized": "true"

👉 Cleanup

helm uninstall aws-node-termination-handler --namespace kube-system


📌 Conclusion

Karpenter 공식 문서 FAQ에 따르면, 동일한 이벤트를 처리하는 두 구성 요소에서 발생할 수 있는 충돌 가능성 때문에 AWS node termination handler는 동시에 운영하는 것을 지양하고 있습니다.

아직은 Karpenter가 공식적으로 Spot Rebalance Recommendations를 지원하지 않으므로 NTH를 병행하여 인프라를 운영하고 있습니다.

Spot 종료 이벤트는 인스턴스가 종료되기 2분전에만 알람이 발생하므로, AWS NTH를 이용하여 예상치 못한 종료에 대비할 수 있습니다.



📎 Reference

  • EC2 instance rebalance recommendations - awsdocs
  • Karpenter with AWS Node Termination Handelr - blogs
  • AWS Node Termination Handler -github
  • Automate deployment of Node Termination Handler in Amazon EKS by using a CI/CD pipeline - awsdocs
profile
안녕하세요! DevOps 엔지니어 이재찬입니다. 블로그에 대한 피드백은 언제나 환영합니다! 기술, 개발, 운영에 관한 다양한 주제로 함께 나누며, 더 나은 협업과 효율적인 개발 환경을 만드는 과정에 대해 인사이트를 나누고 싶습니다. 함께 여행하는 기분으로, 즐겁게 읽어주시면 감사하겠습니다! 🚀

0개의 댓글