728x90
반응형
사내 AWS EKS 테스트 환경을 구성한 후 사용 중인 리소스로 인해 발생하는 비용을 효율적으로 관리하기 위해서는 퇴근 시간 등 비활성 기간에 해당 환경을 사용 중지 처리하는 것이 중요하다. 그러나 이러한 작업을 매일 수동으로 조작하기에는 번거롭고 종종 잊어버리는 경우가 발생한다.
본 글에서는 이 문제를 해결하고 이러한 프로세스를 자동화하기 위해 자동 시작 및 중지 스케줄링을 설정하기 위한 방법을 기술한다.
목차
방법 1 : AWS CLI + Linux Crontab 사용방법 2 : Terraform + Linux Crontab 사용
방법 3 : Auto Scaling 그룹 작업 예약
방법 1 : AWS CLI + Linux Crontab 사용
- 전제 조건
- AWS CLI + Crontab 명령을 실행할 Bastion(Linux) 서버 필요
환경에 맞는 최신 AWS CLI를 Bastion 서버에 다운로드 한다.
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
$ sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
설치가 정상적으로 되었는지 확인한다.
$ aws --version
aws-cli/2.13.25 Python/3.11.5 Linux/5.10.130-118.517.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off
Crontab에 매일 09:30에 scale-out, 18:30에 scalie-in 명령이 실행되게 설정한다.
- 본 글에서는 출근 후 용량은 min:1/max:3/desired:2 퇴근 후 용량은 min:0/max:3/desired:0 으로 설정하였다.
$ crontab -e
30 00 * * 1-5 aws eks update-nodegroup-config --cluster-name {eks-cluster-name} --nodegroup-name {eks-nodegroup-name} --scaling-config minSize=1,maxSize=3,desiredSize=2
30 09 * * 1-5 aws eks update-nodegroup-config --cluster-name {eks-cluster-name} --nodegroup-name {eks-nodegroup-name} --scaling-config minSize=0,maxSize=3,desiredSize=0
:wq
설정이 잘 되었는지 확인한다.
$ crontab -l
30 00 * * 1-5 /usr/local/bin/aws eks update-nodegroup-config --cluster-name {eks-cluster-name} --nodegroup-name {nodegroup-name} --scaling-config minSize=1,maxSize=3,desiredSize=2
30 09 * * 1-5 aws eks update-nodegroup-config --cluster-name {eks-cluster-name} --nodegroup-name {nodegroup-name} --scaling-config minSize=0,maxSize=3,desiredSize=0
해당 시간에 명령이 잘 실행되었는지 확인한다.
$ cat /var/log/cron
## start (scale-out)
Oct 17 00:30:02 ip-192-168-10-142 CROND[12770]: (root) CMD (/usr/local/bin/aws eks update-nodegroup-config --cluster-name {eks-cluster-name} --nodegroup-name {nodegroup-name} --scaling-config minSize=1,maxSize=3,desiredSize=2)
## stop (scale-in)
Oct 17 09:30:02 ip-192-168-10-142 CROND[12772]: (root) CMD (/usr/local/bin/aws eks update-nodegroup-config --cluster-name {eks-cluster-name} --nodegroup-name {nodegroup-name} --scaling-config minSize=0,maxSize=3,desiredSize=0)
실제로 잘 적용 되었는지 AWS console 화면에서 확인한다.
- EC2 → Auto Scaling 그룹 → {Auto Scaling 그룹 name} → 세부 정보
- EC2 → Auto Scaling 그룹 → {Auto Scaling 그룹 name} → 활동
방법 2 : Terraform + Linux Crontab 사용
- 전제 조건
- Terraform 으로 AWS EKS 구성
- Terraform cli + Crontab 명령을 실행할 Bastion(Linux) 서버 필요
Terraform 코드에 aws_eks_node_group 리소스의 scalilng_config 값을 변수처리 한다.
## variable
variable "size" {
description = "Node group size configuration"
type = object({
desired = number
max = number
min = number
})
default = {
desired = 2
max = 3
min = 1
}
}
## aws_eks_node_group
resource "aws_eks_node_group" "node" {
...
scaling_config {
desired_size = var.size.desired
max_size = var.size.max
min_size = var.size.min
}
...
Crontab에 매일 09:30에 scale-out, 18:30에 scale-in 명령이 실행되게 설정한다.
$ crontab -e
30 00 * * 1-5 cd /root/iac-test/eks && /usr/local/sbin/terraform apply --auto-approve -var="size={desired=0,max=3,min=0}"
30 09 * * 1-5 /root/iac-test/eks && /usr/local/sbin/terraform apply --auto-approve
설정이 잘 되었는지 확인한다.
$ crontab -l
30 00 * * 1-5 cd /root/iac-test/eks && /usr/local/sbin/terraform apply --auto-approve -var="size={desired=0,max=3,min=0}"
30 09 * * 1-5 cd /root/iac-test/eks && /usr/local/sbin/terraform apply --auto-approve
해당 시간에 명령이 잘 실행되었는지 확인한다.
$ cat /var/log/cron
## start (scale-out)
Oct 17 00:30:01 ip-192-168-10-142 CROND[30070]: (root) CMD (cd {terraform 파일 워크스페이스 위치} && /usr/local/sbin/terraform apply --auto-approve)
## stop (scale-in)
Oct 17 09:30:01 ip-192-168-10-142 CROND[30072]: (root) CMD (cd {terraform 파일 워크스페이스 위치} && /usr/local/sbin/terraform apply --auto-approve -var="size={desired=0,max=3,min=0}")
$ cat /var/spool/mail/root
...
# aws_eks_node_group.node will be updated in-place
~ resource "aws_eks_node_group" "node" {
~ scaling_config {
~ desired_size = 0 -> 2
~ max_size = 3 -> 3
~ min_size = 0 -> 1
}
# (2 unchanged blocks hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
방법 3 : Auto Scaling 그룹 작업 예약
AWS Console 화면에서 아래 경로로 접근한다.
- EC2 → Auto Scaling 그룹 → {Auto Scaling 그룹 name} → Auto Scaling → 예약된 작업 생성
자동 시작 중지 될 작업을 생성 후 아래와 같이 작성한다.
- 월~금 마다 실행하고 싶으면 반복에 Cron 선택하고, "30 18 * * 1-5 또는 30 18 * * MON-FRI" 로 설정하면 된다.
등록이 잘 되었는지 확인한다.
반응형
'Orchestration > Kubernetes' 카테고리의 다른 글
AWS EKS AutoScaling 속도 비교(Cluster Autoscaler vs Kerpenter) (0) | 2023.10.22 |
---|---|
Karpenter로 AWS EKS 환경에 AutoScaling 구현하기 (0) | 2023.10.18 |
EKS add-on(vpc-cni) 업그레이드 이슈 (0) | 2023.05.24 |
EKS Pod 전용 Security group (SecurityGroupPolicy) (0) | 2023.05.18 |
AWS EKS EBS-CSI-Driver 설치 (0) | 2023.05.03 |
댓글