返回 Skill 列表
extension
分类: 开发与工程无需 API Key

kubernetes-deployer

使用Dockerfile、Helm图表和本地Minikube部署将应用程序打包并部署到Kubernetes。在容器化应用程序、创建Kubernetes清单、设置Helm图表、部署到Minikube或准备云就绪配置时使用。专注于以本地优先的方式部署无状态服务。

person作者: jakexiaohubgithub

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

  1. Local-first - Test everything in Minikube before cloud
  2. Stateless services - No local state; use external databases
  3. Config via env vars - All configuration through environment
  4. 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

Assets