이 섹션에서는 클러스터가 스팟 중단에 대처하도록 준비해볼 예정입니다. 특정 인스턴스 유형의 사용 가능한 온디맨드 용량이 고갈되면 스팟 인스턴스에 2분 전에 중단 알림이 보내져 정상적으로 마무리됩니다. 각 스팟 인스턴스에 애플리케이션을 탐지하고 클러스터의 다른 곳에 재배포하는 역할을 가진 파드를 배포할 것입니다.
우리가 해야 할 첫 번째 일은 각 스팟 인스턴스에 스팟 인터럽트 핸들러를 배치하는 것입니다. 이 핸들러는 중단 알림을 위해 인스턴스에서 EC2 메타 데이터 서비스를 모니터링합니다.
워크플로우를 정리해보면:
여기에 쿠버네티스 데몬셋 예제가 있습니다. 데몬셋은 노드당 하나의 파드를 실행합니다.
mkdir ~/environment/spot
cd ~/environment/spot
wget https://eksworkshop.com/spot/managespot/deployhandler.files/spot-interrupt-handler-example.yml
적혀있는대로, 매니페스트는 할 필요가 없는 온디맨드를 포함한 모든 노드에 파드를 배치합니다. 스팟 인스턴스에만 배포되도록 데몬셋을 편집합니다. 레이블을 사용하여 올바른 노드를 식별해보세요.
노드셀렉터
를 사용하여 배치를 스팟 인스턴스로 제한하십시오. 자세한 내용은 링크를 참조하세요.
노드셀렉터를 사용하여 스팟 핸들러 구성
아래 코드를 Spec.Template.Spec.nodeSelector 아래의 데몬셋 매니페스트 끝에 작성합니다.
nodeSelector:
lifecycle: Ec2Spot
데몬셋을 배포합니다.
kubectl apply -f ~/environment/spot/spot-interrupt-handler-example.yml
DaemonSet을 배포하는 중 오류가 발생하면 YAML 파일에 작은 오류가 있을 수 있습니다. 이 페이지 하단에 있는 솔루션 파일과 비교해 보세요.
파드를 확인해보세요. 각 스팟 노드 당 하나씩 있어야 합니다.
kubectl get daemonsets