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>
This commit is contained in:
jungwoo choi
2025-10-28 18:35:41 +09:00
parent e008f17457
commit fde852b797
3 changed files with 286 additions and 75 deletions

View File

@ -1,72 +1,70 @@
version: '3.8'
# KIND (Kubernetes IN Docker) 클러스터 관리용 docker-compose
# 사용법:
# 시작: docker-compose -f docker-compose.kubernetes.yml up -d
# 중지: docker-compose -f docker-compose.kubernetes.yml down
# 재시작: docker-compose -f docker-compose.kubernetes.yml restart
# 로그: docker-compose -f docker-compose.kubernetes.yml logs -f
# Site11 KIND Kubernetes 개발 환경
#
# 빠른 시작:
# 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 exec kind-cli /scripts/kind-setup.sh status
# docker-compose -f docker-compose.kubernetes.yml logs -f monitor
services:
# KIND 클러스터 관리 헬퍼 서비스
# KIND 클러스터는 docker-compose로 직접 제어할 수 없으므로
# 이 헬퍼 서비스를 통해 관리 작업을 수행합니다
kind-manager:
image: docker/compose:latest
container_name: site11-kind-manager
# KIND CLI 관리 서비스 (kind, kubectl, docker 모두 포함)
kind-cli:
image: alpine:latest
container_name: site11-kind-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./k8s:/k8s:ro
- ./scripts:/scripts:ro
- ~/.kube:/root/.kube
- ./k8s:/k8s
- ./scripts:/scripts
networks:
- kind
working_dir: /scripts
entrypoint: /bin/sh
command: |
-c "
echo '====================================';
echo 'Site11 KIND Cluster Manager';
echo '====================================';
# Install required tools
apk add --no-cache docker-cli curl bash
# Install kubectl
curl -LO https://dl.k8s.io/release/$$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x kubectl && mv kubectl /usr/local/bin/
# Install kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x kind && mv kind /usr/local/bin/
echo '';
echo 'KIND 클러스터 관리 명령어:';
echo ' 클러스터 생성: kind create cluster --config /k8s/kind-dev-cluster.yaml';
echo ' 클러스터 삭제: kind delete cluster --name site11-dev';
echo ' 클러스터 상태: kubectl cluster-info --context kind-site11-dev';
echo ' 노드 확인: kubectl get nodes';
echo '╔═══════════════════════════════════════╗';
echo ' Site11 KIND Cluster Manager ║';
echo '╚═══════════════════════════════════════╝';
echo '';
echo 'Services 배포:';
echo ' 네임스페이스: kubectl create namespace site11-console';
echo ' Console: kubectl apply -f /k8s/kind/';
echo '사용 가능한 명령어:';
echo '';
echo '헬퍼 컨테이너는 계속 실행됩니다...';
echo ' 전체 설정 (클러스터 생성 + 배포):';
echo ' docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh setup';
echo '';
echo ' 개별 명령어:';
echo ' docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh create';
echo ' docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh status';
echo ' docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh delete';
echo '';
echo ' kubectl 직접 사용:';
echo ' docker-compose -f docker-compose.kubernetes.yml exec kind-cli kubectl get pods -A';
echo '';
echo ' Shell 접속:';
echo ' docker-compose -f docker-compose.kubernetes.yml exec kind-cli bash';
echo '';
echo 'KIND CLI 준비 완료!';
tail -f /dev/null
"
restart: unless-stopped
# Kubectl 명령어 실행을 위한 헬퍼 서비스
kubectl:
image: bitnami/kubectl:latest
container_name: site11-kubectl
volumes:
- ~/.kube:/root/.kube:ro
- ./k8s:/k8s:ro
networks:
- kind
entrypoint: /bin/bash
command: |
-c "
echo '====================================';
echo 'Kubectl Helper Container';
echo '====================================';
echo '';
echo 'kubectl 명령어 사용 가능';
echo ' 예시: docker exec site11-kubectl kubectl get pods -A';
echo '';
tail -f /dev/null
"
restart: unless-stopped
# KIND 클러스터 헬스체크 및 모니터링
kind-monitor:
# 클러스터 실시간 모니터링
monitor:
image: bitnami/kubectl:latest
container_name: site11-kind-monitor
volumes:
@ -77,15 +75,44 @@ services:
command: |
-c "
while true; do
echo '==== KIND Cluster Status ====';
kubectl get nodes --context kind-site11-dev 2>/dev/null || echo 'Cluster not running';
clear;
echo '╔═══════════════════════════════════════════════════╗';
echo '║ Site11 KIND Cluster Monitor ║';
echo '║ Updated: $$(date +"%Y-%m-%d %H:%M:%S") ║';
echo '╚═══════════════════════════════════════════════════╝';
echo '';
echo '==== Console Namespace Pods ====';
kubectl get pods -n site11-console --context kind-site11-dev 2>/dev/null || echo 'Namespace not found';
echo '';
echo '==== Pipeline Namespace Pods ====';
kubectl get pods -n site11-pipeline --context kind-site11-dev 2>/dev/null || echo 'Namespace not found';
if kubectl cluster-info --context kind-site11-dev &>/dev/null; then
echo '✅ Cluster Status: Running';
echo '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━';
echo '';
echo '📦 Nodes:';
kubectl get nodes --context kind-site11-dev 2>/dev/null | sed '1s/.*/ &/' | sed '1!s/.*/ &/' || echo ' No nodes';
echo '';
echo '🔧 Console Namespace (site11-console):';
kubectl get pods -n site11-console --context kind-site11-dev 2>/dev/null | sed '1s/.*/ &/' | sed '1!s/.*/ &/' || echo ' No pods';
echo '';
echo '📊 Services:';
kubectl get svc -n site11-console --context kind-site11-dev 2>/dev/null | sed '1s/.*/ &/' | sed '1!s/.*/ &/' || echo ' No services';
echo '';
echo '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━';
echo '🌐 Access URLs:';
echo ' Frontend: http://localhost:3000';
echo ' Backend: http://localhost:8000';
else
echo '❌ Cluster Status: Not Running';
echo '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━';
echo '';
echo '시작 방법:';
echo ' docker-compose -f docker-compose.kubernetes.yml exec kind-cli /scripts/kind-setup.sh setup';
fi;
echo '';
echo 'Next update in 30 seconds... (Press Ctrl+C to stop)';
sleep 30;
done
"