인프라/시스템 구축
[ AWS ] NTH(Node Termination Handler)
김붕어87
2023. 2. 13. 13:50
반응형
개요
AWS-node-termination-handler를 통해 EKS Cluster Node로 Spot instance가 셧다운될 경우,
다른 Spot instance로 자동 배치될 수 있게 컨트롤할 수 있다.
https://github.com/aws/aws-node-termination-handler
Spot Instance ?
AWS Spot Instance를 왜 사용해야할까?
장점
AWS Spot instance는 EC2 인스턴스를 사전 약정 없이 on-demand 가격보다 70 ~90% 저렴한 비용으로,
이용할 수 있어서 워크로드에 적절하게 배포하여 사용한다면 서버 비용을 크게 절감할 수 있다.
단점
수요/공급에 비례하여 더 높은 가격을 책정하는 쪽으로 스팟 인스턴스가 할당됨.
인스턴스가 강제 종료(회수) 될 수 있음. => 리소스 사용불가
이 부분을 보완할 수 있게 aws-node-termination-handler를 이용하여 회수되기 전에
다른 Spot instance를 요청하여 미리 배치할 수 있게 구성할 수 있다.
spot 사용 조건
aws-node-termination-handler (NTH)
NTH를 통해 k8s control-plane 이 EC2 관리 이벤트, EC2 Spot/instance 중지, AutoScalingGroup(ASG)의 scale-in AGS AZ를 재조정하거나 하는 등 이벤트에 대응할 수 있어서 (스팟) 인스턴스가 중지되어도 다른 노드가 자동으로 배치될 수 있도록 구성할 수 있음.
Spot Instance가 중지되기 2분 전에 이벤트 메세지가 발생하는데 이를 SQS → EventBridge로 받아서
사전에 신규 SPOT을 띄우고, 중지될 Node의 pod를 다른 노드로 Drain 해준다.
- 아래 AWS > EC2 > 스팟 요청 페이지에서 확인할 수 있음.
SPOT 적용 절감액 요약 (Comdev)
- comdev 환경에 spot instance로 사용하면서 절감된 금액을 표시 (on-demand 대비 )
- IMDS와 Queue 모드, 두가지 모드가 있음.
- IMDS (instance Metadata Service Processor )
- EC2 인스턴스의 Metadata를 모니터하면서 동작하는 방식
- Queue Mode ( IMDS보다 기능이 많음 )
- ASG Termination Lifecycle Hooks handling
- IMDS (instance Metadata Service Processor )
NTH Queue 모드 구성
Components
- SQS (Amazone Simple Queue Service)
- AutoScaling Group Termination lifecycle hook
- Amazon EventBridge Rule
- IAM Role (NTH가 컨트롤 할 수 있는 )
SQS Queue 구성
## Queue Policy
$ QUEUE_POLICY=$(cat <<EOF
{
"Version": "2012-10-17",
"Id": "MyQueuePolicy",
"Statement": [{
"Effect": "Allow",
"Principal": {
"Service": ["events.amazonaws.com", "sqs.amazonaws.com"]
},
"Action": "sqs:SendMessage",
"Resource": [
"arn:aws:sqs:${AWS_REGION}:${ACCOUNT_ID}:${SQS_QUEUE_NAME}"
]
}]
}
EOF
)
## make sure the queue policy is valid JSON
$ echo "$QUEUE_POLICY" | jq .
## Save queue attributes to a temp file
$ cat << EOF > /tmp/queue-attributes.json
{
"MessageRetentionPeriod": "300",
"Policy": "$(echo $QUEUE_POLICY | sed 's/\"/\\"/g' | tr -d -s '\n' " ")"
}
EOF
$ aws sqs create-queue --queue-name "${SQS_QUEUE_NAME}" \
--attributes file:///tmp/queue-attributes.json
{
"QueueUrl": "https://sqs.ap-southeast-1.amazonaws.com/xxx/nthqueue"
}
note-termination role 생성
ASG Termination Lifecycle Hook 구성
aws autoscaling put-lifecycle-hook \
--lifecycle-hook-name=terminate-lc-hook \
--auto-scaling-group-name=eks-infra-node-group-xxx \
--lifecycle-transition=autoscaling:EC2_INSTANCE_TERMINATING \
--default-result=CONTINUE \
--heartbeat-timeout=300 \
--notification-target-arn arn:aws:sqs:ap-southeast-1:xxx:nthqueue \
--role-arn arn:aws:iam::xxx:role/nth-notification-role
aws autoscaling put-lifecycle-hook \
--lifecycle-hook-name=launch-lc-hook \
--auto-scaling-group-name=eks-infra-node-group-xxx \
--lifecycle-transition=autoscaling:EC2_INSTANCE_LAUNCHING \
--default-result=CONTINUE \
--heartbeat-timeout=300 \
--notification-target-arn arn:aws:sqs:ap-southeast-1:xxx:nthqueue \
--role-arn arn:aws:iam::xxx:role/nth-notification-role
인스턴스 Tagging
key=aws-node-termination-handler/managed 가 있어야 함.
PODs용 IAM Role 생성
- IAM Role Name : irsa-aws-node-termination-handler
- 아래 권한 정책 생성(aws-node-termination-handler) 후 연결.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:CompleteLifecycleAction",
"autoscaling:DescribeAutoScalingInstances",
"autoscaling:DescribeTags",
"ec2:DescribeInstances",
"sqs:DeleteMessage",
"sqs:ReceiveMessage"
],
"Resource": "*"
}
]
}
install by helm
❯ helm install aws-node-termination-handler . -f values-queue.yaml -n kube-system
NAME: aws-node-termination-handler
LAST DEPLOYED: Thu Dec 1 22:55:02 2022
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
***********************************************************************
* AWS Node Termination Handler *
***********************************************************************
Chart version: 0.20.1
App version: 1.18.1
Image tag: public.ecr.aws/aws-ec2/aws-node-termination-handler:v1.18.1
Mode : IMDS
***********************************************************************
반응형