Skip to content

Kubernetes Deployment

DeepTagger documentation is deployed to GKE (Google Kubernetes Engine).

Architecture

Internet → GCP Load Balancer → Nginx Ingress → oka-mkdocs-svc → oka-mkdocs pods
                (HTTPS)           (routes /docs)      (port 80)         (nginx)

Deployment Resources

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: oka-mkdocs
spec:
  replicas: 2
  template:
    spec:
      containers:
      - name: oka-mkdocs
        image: gcr.io/oka-gcp-004/oka-mkdocs:latest
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 50m
            memory: 64Mi
          limits:
            cpu: 200m
            memory: 128Mi

Service

apiVersion: v1
kind: Service
metadata:
  name: oka-mkdocs-svc
spec:
  selector:
    app: oka-mkdocs
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

Ingress

Nginx ingress routes /docs to the service:

- path: /docs
  pathType: Prefix
  backend:
    service:
      name: oka-mkdocs-svc
      port:
        number: 80

Deployment Process

  1. Build image:

    docker build -t gcr.io/oka-gcp-004/oka-mkdocs:latest .
    docker push gcr.io/oka-gcp-004/oka-mkdocs:latest
    

  2. Deploy to k8s:

    kubectl apply -f oka-mkdocs.yaml
    kubectl rollout restart deployment oka-mkdocs
    

  3. Update ingress (if first time):

  4. Add /docs route to nginx ingress
  5. Apply ingress changes

  6. Verify:

    kubectl get pods -l app=oka-mkdocs
    kubectl logs deployment/oka-mkdocs
    curl https://deeptagger.com/docs
    

Scaling

Adjust replicas in deployment:

spec:
  replicas: 3  # Increase for more availability

Updates

To update documentation:

  1. Edit markdown files
  2. Rebuild Docker image
  3. Push to registry
  4. Restart deployment (pulls new image)

Monitoring

  • Health checks: /health endpoint
  • Logs: kubectl logs deployment/oka-mkdocs
  • Metrics: Grafana dashboard (if configured)

Troubleshooting

# Check pod status
kubectl get pods -l app=oka-mkdocs

# View logs
kubectl logs -f deployment/oka-mkdocs

# Test internal connectivity
kubectl run curl-pod --rm -i --tty --image=curlimages/curl --restart=Never -- curl http://oka-mkdocs-svc:80/

# Exec into pod
kubectl exec -it deployment/oka-mkdocs -- /bin/sh

Next Steps

See the deployment notebook in the oka-inf repository for automated deployment.