Files
site11/KUBERNETES.md
jungwoo choi fde852b797 feat: Integrate KIND cluster management with docker-compose
KIND 클러스터를 docker-compose로 관리할 수 있도록 개선했습니다.

Changes:
- docker-compose.kubernetes.yml: KIND CLI 통합 관리 서비스
  - kind-cli: kind, kubectl, docker 모두 포함된 통합 CLI 컨테이너
  - monitor: 실시간 클러스터 모니터링 서비스
  - Alpine 기반으로 자동 도구 설치

- KUBERNETES.md: docker-compose 사용법 우선으로 재구성
  - 방법 1 (권장): docker-compose 명령어
  - 방법 2: 로컬 스크립트
  - 방법 3: 수동 설정

- KIND_README.md: 빠른 시작 가이드 신규 작성
  - docker-compose 기반 간편한 사용법
  - 일상적인 작업 예시
  - 별칭(alias) 설정 제안
  - 문제 해결 가이드

Benefits:
- 간편한 관리: docker-compose 한 줄로 환경 시작
- 통합 도구: kind, kubectl, docker 모두 한 컨테이너에서 사용
- 실시간 모니터링: docker-compose logs -f monitor
- 일관된 환경: 로컬에 kind/kubectl 설치 불필요

Usage:
  docker-compose -f docker-compose.kubernetes.yml up -d
  docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh setup
  docker-compose -f docker-compose.kubernetes.yml logs -f monitor

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 18:35:41 +09:00

8.5 KiB

Kubernetes Development Environment (KIND)

Site11 프로젝트는 KIND (Kubernetes IN Docker)를 사용하여 로컬 Kubernetes 개발 환경을 구성합니다.

목차

사전 요구사항

다음 도구들이 설치되어 있어야 합니다:

# Docker Desktop
brew install --cask docker

# KIND
brew install kind

# kubectl
brew install kubectl

빠른 시작

방법 1: docker-compose 사용 (권장)

# 1. 관리 컨테이너 시작
docker-compose -f docker-compose.kubernetes.yml up -d

# 2. KIND 클러스터 생성 및 배포
docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh setup

# 3. 상태 확인
docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh status

# 4. 실시간 모니터링
docker-compose -f docker-compose.kubernetes.yml logs -f monitor

방법 2: 로컬 스크립트 사용

# 전체 환경 한번에 설정 (클러스터 생성 + 서비스 배포)
./scripts/kind-setup.sh setup

# 상태 확인
./scripts/kind-setup.sh status

# 접속 정보 확인
./scripts/kind-setup.sh access

방법 3: 수동 설정

# 1. 클러스터 생성
kind create cluster --config k8s/kind-dev-cluster.yaml

# 2. 네임스페이스 생성
kubectl create namespace site11-console
kubectl create namespace site11-pipeline

# 3. Docker 이미지 로드
kind load docker-image yakenator/site11-console-backend:latest --name site11-dev
kind load docker-image yakenator/site11-console-frontend:latest --name site11-dev

# 4. 서비스 배포
kubectl apply -f k8s/kind/console-mongodb-redis.yaml
kubectl apply -f k8s/kind/console-backend.yaml
kubectl apply -f k8s/kind/console-frontend.yaml

# 5. 상태 확인
kubectl get pods -n site11-console

관리 방법

docker-compose 명령어 (권장)

# 관리 컨테이너 시작
docker-compose -f docker-compose.kubernetes.yml up -d

# 클러스터 생성
docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh create

# 클러스터 삭제
docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh delete

# 전체 설정 (생성 + 배포)
docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh setup

# 상태 확인
docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh status

# 실시간 모니터링
docker-compose -f docker-compose.kubernetes.yml logs -f monitor

# kubectl 직접 사용
docker-compose -f docker-compose.kubernetes.yml exec kind-cli kubectl get pods -A

# Shell 접속
docker-compose -f docker-compose.kubernetes.yml exec kind-cli bash

# 관리 컨테이너 중지
docker-compose -f docker-compose.kubernetes.yml down

로컬 스크립트 명령어

# 클러스터 생성
./scripts/kind-setup.sh create

# 클러스터 삭제
./scripts/kind-setup.sh delete

# 네임스페이스 생성
./scripts/kind-setup.sh deploy-namespaces

# Docker 이미지 로드
./scripts/kind-setup.sh load-images

# Console 서비스 배포
./scripts/kind-setup.sh deploy-console

# 상태 확인
./scripts/kind-setup.sh status

# Pod 로그 확인
./scripts/kind-setup.sh logs site11-console [pod-name]

# 접속 정보 표시
./scripts/kind-setup.sh access

kubectl 명령어

# 전체 리소스 확인
kubectl get all -n site11-console

# Pod 상세 정보
kubectl describe pod <pod-name> -n site11-console

# Pod 로그 확인
kubectl logs <pod-name> -n site11-console -f

