Writing Skills
writing-skills
效率与协作技能,来自 obra/superpowers,查看原文获取完整用途和操作说明。
setup-local-kubernetes【部署与运维】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. …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Crea un entorno de desarrollo local de Kubernetes para una iteración y pruebas rápidas.
Consulta Ejemplos Extendidos para archivos de configuración completos y plantillas.
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:
docker psCrea 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:
lsof -i :80,443,5000,6550kind get clusters, k3d cluster list, minikube logsConfigura 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:
docker pscurl http://localhost:5000/v2/_catalogdocker build .kubectl describe pod -l app=my-appConfigura 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:
kubectl get storageclasskubectl get pvc,pvkubectl describe pod postgres-0kubectl logs postgres-0 para errores de PostgreSQLAgrega 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:
kubectl get pods -n kube-system -l k8s-app=metrics-serverkubectl get apiservices | grep metricsCrea 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:
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-context y la herramienta kubectx para 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.
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