setup-local-kubernetes
정보
이 스킬은 kind, k3d 또는 minikube와 같은 도구를 사용하여 로컬 Kubernetes 개발 환경을 설정합니다. 클러스터, 인그레스, 로컬 레지스트리를 구성하고, Skaffold나 Tilt와 통합하여 자동화된 재빌드 및 재배포 워크플로우를 제공합니다. 빠른 내부 루프 개발, 프로덕션 전 매니페스트 테스트, 또는 클라우드 비용 없이 Kubernetes를 학습하는 데 사용하세요.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/setup-local-kubernetesClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
name: setup-local-kubernetes description: > Configura un entorno de desarrollo local de Kubernetes usando kind, k3d o minikube para el desarrollo de ciclo interno rápido. Cubre la creación de clústeres, configuración de Ingress, configuración del registro local e integración con herramientas de desarrollo como Skaffold y Tilt para flujos de trabajo automáticos de recompilación y redespliegue. Útil al necesitar un entorno Kubernetes local para desarrollo, probar manifiestos o gráficos Helm antes del despliegue en producción, querer ciclos rápidos de recompilación y redespliegue, o aprender Kubernetes sin costos de nube. locale: es source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: devops complexity: basic language: multi tags: kind, k3d, minikube, local-development, skaffold, tilt, docker, kubernetes
Configurar Kubernetes Local
Crea un entorno de desarrollo local de Kubernetes para una iteración y pruebas rápidas.
Cuándo Usar
- Al necesitar un entorno Kubernetes local para el desarrollo de aplicaciones
- Al querer probar manifiestos Kubernetes y gráficos Helm antes de desplegar en producción
- Al requerir un desarrollo de ciclo interno rápido con recompilación y redespliegue automáticos
- Al probar aplicaciones multi-servicio con dependencias de servicios
- Al aprender Kubernetes sin costos de nube
- Al realizar pruebas del pipeline CI/CD localmente antes de enviar cambios
- Al necesitar un entorno aislado para experimentación y depuración
Entradas
- Requerido: Docker Desktop o Docker Engine instalado
- Requerido: Al menos 4GB de RAM disponibles para el clúster
- Requerido: Elección de la herramienta de clúster local (kind, k3d o minikube)
- Opcional: Código fuente de la aplicación a desplegar
- Opcional: Preferencia de versión de Kubernetes
- Opcional: Preferencia de herramienta de desarrollo (Skaffold, Tilt o manual)
- Opcional: Número de nodos trabajadores necesarios
Procedimiento
Consulta Ejemplos Extendidos para archivos de configuración completos y plantillas.
Paso 1: Instalar la Herramienta de Clúster Kubernetes Local
Elige e instala kind, k3d o minikube según tus requisitos.
Instalar kind (Kubernetes in Docker):
# Linux example
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# Verify installation
kind version
Instalar k3d (k3s in Docker):
# Linux/macOS
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
# Verify installation
k3d version
Instalar minikube:
# Linux example
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Verify installation
minikube version
Instala kubectl si no está presente:
# Linux example
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
kubectl version --client
Consulta references/EXAMPLES.md para los comandos de instalación en macOS y Windows.
Esperado: Binario de la herramienta instalado y en el PATH. El comando de versión devuelve la versión esperada. kubectl disponible para la interacción con el clúster.
En caso de fallo:
- Asegúrate de que Docker está en ejecución:
docker ps - Comprueba que el PATH del sistema incluye el directorio de instalación
- Para problemas de permisos, verifica los derechos de sudo/administrador
- En macOS, puede ser necesario permitir el binario en Seguridad y privacidad
- Usuarios de Windows: asegúrate de ejecutar la terminal como Administrador
Paso 2: Crear el Clúster Local con Configuración
Crea un clúster multi-nodo con soporte de Ingress y registro local.
Crear clúster kind:
# kind-config.yaml (abbreviated)
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: dev-cluster
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
- role: worker
- role: worker
# Create cluster
kind create cluster --config kind-config.yaml
# Install ingress-nginx
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
# Create local registry
docker run -d --restart=always -p 5000:5000 --name kind-registry registry:2
docker network connect kind kind-registry
Consulta references/EXAMPLES.md para el kind-config.yaml completo con espejos de registro y configuración de Ingress.
Crear clúster k3d:
# Create cluster with ingress and registry
k3d cluster create dev-cluster \
--port "80:80@loadbalancer" \
--port "443:443@loadbalancer" \
--agents 2 \
--registry-create k3d-registry:5000
Crear clúster minikube:
# Create cluster with multiple nodes
minikube start \
--nodes=3 \
--cpus=2 \
--memory=4096 \
--driver=docker \
--addons=ingress,registry,metrics-server
Prueba el clúster:
# Deploy test application
kubectl create deployment hello --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment hello --type=NodePort --port=8080
kubectl port-forward service/hello 8080:8080
# Clean up test
kubectl delete deployment,service hello
Esperado: Clúster multi-nodo en ejecución con nodo de control y nodos trabajadores. Controlador Ingress instalado y listo. Registro local accesible en localhost:5000. Contexto kubectl configurado para el nuevo clúster. Despliegue de prueba exitoso.
En caso de fallo:
- Comprueba que Docker tiene recursos suficientes (se recomiendan 4GB+ de memoria)
- Verifica que no hay conflictos de puertos:
lsof -i :80,443,5000,6550 - Para kind: asegúrate de que Kubernetes de Docker desktop está deshabilitado (causa conflictos)
- Para k3d: comprueba la conectividad de red de Docker
- Para minikube: prueba un controlador diferente (virtualbox, hyperv, kvm2)
- Revisa los registros de creación del clúster:
kind get clusters,k3d cluster list,minikube logs
Paso 3: Configurar las Herramientas del Flujo de Trabajo de Desarrollo
Configura Skaffold o Tilt para la recompilación y el redespliegue automatizados.
Instalar Skaffold:
# Linux example
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin
skaffold version
Crear configuración de Skaffold:
# skaffold.yaml (abbreviated)
apiVersion: skaffold/v4beta7
kind: Config
metadata:
name: my-app
build:
# ... (see EXAMPLES.md for complete configuration)
Consulta references/EXAMPLES.md para el skaffold.yaml completo con perfiles, sincronización de archivos y reenvío de puertos.
Instalar Tilt:
# Linux/macOS
curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
tilt version
Crear Tiltfile:
# Tiltfile (abbreviated)
allow_k8s_contexts('kind-dev-cluster')
docker_build(
'localhost:5000/my-app',
'.',
live_update=[
sync('./src', '/app/src'),
]
)
k8s_yaml(['k8s/deployment.yaml', 'k8s/service.yaml'])
k8s_resource('my-app', port_forwards='8080:8080')
Consulta references/EXAMPLES.md para el Tiltfile completo con actualizaciones en tiempo real, gráficos Helm y botones personalizados.
Crea manifiestos Kubernetes de ejemplo:
# k8s/deployment.yaml (abbreviated)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
template:
spec:
containers:
- name: app
image: localhost:5000/my-app
ports:
- containerPort: 8080
Consulta references/EXAMPLES.md para los manifiestos completos con servicio, Ingress y límites de recursos.
Prueba el flujo de trabajo de desarrollo:
# Using Skaffold
skaffold dev --port-forward
# Using Tilt
tilt up
# Add entry to /etc/hosts for ingress
echo "127.0.0.1 my-app.local" | sudo tee -a /etc/hosts
curl http://my-app.local
Esperado: Skaffold o Tilt observando los cambios en los archivos. Los cambios de código activan la recompilación y el redespliegue automáticos. La recarga en caliente funciona para los lenguajes compatibles. El reenvío de puertos permite el acceso local. Los registros se transmiten en el terminal/interfaz. El caché de compilación hace que las recompilaciones sean rápidas.
En caso de fallo:
- Verifica que el daemon Docker es accesible:
docker ps - Comprueba si el registro local es accesible:
curl http://localhost:5000/v2/_catalog - Para problemas de sincronización de archivos, asegúrate de que las rutas en la configuración coinciden con la estructura real
- Revisa los registros de Skaffold/Tilt en busca de errores de compilación
- Asegúrate de que el Dockerfile tiene la imagen base correcta y se compila correctamente:
docker build . - Comprueba que los límites de recursos no causan OOMKills:
kubectl describe pod -l app=my-app
Paso 4: Configurar el Almacenamiento Local y las Bases de Datos
Configura el almacenamiento persistente y despliega servicios de base de datos para pruebas.
Crea la clase de almacenamiento local:
# local-storage.yaml (abbreviated)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-path
provisioner: rancher.io/local-path
# ... (see EXAMPLES.md for complete configuration)
Consulta references/EXAMPLES.md para la configuración de almacenamiento completa con plantillas de PVC.
Despliega PostgreSQL para desarrollo:
# postgres-dev.yaml (abbreviated)
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: postgres
template:
spec:
containers:
- name: postgres
image: postgres:15-alpine
envFrom:
- secretRef:
name: postgres-secret
Consulta references/EXAMPLES.md para el StatefulSet de PostgreSQL completo con secretos y plantillas de volúmenes.
Despliega Redis para caché:
# Using Helm
helm install redis bitnami/redis \
--set auth.enabled=false \
--set replica.replicaCount=0
Consulta references/EXAMPLES.md para el despliegue de Redis basado en kubectl.
Prueba la conectividad de la base de datos:
# Apply manifests
kubectl apply -f local-storage.yaml
kubectl apply -f postgres-dev.yaml
# Wait for PostgreSQL
kubectl wait --for=condition=ready pod -l app=postgres --timeout=60s
# Test connection
kubectl exec -it postgres-0 -- psql -U devuser -d devdb -c "SELECT version();"
Esperado: Clase de almacenamiento configurada para el aprovisionamiento dinámico. Pods de la base de datos en ejecución y listos. Servicios accesibles mediante port-forward o desde otros pods. Los datos persisten entre reinicios de pods. Uso de recursos apropiado para el desarrollo (límites pequeños).
En caso de fallo:
- Comprueba si el aprovisionador de almacenamiento está instalado:
kubectl get storageclass - Verifica que el PVC está vinculado al PV:
kubectl get pvc,pv - Revisa los eventos del pod en busca de errores de montaje:
kubectl describe pod postgres-0 - Para problemas de permisos, comprueba si el directorio hostPath existe y es escribible
- Prueba el inicio de la base de datos:
kubectl logs postgres-0para errores de PostgreSQL - Asegúrate de que no hay conflictos de puertos para el reenvío de puertos
Paso 5: Configurar la Observabilidad para el Desarrollo Local
Agrega monitoreo y registro mínimos para la depuración.
Despliega una pila de monitoreo ligera:
# Install metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# For local clusters, disable TLS verification
kubectl patch deployment metrics-server -n kube-system --type='json' -p='[
{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--kubelet-insecure-tls"}
]'
# Verify metrics
kubectl top nodes
kubectl top pods -A
Configura el registro local:
# Install stern (multi-pod log tailing)
curl -Lo stern https://github.com/stern/stern/releases/download/v1.26.0/stern_1.26.0_linux_amd64.tar.gz
tar -xzf stern_1.26.0_linux_amd64.tar.gz
sudo mv stern /usr/local/bin/
# Usage
stern my-app --since 1m
Consulta references/EXAMPLES.md para los ConfigMaps del panel de desarrollo y alias útiles.
Esperado: El servidor de métricas proporciona datos de uso de recursos. Los comandos kubectl top funcionan. k9s o el panel muestra el estado del clúster. Los registros accesibles mediante stern o kubectl logs. Monitoreo de baja sobrecarga adecuado para el desarrollo.
En caso de fallo:
- Para errores TLS del servidor de métricas, aplica el parche de indicador TLS inseguro
- Comprueba si el pod del servidor de métricas está en ejecución:
kubectl get pods -n kube-system -l k8s-app=metrics-server - Verifica que la API de heapster está disponible:
kubectl get apiservices | grep metrics - Para stern, asegúrate de que el contexto kubectl está configurado correctamente
- Prueba el acceso básico a kubectl antes de depurar las herramientas de observabilidad
Paso 6: Documentar el Flujo de Trabajo y Crear Ayudas
Crea scripts y documentación para la incorporación del equipo.
Crea el script de configuración:
#!/bin/bash
# setup-local-cluster.sh (abbreviated)
set -e
echo "=== Local Kubernetes Cluster Setup ==="
# ... (see EXAMPLES.md for complete configuration)
Consulta references/EXAMPLES.md para el script de configuración completo con despliegue y verificación de servicios.
Crea el script de desmontaje:
#!/bin/bash
# teardown-local-cluster.sh (abbreviated)
echo "=== Tearing Down Local Cluster ==="
if kind get clusters 2>/dev/null | grep -q dev-cluster; then
kind delete cluster --name dev-cluster
docker stop kind-registry && docker rm kind-registry
fi
docker system prune -f
Consulta references/EXAMPLES.md para el script de desmontaje completo y la plantilla README.
Esperado: El script de configuración crea el clúster con un solo comando. El script de desmontaje limpia todo. El README proporciona instrucciones claras para las tareas comunes. Los miembros del equipo pueden ser productivos rápidamente.
En caso de fallo:
- Prueba los scripts manualmente antes de distribuirlos
- Agrega manejo de errores para cada paso
- Proporciona una sección de solución de problemas en el README
- Crea un tutorial en vídeo para configuraciones complejas
- Mantén los scripts a medida que las versiones de las herramientas del clúster se actualicen
Validación
- Clúster local creado con múltiples nodos
- Controlador Ingress instalado y respondiendo
- Registro local accesible y aceptando envíos
- La aplicación de muestra se despliega correctamente
- La sincronización de archivos funciona (los cambios se reflejan sin recompilación completa)
- El reenvío de puertos permite el acceso local a los servicios
- Los servicios de base de datos están en ejecución y son accesibles
- El servidor de métricas proporciona datos de uso de recursos
- Los registros accesibles mediante kubectl/stern/Tilt
- Los scripts de configuración/desmontaje funcionan de manera fiable
- La documentación es clara y está actualizada
- Los miembros del equipo pueden incorporarse en menos de 30 minutos
Errores Comunes
-
Recursos insuficientes: Los clústeres locales necesitan 4GB+ de RAM, 2+ núcleos CPU. Comprueba la configuración de Docker Desktop. Reduce las réplicas y las solicitudes de recursos para el desarrollo.
-
Conflictos de puertos: Los puertos 80, 443 y 5000 se usan comúnmente. Comprueba con
lsof -i :<puerto>antes de crear el clúster. Ajusta las asignaciones de puertos si es necesario. -
Compilaciones lentas: Sin caché adecuado, las compilaciones de Docker son lentas. Usa compilaciones multi-etapa, .dockerignore y BuildKit. Habilita el caché de Skaffold/Tilt.
-
Confusión de contexto: Múltiples contextos kubectl causan confusión. Usa
kubectl config current-contexty la herramientakubectxpara cambiar con claridad. -
Sincronización de archivos no funciona: Las incompatibilidades de rutas entre el host y el contenedor rompen la sincronización. Verifica que las rutas en skaffold.yaml/Tiltfile coinciden con el WORKDIR del Dockerfile.
-
Ingress no resuelve: Olvidaste añadir la entrada a /etc/hosts. O el controlador Ingress no está listo. Espera a que los pods del controlador estén listos antes de probar.
-
Pérdida de datos de la base de datos: El almacenamiento predeterminado es efímero. Usa PersistentVolumes para los datos que deben sobrevivir a los reinicios. Sé explícito sobre la clase de almacenamiento.
-
Límites de recursos demasiado altos: No copies las especificaciones de recursos de producción al entorno local. Reduce los límites significativamente para el desarrollo local para que quepan en Docker Desktop.
-
Aislamiento de red: El clúster local no siempre puede llegar a los servicios del host. Usa
host.docker.internal(Docker Desktop) o ngrok para el proxying inverso. -
Diferencia de versiones: La versión del clúster local difiere de la de producción. Establece explícitamente la versión de Kubernetes durante la creación para que coincida con la de producción.
Habilidades Relacionadas
deploy-to-kubernetes- Patrones de despliegue de aplicaciones probados localmente primerowrite-helm-chart- Gráficos Helm probados en el clúster localsetup-prometheus-monitoring- Configuración de monitoreo probada localmenteconfigure-ingress-networking- Configuración de Ingress validada localmenteimplement-gitops-workflow- GitOps probado con clúster localoptimize-cloud-costs- Estrategias de optimización de costos desarrolladas localmente
GitHub 저장소
연관 스킬
llamaguard
기타LlamaGuard는 폭력 및 혐오 발언 등 6가지 안전 범주에서 LLM 입력과 출력을 조정하기 위한 Meta의 70-80억 파라미터 모델입니다. 94-95% 정확도를 제공하며 vLLM, Hugging Face 또는 Amazon SageMaker를 사용해 배포할 수 있습니다. 이 기술을 사용하여 AI 애플리케이션에 콘텐츠 필터링 및 안전 가드레일을 손쉽게 통합하세요.
cost-optimization
기타이 Claude Skill은 리소스 적정화, 태깅 전략, 지출 분석을 통해 개발자들이 클라우드 비용을 최적화할 수 있도록 지원합니다. AWS, Azure, GCP에서 클라우드 비용을 절감하고 비용 거버넌스를 구현하기 위한 프레임워크를 제공합니다. 인프라 비용을 분석하거나, 리소스를 적정화하거나, 예산 제약을 충족해야 할 때 사용하세요.
quantizing-models-bitsandbytes
기타이 스킬은 bitsandbytes를 사용하여 LLM을 8비트 또는 4비트 정밀도로 양자화하며, 최소한의 정확도 손실로 50-75%의 메모리 감소를 달성합니다. 제한된 GPU 메모리에서 더 큰 모델을 실행하거나 추론을 가속화하는 데 이상적이며, INT8, NF4, FP4와 같은 형식을 지원합니다. 이 스킬은 HuggingFace Transformers와 통합되어 QLoRA 학습 및 8비트 옵티마이저를 가능하게 합니다.
dispatching-parallel-agents
기타이 Claude Skill은 3개 이상의 독립적인 문제를 동시에 조사하고 해결하기 위해 다중 에이전트를 배치합니다. 공유 상태나 의존성 없이 해결 가능한 무관련 장애 시나리오에 맞게 설계되었습니다. 핵심 기능은 병렬 문제 해결로, 각 독립 문제 영역마다 하나의 에이전트를 할당하여 효율성을 극대화합니다.