# Pod 내부 접속
kubectl exec -it <pod-name> -n site11-console -- /bin/bash

# 서비스 확인
kubectl get svc -n site11-console

# 노드 확인
kubectl get nodes

클러스터 구성

노드 구성 (5 노드)

  • Control Plane (1개): 클러스터 마스터 노드

    • NodePort 매핑: 30080 → 3000 (Frontend), 30081 → 8000 (Backend)
  • Worker Nodes (4개):

    • workload=console: Console 서비스 전용
    • workload=pipeline-collector: 데이터 수집 서비스
    • workload=pipeline-processor: 데이터 처리 서비스
    • workload=pipeline-generator: 콘텐츠 생성 서비스

네임스페이스

  • site11-console: Console 프론트엔드/백엔드, MongoDB, Redis
  • site11-pipeline: Pipeline 관련 서비스들

접속 정보

Console Services

내부 서비스 (Pod 내부에서만 접근 가능)

  • MongoDB: mongodb://mongodb:27017
  • Redis: redis://redis:6379

개발 워크플로우

1. 코드 변경 후 배포

# 1. Docker 이미지 빌드
docker build -t yakenator/site11-console-backend:latest \
  -f services/console/backend/Dockerfile \
  services/console/backend

# 2. KIND 클러스터에 이미지 로드
kind load docker-image yakenator/site11-console-backend:latest --name site11-dev

# 3. Pod 재시작
kubectl rollout restart deployment/console-backend -n site11-console

# 4. 배포 상태 확인
kubectl rollout status deployment/console-backend -n site11-console

2. 스크립트로 간편하게

# 이미지 빌드 후 로드
./scripts/kind-setup.sh load-images

# 배포 재시작
kubectl rollout restart deployment/console-backend -n site11-console
kubectl rollout restart deployment/console-frontend -n site11-console

3. 전체 재배포

# 클러스터 삭제 후 재생성
./scripts/kind-setup.sh delete
./scripts/kind-setup.sh setup

모니터링

docker-compose 모니터링 사용

# 모니터링 시작
docker-compose -f docker-compose.kubernetes.yml up -d

# 실시간 로그 확인 (30초마다 업데이트)
docker-compose -f docker-compose.kubernetes.yml logs -f kind-monitor

모니터링 컨테이너는 다음 정보를 30초마다 출력합니다:

  • 노드 상태
  • Console 네임스페이스 Pod 상태
  • Pipeline 네임스페이스 Pod 상태

문제 해결

Pod이 시작되지 않는 경우

# Pod 상태 확인
kubectl get pods -n site11-console

# Pod 상세 정보 확인
kubectl describe pod <pod-name> -n site11-console

# Pod 로그 확인
kubectl logs <pod-name> -n site11-console

이미지 Pull 에러

# 로컬 이미지 확인
docker images | grep site11

# 이미지가 없으면 빌드
docker build -t yakenator/site11-console-backend:latest \
  -f services/console/backend/Dockerfile \
  services/console/backend

# KIND에 이미지 로드
kind load docker-image yakenator/site11-console-backend:latest --name site11-dev

NodePort 접속 불가

# 서비스 확인
kubectl get svc -n site11-console

# NodePort 확인 (30080, 30081이어야 함)
kubectl describe svc console-frontend -n site11-console
kubectl describe svc console-backend -n site11-console

# 포트 포워딩 대안 (문제가 계속되면)
kubectl port-forward svc/console-frontend 3000:3000 -n site11-console
kubectl port-forward svc/console-backend 8000:8000 -n site11-console

클러스터 완전 초기화

# KIND 클러스터 삭제
kind delete cluster --name site11-dev

# Docker 네트워크 정리 (필요시)
docker network prune -f

# 클러스터 재생성
./scripts/kind-setup.sh setup

MongoDB 연결 실패

# MongoDB Pod 확인
kubectl get pod -n site11-console -l app=mongodb

# MongoDB 로그 확인
kubectl logs -n site11-console -l app=mongodb

# MongoDB 서비스 확인
kubectl get svc mongodb -n site11-console

# Pod 내에서 연결 테스트
kubectl exec -it <console-backend-pod> -n site11-console -- \
  curl mongodb:27017

참고 문서

유용한 팁

kubectl 자동완성 설정

# Bash
echo 'source <(kubectl completion bash)' >>~/.bashrc

# Zsh
echo 'source <(kubectl completion zsh)' >>~/.zshrc

kubectl 단축어 설정

# ~/.bashrc 또는 ~/.zshrc에 추가
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgs='kubectl get svc'
alias kgn='kubectl get nodes'
alias kl='kubectl logs'
alias kd='kubectl describe'

Context 빠른 전환

# 현재 context 확인
kubectl config current-context

# KIND context로 전환
kubectl config use-context kind-site11-dev

# 기본 namespace 설정
kubectl config set-context --current --namespace=site11-console