2025-10-31 13:26:13 +09:00

117 lines
3.4 KiB
Bash

#!/bin/bash
# Kubernetes 배포 스크립트
# 프로토타입을 Kubernetes 클러스터에 배포합니다.
set -e
# 변수 설정
NAMESPACE="${KUBE_NAMESPACE:-kt-event-marketing}"
MANIFEST_DIR="$(dirname "$0")/k8s"
echo "================================="
echo "프로토타입 Kubernetes 배포"
echo "================================="
echo "네임스페이스: ${NAMESPACE}"
echo "매니페스트 위치: ${MANIFEST_DIR}"
echo ""
# kubectl 확인
if ! command -v kubectl &> /dev/null; then
echo "❌ kubectl이 설치되어 있지 않습니다."
exit 1
fi
# 클러스터 연결 확인
if ! kubectl cluster-info &> /dev/null; then
echo "❌ Kubernetes 클러스터에 연결할 수 없습니다."
echo " kubectl 설정을 확인해주세요."
exit 1
fi
echo "✅ Kubernetes 클러스터 연결 확인"
echo ""
# 배포 옵션 선택
echo "배포 옵션을 선택하세요:"
echo "1) 전체 배포 (deployment + service + ingress)"
echo "2) 업데이트 (deployment만)"
echo "3) 삭제"
read -p "선택 (1-3): " -n 1 -r
echo ""
echo ""
case $REPLY in
1)
echo "🚀 전체 리소스 배포 중..."
kubectl apply -f ${MANIFEST_DIR}/deployment.yaml -n ${NAMESPACE}
kubectl apply -f ${MANIFEST_DIR}/service.yaml -n ${NAMESPACE}
kubectl apply -f ${MANIFEST_DIR}/ingress.yaml -n ${NAMESPACE}
echo "✅ 배포 완료"
;;
2)
echo "🔄 Deployment 업데이트 중..."
kubectl apply -f ${MANIFEST_DIR}/deployment.yaml -n ${NAMESPACE}
kubectl rollout status deployment/kt-event-prototype -n ${NAMESPACE}
echo "✅ 업데이트 완료"
;;
3)
echo "🗑️ 리소스 삭제 중..."
kubectl delete -f ${MANIFEST_DIR}/ingress.yaml -n ${NAMESPACE} --ignore-not-found
kubectl delete -f ${MANIFEST_DIR}/service.yaml -n ${NAMESPACE} --ignore-not-found
kubectl delete -f ${MANIFEST_DIR}/deployment.yaml -n ${NAMESPACE} --ignore-not-found
echo "✅ 삭제 완료"
exit 0
;;
*)
echo "❌ 잘못된 선택입니다."
exit 1
;;
esac
echo ""
echo "================================="
echo "배포 상태 확인"
echo "================================="
# Pod 상태 확인
echo ""
echo "📦 Pod 상태:"
kubectl get pods -n ${NAMESPACE} -l app=kt-event-prototype
# Service 상태 확인
echo ""
echo "🌐 Service 상태:"
kubectl get svc -n ${NAMESPACE} -l app=kt-event-prototype
# Ingress 상태 확인
echo ""
echo "🚪 Ingress 상태:"
kubectl get ingress -n ${NAMESPACE} -l app=kt-event-prototype
echo ""
echo "================================="
echo "배포 완료"
echo "================================="
echo ""
echo "유용한 명령어:"
echo " # Pod 로그 확인"
echo " kubectl logs -n ${NAMESPACE} -l app=kt-event-prototype -f"
echo ""
echo " # Pod 상세 정보"
echo " kubectl describe pods -n ${NAMESPACE} -l app=kt-event-prototype"
echo ""
echo " # 서비스 상태 확인"
echo " kubectl get all -n ${NAMESPACE} -l app=kt-event-prototype"
echo ""
# Ingress 호스트 정보 표시
INGRESS_HOST=$(kubectl get ingress kt-event-prototype -n ${NAMESPACE} -o jsonpath='{.spec.rules[0].host}' 2>/dev/null)
if [ -n "$INGRESS_HOST" ]; then
echo "🌍 접속 URL: http://${INGRESS_HOST}"
echo ""
echo "⚠️ /etc/hosts 파일에 다음 내용 추가 필요 (로컬 테스트):"
echo " <INGRESS_IP> ${INGRESS_HOST}"
echo ""
fi