반응형
Packer 란?
Packer는 여러 클라우드 및 가상화 환경에서 사용할 수 있는 머신 이미지를 자동으로 빌드해주는 도구 입니다.
Packer를 사용하게된 계기
Kubernetes 환경에서 Job 리소스를 사용하다 보면, 요청이 들어올 때마다 새로운 Pod가 생성됩니다.
이 과정에서 노드가 새로 생성되고, 필요한 컨테이너 이미지를 내려받은 뒤에야 Pod가 실행되기 때문에 시간이 오래 걸리는 문제가 있었습니다.
이 문제를 해결하기 위해, 노드가 시작될 때 이미 필요한 컨테이너 이미지가 포함된 상태로 준비되어 있으면 좋겠다고 생각했습니다.
이를 위해 선택한 도구가 HashiCorp Packer 입니다.
Packer를 사용하면 커스텀 베이스 노드 이미지를 빌드할 수 있고, 여기에 Pod 실행에 필요한 이미지를 미리 포함시킬 수 있습니다.
그 결과, Job 실행 시 Pod가 더 빠르게 기동되어 전체 처리 시간이 단축되었습니다.
이제 AMI를 어떻게 커스텀 했는지 제가 겪었던 과정을 설명 드리겠습니다.
Packer 설치
저는 Mac 환경이여서 아래 방법으로 설치하였습니다.
brew tap hashicorp/tap
brew install hashicorp/tap/packer
다른 환경 설치 방법은 아래 링크를 참조하시면 됩니다.
Packer 설치
.pkr.hcl 작성
packer {
required_plugins {
amazon = { # AWS AMI 빌드를 위한 amazon 플러그인 선언
source = "github.com/hashicorp/amazon"
version = ">= 1.4.0"
}
}
}
# AMI를 빌드할 EC2 인스턴스 정의
source "amazon-ebs" "ask-engine" {
ami_name = "eks-al2023-baked-ask-engine-v1.5.45" # 새 AMI 이름 패턴
instance_type = "t3a.medium" # 빌드할 때 쓸 임시 인스턴스 타입
region = "ap-northeast-1" # AMI 빌드 리전
source_ami = "ami-0fb4a375208b57770" # Base 이미지의 ami 지정
subnet_id = "subnet-032c0221411d3954b" # SSH 접속을 위한 퍼블릭 서브넷 ID
ssh_username = "ec2-user" # 기본 로그인 사용자
iam_instance_profile = "dev-outcode-hot-instance-role" # Packer 빌드용 IAM 인스턴스 프로파일
# 루트 디스크 설정
launch_block_device_mappings {
device_name = "/dev/xvda"
volume_size = 30 # 30 GB
volume_type = "gp3"
delete_on_termination = true # EC2 인스턴스 삭제 시 EBS 같이 삭제
}
# 결과 AMI에 태그 부여 → Karpenter에서 태그 기반 선택 가능
tags = {
Name = "eks-al2023-baked-ask-engine-v1.5.45"
"karpenter.sh/discovery" = "dev-outcode-eks-cluster" # Karpenter discovery 태그
"baked.images" = "true"
}
}
# 빌드 실행 정의
build {
name = "eks-al2023-baked-ask-engine-v1.5.45"
sources = ["source.amazon-ebs.ask-engine"]
provisioner "shell" { # EC2 인스턴스에 접속해서 실행할 셸 명령어들
inline = [
"sudo systemctl start containerd",
"export ECR_PASSWORD=$(aws ecr get-login-password --region ap-northeast-1)",
"sudo ctr -n k8s.io image pull -u AWS:$ECR_PASSWORD 308910977993.dkr.ecr.ap-northeast-1.amazonaws.com/dev-outcode:ask-engine-v1.5.45"
]
}
}
Packer 사용하여 ami 커스텀
이제 앞서 작성한 파일로 ami 커스텀을 진행해보겠습니다.
HCL 기반 설정에서 플러그인 초기화
packer init <.pkr.hcl 파일명>
템플릿 문법 검증
pakcer validate <.pkr.hcl 파일명>
이미지 빌드
pakcer build <.pkr.hcl 파일명>
그러면 아래 이미지와 같이 빌드 과정이 나오고, 빌드가 성공적으로 끝났다는 것을 알 수 있습니다.
이상 입니다.
반응형
'AWS' 카테고리의 다른 글
Karpenter로 EKS에서 Spot 인스턴스 자동 프로비저닝하기 (0) | 2025.09.03 |
---|---|
GCP <-> AWS VPN 연결 (1) | 2025.06.25 |
EKS 노드에서 생성할 수 있는 POD 개수 제한 해제 (0) | 2025.06.17 |
AWS Secret Manager 에서 생성한 Secret을 EKS 에서 사용하기 (0) | 2025.06.04 |
AWS ALB(Application LoadBalancer) Controller 설치 하기 (0) | 2025.06.02 |