Kubernetes Deployer
Deploy applications to Kubernetes with production-ready configurations, starting locally with Minikube.
Deployment Workflow
1. Dockerfile → Containerize application
2. Helm Chart → Package Kubernetes manifests
3. Local Deploy → Test in Minikube
4. Cloud Ready → Configure for production
Quick Start: Local Deployment
1. Create Dockerfile
# Python example (see references for other languages)
FROM python:3.11-slim AS builder
WORKDIR /build
COPY pyproject.toml ./
RUN pip install --no-cache-dir .
FROM python:3.11-slim
WORKDIR /app
RUN useradd -m -u 1000 appuser
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY app ./app
USER appuser
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
2. Copy Helm Chart Template
Copy assets/helm-template/ to charts/<app-name>/ and customize:
cp -r assets/helm-template charts/myapp
# Edit Chart.yaml: name, description
# Edit values.yaml: image, ports, resources
3. Deploy to Minikube
# Start Minikube
minikube start
# Build image in Minikube's Docker
eval $(minikube docker-env)
docker build -t myapp:local .
# Deploy with Helm
helm upgrade --install myapp ./charts/myapp \
--set image.repository=myapp \
--set image.tag=local \
--set image.pullPolicy=Never
# Access service
kubectl port-forward svc/myapp 8080:80
Core Principles
- Local-first - Test everything in Minikube before cloud
- Stateless services - No local state; use external databases
- Config via env vars - All configuration through environment
- 12-factor ready - Portable between environments
Helm Chart Structure
charts/<app-name>/
├── Chart.yaml # Metadata
├── values.yaml # Default config
└── templates/
├── _helpers.tpl # Template functions
├── deployment.yaml
├── service.yaml
├── ingress.yaml # Optional
└── hpa.yaml # Optional
Configuration Patterns
Environment Variables
# values.yaml
env:
- name: DATABASE_URL
value: "postgresql://..."
- name: LOG_LEVEL
value: "info"
# From secrets
envFrom:
- secretRef:
name: app-secrets
Create Secret
kubectl create secret generic app-secrets \
--from-literal=DATABASE_PASSWORD=secret123 \
--from-literal=API_KEY=key456
Health Checks
# values.yaml
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
Common Commands
Minikube
minikube start # Start cluster
minikube dashboard # Open dashboard
eval $(minikube docker-env) # Use Minikube Docker
minikube service myapp --url # Get service URL
Helm
helm lint ./charts/myapp # Validate chart
helm template myapp ./charts/myapp # Preview manifests
helm upgrade --install myapp ./charts/myapp # Deploy
helm uninstall myapp # Remove
Kubectl
kubectl get pods # List pods
kubectl logs <pod> # View logs
kubectl describe pod <pod> # Debug pod
kubectl port-forward svc/myapp 8080:80 # Access locally
Environment-Specific Values
# values-dev.yaml
replicaCount: 1
resources:
limits:
cpu: 200m
memory: 256Mi
# values-prod.yaml
replicaCount: 3
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
Deploy with environment:
helm upgrade --install myapp ./charts/myapp \
-f values.yaml \
-f values-prod.yaml
Troubleshooting
| Issue | Command |
|-------|---------|
| Pod not starting | kubectl describe pod <name> |
| Image not found | minikube ssh docker images |
| Service unreachable | kubectl get endpoints |
| Logs | kubectl logs <pod> -f |
References
- references/dockerfile-patterns.md - Multi-stage builds, language templates, security
- references/helm-charts.md - Chart structure, templates, values configuration
- references/minikube-local.md - Local images, service access, debugging
Assets
- assets/helm-template/ - Ready-to-use Helm chart template
微信扫一扫