로컬 쿠버네티스(kind) 환경 구축 및 애플리케이션 배포 가이드입니다.
- 다중 노드(Multi-node) 쿠버네티스 클러스터를 로컬에 구축한다.
k9s를 사용하여 클러스터 상태를 직관적으로 모니터링한다.- 샘플 NestJS 애플리케이션을 컨테이너화하고, **데이터를 영속적으로 저장(PV/PVC)**한다.
Helm을 사용해 애플리케이션을 쿠버네티스에 배포한다.- 외부(로컬 머신)에서 애플리케이션에 접속한다.
- 환경 변수, ConfigMap, Secret을 사용하여 애플리케이션 설정을 관리한다.
- RBAC를 통해 쿠버네티스 리소스 접근 권한을 제어한다.
- 실습 과정에서 사용된 쿠버네티스의 핵심 개념을 명확히 이해한다.
이 가이드는 각 단계별로 상세한 설명을 담은 별도의 문서로 구성되어 있습니다.
- 1단계: 준비물 & k9s 설치
- 2단계: 다중 노드 클러스터 생성
- 3단계: NestJS 앱 컨테이너화
- 4단계: Helm으로 앱 배포
- 5단계: 외부 접속 및 정리
- 6단계: 데이터 영속성 (PV & PVC)
- 7단계: 설정 관리 (환경 변수, ConfigMap, Secret)
- 8단계: RBAC 심화 학습
- 9단계: 쿠버네티스 코어 컴포넌트 흐름 이해하기
- 개념 정리: 쿠버네티스 핵심 요소 다시보기 👈 마지막에 읽어보세요!
이미 개념에 익숙하다면 아래 명령어로 빠르게 시작할 수 있습니다.
-
클러스터 생성:
# kind-config.yaml 파일에서 extraPortMappings를 제거했습니다. kind create cluster --name nest-app-cluster --config kind-config.yaml -
Ingress Controller 설치 및 포트 포워딩:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml kubectl wait --namespace ingress-nginx --for=condition=ready pod --selector=app.kubernetes.io/component=controller --timeout=120s # Ingress Controller 파드 이름 확인 (예: ingress-nginx-controller-xxxxxxxxxx-yyyyy) # kubectl get pods -n ingress-nginx -l app.kubernetes.io/component=controller -o name # 로컬 8080 포트로 포워딩 (백그라운드 실행) # kubectl port-forward -n ingress-nginx pod/<YOUR_INGRESS_CONTROLLER_POD_NAME> 8080:80 &
-
Docker 이미지 빌드 및 로드:
docker build -t my-nest-app:1.0.0 ./nest-app kind load docker-image my-nest-app:1.0.0 --name nest-app-cluster
-
Helm 배포:
helm install my-nest-app ./helm/my-nest-app
-
접속 확인:
# /etc/hosts 파일에 "127.0.0.1 my-nest-app.local" 추가 후 curl http://my-nest-app.local:8080 # 또는 Host 헤더를 명시하여 접속 # curl -H "Host: my-nest-app.local" http://127.0.0.1:8080
-
클러스터 삭제:
kind delete cluster --name nest-app-cluster