12-12 23:12
반응형
250x250
Recent Posts
Recent Comments
Link
관리 메뉴

DevOps Tasks

[Kubernetes] Karpenter Spot Node 모니터링을 위한 EventBridge 설정 본문

Kubernetes

[Kubernetes] Karpenter Spot Node 모니터링을 위한 EventBridge 설정

데밥스 2024. 12. 3. 15:56
728x90
반응형

 

Karpenter는 AWS에서 노드 프로비저닝을 자동화하는 강력한 오픈소스 툴로, 효율적인 자원 관리와 비용 최적화를 위해 Spot 인스턴스를 활용합니다.

하지만 Spot 인스턴스는 가격 변화와 자원 가용성에 따라 중단될 수 있기 때문에 안정적인 서비스 운영을 위해 Spot 인스턴스의 라이프사이클을 모니터링하는 것은 필수적입니다.

AWS EventBridge를 활용하면 Spot 인스턴스와 관련된 이벤트를 실시간으로 모니터링하고 적절한 대응을 자동화할 수 있습니다.

이 글에서는 `aws.ec2`와 `aws.ec2fleet` 두 가지 이벤트 소스를 결합하여 Karpenter 노드의 Spot 인스턴스를 효과적으로 모니터링하는 방법을 설명합니다.

자세한 AWS EventBridge 에 대한 글은 아래를 참고하시면 됩니다.

 

Event Driven Architecture with AWS Infra Monitoring

EDA (Event Driven Architecture) AWS Infra Monitoring 관리하는 콘솔이 증가함에 따라 AWS EventBridge를 활용하여 각 콘솔의 인프라 변경 사항을 중앙 DevOps 콘솔로 라우팅 하는 EDA 구현합니다.구체적으로, 각 콘

rldnjsdlsi.tistory.com


EventBridge를 활용한 Spot 인스턴스 모니터링 개요

 

 

Spot 인스턴스 모니터링을 위해 설정할 주요 소스와 이벤트 타입은 다음과 같습니다.

`aws.ec2` Source

이 Source는 개별 Spot 인스턴스와 관련된 주요 이벤트를 제공합니다.

  • 모니터링할 이벤트 타입
{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Spot Instance Interruption Warning"]
}

`EC2 Spot Instance Interruption Warning`

AWS에서 Spot 인스턴스를 종료할 예정임을 사전 경고.

최대 2분의 대응 시간을 제공하며 서비스 장애를 예방하는 데 매우 중요.


`aws.ec2fleet` Source

Spot Fleet 또는 EC2 Fleet과 관련된 이벤트를 제공합니다.

Karpenter는 EC2 Fleet을 활용하지 않더라도 Spot 인스턴스와 유사한 이벤트를 사용할 수 있습니다.

  • 모니터링할 이벤트 타입 및 크리티컬 서브타입
{
  "source": ["aws.ec2fleet"],
  "detail-type": ["EC2 Fleet State Change", "EC2 Fleet Instance Change", "EC2 Fleet Information", "EC2 Fleet Error"],
  "detail": {
    "$or": [{
      "sub-type": ["deleted_terminating"]
    }, {
      "sub-type": ["expired"]
    }, {
      "sub-type": ["terminated"]
    }, {
      "sub-type": ["termination_notified"]
    }, {
      "sub-type": ["launchSpecUnusable"]
    }, {
      "sub-type": ["fleetProgressHalted"]
    }, {
      "sub-type": ["iamFleetRoleInvalid"]
    }, {
      "sub-type": ["spotInstanceCountLimitExceeded"]
    }, {
      "sub-type": ["spotFleetRequestConfigurationInvalid"]
    }]
  }
}

 

상태 변경 (State Change)

  • `deleted_terminating` : Fleet 요청이 삭제되면서 인스턴스 종료가 진행 중인 상태.
  • `expired` : Fleet 요청이 만료된 상태.

인스턴스 변경 (Instance Change)

  • `terminated` : Spot 인스턴스가 종료된 상태.
  • `termination_notified` : Spot 인스턴스가 스케일 다운 또는 목표 용량 조정을 위해 종료될 예정임.

정보 (Information)

  • `launchSpecUnusable` : 시작 사양이 유효하지 않아 Spot 인스턴스를 시작할 수 없는 상태.
  • `fleetProgressHalted` : 모든 시작 사양이 유효하지 않아 Fleet 진행이 중단된 상태.

