설치

AWS EC2 한 대를 띄우고 그 위에 K8s + OpenStack-Helm 2026.1.0을 설치해 CirrOS VM 부팅까지 도달하는 전체 사이클이다.

로컬 도구 (macOS Apple Silicon 기준)

brew install awscli terraform jq make

session-manager-plugin은 별도 — macOS pkg installer라 sudo 비밀번호가 필요하다:

# 옵션 A: brew cask (sudo 프롬프트 뜸)
brew install --cask session-manager-plugin

# 옵션 B: sudo 없이 zip bundle을 brew bin에 풀기
TMP=$(mktemp -d) && cd "$TMP"
curl -fsSL -o sm.zip https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac_arm64/sessionmanager-bundle.zip
unzip -q sm.zip
cp sessionmanager-bundle/bin/session-manager-plugin /opt/homebrew/bin/
chmod +x /opt/homebrew/bin/session-manager-plugin

검증:

terraform version       # >= 1.5
aws --version           # v2.x
session-manager-plugin --version

AWS 자격증명

가장 빠른 길:

aws configure          # access key + secret + region (ap-northeast-2 권장)
aws sts get-caller-identity   # 누구로 인증됐는지 확인

⚠️ AWS root 계정 일상 사용 비권장. 처음 실습엔 root여도 작동은 하지만, IAM 사용자(또는 IAM Identity Center)를 만들어 AdministratorAccess (실습용 한정) + MFA 부여한 자격증명을 쓰는 게 안전하다.

한 줄 사이클

단계

명령

소요

검증 포인트

0. terraform 초기화

make init

10초

처음 한 번 / 새 머신에서만. .terraform/ 생성

1. EC2 + VPC 생성

make up

~2분

Apply complete! Resources: 10 added, instance_id, public_ip 출력

2. K8s 부트스트랩 대기

make ready

~3분

K8S_READY 출력될 때까지 다시 호출

3. K8s 상태 검증

make status

10초

Node Ready, calico/coredns/kube-system 파드 1/1 Running

4. OSH 풀스택 배포

make osh-deploy

~20분

마지막에 DONE_OSH_DEPLOY

5. CirrOS VM 부팅 검증

make osh-vm

~3분

test-vm이 BUILD → ACTIVE

6. 정리

make down

~3분

Destroy complete! Resources: 10 destroyed

각 단계에서 일어나는 일

make up: VPC/IGW/Subnet/SG/IAM 9개 + EC2 1개 = 10개 리소스 생성. EC2가 부팅되자마자 user_data.sh가 노드 안에서:

  • containerd, kubeadm/kubelet/kubectl 1.34 설치

  • kubeadm init

  • Calico CNI apply (server-side, tigera-operator + custom-resources)

  • control-plane taint 제거 (단일 노드라 워크로드 받게)

  • helm v3 설치 (공식 get-helm-3 스크립트)

  • 노드 Ready까지 대기 후 /var/log/user-data-complete 생성

make osh-deploy: 노드의 osh/deploy.sh가 SSM으로 실행된다. 진행 중 SSM 명령이 InProgress → Success로 가는 동안 30초마다 status 를 폴링한다.

make osh-vm: 임시 openstack-client 파드를 openstack ns에 띄우고 CirrOS 이미지 업로드 → m1.tiny flavor → demo-net 네트워크 → openstack server create. ACTIVE 될 때까지 5초마다 폴링.

끝났을 때 무엇을 기대해야 하나

# make osh-deploy 끝났을 때:
kubectl -n openstack get pods --no-headers | wc -l    # ~60개
helm -n openstack list                                # 10개 release (keystone/glance/...)

# make osh-vm 끝났을 때:
openstack server list                                 # test-vm ACTIVE
openstack hypervisor list                             # ip-10-0-1-XX QEMU up

⚠️ 반드시 끝나면 make down. m5.2xlarge는 시간당 ≈$0.49 (EBS 포함). 잊고 24시간 두면 ~$12. 비용은 비용 참조.