설치 확인¶
K8s + OpenStack 컨트롤 플레인 + end-to-end VM 부팅까지 3계층으로 점검한다.
노드 진입¶
로컬에서:
make ssm
내부적으로 aws ssm start-session --target <instance_id> --region ap-northeast-2. 처음 한 번은 Starting session with SessionId: ... 메시지 뜨고 프롬프트가 sh-5.1$로 바뀐다. 이 프롬프트는 EC2 노드 안의 shell, default user는 ssm-user (sudoer).
세션 끊기: exit 또는 Ctrl-D.
연결이 안 될 때:
terraform output instance_id가 비어 있으면 →make up미완료.make ready대기TargetNotConnected→ 노드가 아직 SSM agent를 띄우는 중 (부팅 후 30초쯤). 다시 시도session-manager-plugin not found→ 로컬에 플러그인 미설치, 설치 안내 참조
KUBECONFIG 환경변수가 왜 필요한가¶
kubectl은 클러스터 주소·인증서·토큰을 다음 우선순위로 찾는다:
--kubeconfig플래그$KUBECONFIG환경변수 ← 우리가 셋팅하는 것~/.kube/config
kubeadm init이 만든 admin 자격증명은 /etc/kubernetes/admin.conf에 있는데 모드 0600·owner root라 일반 유저는 읽지 못한다. SSM 세션은 ssm-user로 시작하고, root로 승격해도 root의 ~/.kube/config는 비어 있을 수 있어서 명시적으로 export KUBECONFIG=... 를 해준다.
대안 두 가지:
# 옵션 A: root + export (이 문서 기본 방식)
sudo -i
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl ...
# 옵션 B: ubuntu 유저 (user_data가 ~ubuntu/.kube/config 깔아둠, export 불필요)
sudo -u ubuntu -i
kubectl ...
make status 타겟은 옵션 B 방식(sudo -u ubuntu kubectl ...)을 쓴다.
osc 파드로 OpenStack CLI 호출¶
OpenStack 명령어는 클러스터 안에 떠 있는 osc 파드(admin 크레덴셜이 envFrom으로 자동 주입)에서 실행한다. 한 번씩 호출:
kubectl -n openstack exec osc -- openstack server list
kubectl -n openstack exec osc -- openstack image list
kubectl -n openstack exec osc -- openstack network list
kubectl -n openstack exec osc -- openstack hypervisor list
kubectl -n openstack exec osc -- openstack compute service list
kubectl -n openstack exec osc -- openstack network agent list
여러 명령 연속으로 칠 거면 셸로 진입:
kubectl -n openstack exec -it osc -- bash
# 안에서 openstack ... 자유롭게
osc 파드가 어떻게 admin 자격증명을 자동으로 받는지는 자격증명 흐름에서 설명한다.
3계층 점검¶
위에서 아래로 내려가면서 끊기는 데가 없으면 OK.
(a) K8s + Helm 레벨 — 인프라가 살았나¶
kubectl get nodes # Ready
helm -n openstack list # 10개 release 모두 deployed
kubectl -n openstack get pods --no-headers \
| awk '{print $3}' | sort | uniq -c # Running/Completed만 있어야 (보통 22 Running / 36 Completed)
(b) OpenStack 컨트롤 플레인 — 각 서비스가 자기 등록 됐나¶
# nova-api / conductor / scheduler / compute 모두 State=up
kubectl -n openstack exec osc -- openstack compute service list
# 하이퍼바이저(=compute 노드)가 placement에 등록됐나 — ip-10-0-1-XX QEMU 1줄 보여야
kubectl -n openstack exec osc -- openstack hypervisor list
# neutron 에이전트(L3 / DHCP / metadata / OVS) 모두 Alive=True, State=UP
kubectl -n openstack exec osc -- openstack network agent list
# keystone endpoint catalog — public/internal/admin URL이 깔끔하게 나열됨
kubectl -n openstack exec osc -- openstack endpoint list
(c) End-to-end — 실제 VM이 부팅되나 (가장 확실한 증거)¶
kubectl -n openstack exec osc -- openstack server list
# test-vm ACTIVE demo-net=10.10.10.XXX cirros m1.tiny
# 게스트 OS까지 부팅 끝났는지 — 마지막에 cirros 로그인 프롬프트(`login:`)
kubectl -n openstack exec osc -- openstack console log show test-vm | tail -20
make osh-vm이 이미 (c)를 자동으로 수행한다. 따로 한 대 더 띄워서 확인하거나 ERROR 가 나는 경우는 OpenStack 이용 / 트러블슈팅 참조.