오류 (Error)

  • `iamFleetRoleInvalid` : EC2 Fleet에 필요한 IAM 권한이 유효하지 않음.
  • `spotInstanceCountLimitExceeded` : 인스턴스 한도를 초과함.
  • `spotFleetRequestConfigurationInvalid` : Fleet 요청의 구성이 유효하지 않음.

특정 sub-type만 모니터링하는 이유

`aws.ec2fleet` 소스의 모든 sub-type 이벤트를 모니터링하는 대신, 운영에 직접적인 영향을 미치는 크리티컬 이벤트에만 집중하는 이유는 다음과 같습니다

운영 효율성

  • 중요 이벤트에 집중: `active` , `submitted` 와 같은 정보성 이벤트는 시스템 안정성에 영향을 주지 않아 모니터링 대상에서 제외.
  • 효율적인 관리: 불필요한 알림을 줄여 중요한 경고에 더 빠르게 대응 가능.

크리티컬 이벤트에 집중

  • 서비스 가용성 관련: `deleted_terminating` , `expired, terminated`는 리소스 종료와 관련되어 가용성에 직접적 영향을 미침.
  • 사전 경고 및 오류 관리
    • `termination_notified` : Spot 인스턴스 종료를 사전에 알림.
    • `launchSpecUnusable` , `iamFleetRoleInvalid` : 프로비저닝 실패나 Fleet 설정 오류를 나타냄.

비용 및 리소스 최적화

  • 비용 절감: 불필요한 데이터 처리와 저장을 줄여 모니터링 비용 절감.
  • 시스템 안정성: 처리량을 줄여 모니터링 시스템의 성능 유지.

알림 피로 방지

  • 중요 알림 우선: 과도한 알림을 줄여 운영팀이 더 빠르게 문제를 인지하고 대응 가능.

Spot 모니터링 이벤트의 중요성

각 이벤트는 운영 안정성을 위해 반드시 모니터링해야 할 이유가 있습니다.

EC2 Spot Instance Interruption Warning

  • Spot 인스턴스가 AWS 리소스 부족이나 가격 변동으로 인해 종료될 때 사전 경고를 제공.
  • Karpenter의 노드가 중단되기 전에 새로운 노드를 프로비저닝하거나 워크로드를 재분배할 수 있는 기회를 제공.

termination_notified

  • Fleet 스케일 다운 또는 목표 용량 조정으로 인해 Spot 인스턴스가 종료될 때 발생.
  • 노드 종료로 인해 워크로드가 중단되지 않도록 미리 대비 가능.

Fleet 관련 오류 및 정보

  • `launchSpecUnusable` , `fleetProgressHalted` : Fleet 구성 문제로 인해 인스턴스를 프로비저닝하지 못하는 상태.
  • `iamFleetRoleInvalid` , `spotFleetRequestConfigurationInvalid` : Fleet 요청이 실행되지 않는 크리티컬 오류.
  • 이러한 이벤트를 통해 Fleet 구성을 사전에 점검하고 장애를 예방 가능.

EventBridge로 Spot 모니터링 최적화

AWS EventBridge를 통해 위 이벤트들을 실시간으로 모니터링하며 필요한 경우 자동화된 대응을 설정할 수 있습니다.

  1. 구성 방법:
    • `aws.ec2`와 `aws.ec2fleet` 이벤트 소스를 각각 설정.
    • 위의 JSON 패턴을 기반으로 이벤트 필터링 규칙 생성.
    • Lambda, SNS, 또는 AWS Step Functions와 연계하여 이벤트 발생 시 알림 또는 자동 복구 프로세스 실행.
  2. 사용 사례:
    • Spot 인스턴스 종료 경고 발생 시, Karpenter를 통해 새로운 노드를 프로비저닝.
    • Fleet 구성 오류 발생 시, 알림을 통해 운영자가 문제를 즉시 확인.
    • 만료된 Fleet 요청을 정리하여 리소스 낭비 방지.

결론

Spot 인스턴스는 비용 최적화의 핵심 전략이지만, 특유의 휘발성으로 인해 안정적인 운영을 위해 정교한 모니터링이 요구됩니다.

AWS EventBridge를 활용해 `aws.ec2` 및 `aws.ec2fleet` 기반의 크리티컬 이벤트 필터링을 구성하면 Karpenter의 Spot 노드를 효율적으로 관리하며, 장애 예방 자동화된 복구 프로세스를 구축할 수 있습니다.

728x90
반응형