Skip to main content

spc--delivery--be

Overview

  • Namespace: spc--delivery--be
  • Purpose: Sapoche Delivery Management Backend - PRODUCTION
  • Age: 232 days (~7-8 months, since February 2025)
  • Status: Active - Delivery and logistics management
  • Workloads: 3 deployments (all active)
  • Environment: PRODUCTION - Sample delivery and logistics

Architecture

Delivery management system handling sample pickup and delivery logistics:

  • Main Application: REST API backend (3 replicas) - High Availability
  • Scheduler: Cron jobs for scheduled tasks (1 deployment)
  • Observability: OpenTelemetry collector for tracing

Auto-Scaling Configuration

No Auto-Scaling Configured:

  • No HorizontalPodAutoscalers (HPAs)
  • No KEDA scaled objects
  • Fixed replica counts (Main app: 3 replicas)

Workload Categories

Main Application (1 deployment)

NameReplicasStatusPurpose
spc--delivery--be--app--prod3/3RunningMain delivery API (HA configured)

Scheduler (1 deployment)

NameReplicasStatusPurpose
cron--prod1/1RunningScheduled cron jobs

Observability (1 deployment)

NameReplicasStatusPurpose
spc--delivery--be-otel-collector1/1RunningOpenTelemetry trace collector

Services

NameTypeCluster IPPortsNodePortPurpose
spc--delivery--be--app--prodNodePort10.8.20.1148031757Main delivery API
spc--delivery--be-otel-collectorClusterIP10.8.27.1024317, 4318-OTLP trace collection

Access & Management

View all resources:

kubectl get all -n spc--delivery--be

Check main application:

# View app pods (3 replicas)
kubectl get pods -n spc--delivery--be | grep "app--prod"

# View logs from all replicas
kubectl logs -f deployment/spc--delivery--be--app--prod -n spc--delivery--be

# Check specific replica
kubectl logs -f deployment/spc--delivery--be--app--prod -n spc--delivery--be --all-containers=true

Check cron jobs:

# View cron pod
kubectl get pods -n spc--delivery--be | grep cron

# Cron logs
kubectl logs -f deployment/spc--delivery--be--cron--prod -n spc--delivery--be

Restart services:

# Restart main app (all 3 replicas)
kubectl rollout restart deployment/spc--delivery--be--app--prod -n spc--delivery--be

# Restart cron
kubectl rollout restart deployment/spc--delivery--be--cron--prod -n spc--delivery--be

Monitoring

Resource usage:

kubectl top pods -n spc--delivery--be --sort-by=memory
kubectl top pods -n spc--delivery--be --sort-by=cpu

Events:

kubectl get events -n spc--delivery--be --sort-by='.lastTimestamp' | head -20

Traces (OpenTelemetry):

# Check OTEL collector
kubectl logs -f deployment/spc--delivery--be-otel-collector -n spc--delivery--be

# Port forward to access OTEL endpoints
kubectl port-forward -n spc--delivery--be deployment/spc--delivery--be-otel-collector 4317:4317

Data Flow

Delivery Request

spc--delivery--be--app--prod (NodePort 31757)

Main Delivery API (3 replicas - HA)

Database (external)

Cron Jobs → Scheduled Tasks

Sample pickup scheduling, delivery routing, logistics updates

OpenTelemetry Tracing

Application → OTEL Collector (4317/4318) → Backend (Grafana/Jaeger)

Delivery Management Workflow

1. Delivery API (High Availability)

  • 3 replicas for redundancy and load distribution
  • Sample pickup scheduling
  • Delivery route optimization
  • Driver assignment
  • Delivery status tracking
  • Real-time updates

2. Scheduled Tasks

  • Cron jobs for periodic delivery tasks
  • Scheduled route optimization
  • Delivery reminders
  • Status synchronization
  • Report generation

3. OpenTelemetry Tracing

  • Distributed tracing for API requests
  • Performance monitoring
  • Request flow analysis
  • Integration with Grafana/Jaeger

Production Considerations

High Availability

Well Configured:

  • Main API: 3 replicas for redundancy
  • Good HA setup for delivery API

x Single Points of Failure:

  • Cron job: 1 replica
  • OTEL collector: 1 replica

Recommendations

  1. Auto-Scaling:

    • Currently fixed at 3 replicas (good baseline)
    • Add HPA to scale during peak delivery hours
    • Target: 3-10 replicas based on load
    • Consider KEDA if event-driven scaling needed
  2. Cron Resilience:

    • Currently 1 replica
    • Consider 2 replicas if cron jobs are critical
    • Or ensure cron jobs are idempotent
  3. OTEL Collector:

    • Currently 1 replica
    • Consider 2+ replicas for reliability
    • Monitor trace collection lag
  4. Monitoring Priorities:

    • API response times (3 replicas handling load)
    • Delivery assignment success rates
    • Route optimization performance
    • Cron job execution
    • OTEL collector health
  5. Recent Updates:

    • Namespace is relatively new (232 days)
    • Recent redeployment 20 days ago
    • Monitor stability and performance

Troubleshooting

Main API issues:

# Check all 3 API pods
kubectl get pods -n spc--delivery--be | grep "app--prod"

# Check logs from all replicas
kubectl logs deployment/spc--delivery--be--app--prod -n spc--delivery--be --all-containers=true --tail=100

# Check specific pod
POD_NAME=$(kubectl get pods -n spc--delivery--be | grep "app--prod" | head -1 | awk '{print $1}')
kubectl logs $POD_NAME -n spc--delivery--be --tail=100

# Test API endpoint
kubectl port-forward -n spc--delivery--be service/spc--delivery--be--app--prod 8080:80
# Access http://localhost:8080

Load distribution issues:

# Check resource usage across replicas
kubectl top pods -n spc--delivery--be | grep app--prod

# Check logs from each replica
for pod in $(kubectl get pods -n spc--delivery--be | grep "app--prod" | awk '{print $1}'); do
echo "=== $pod ==="
kubectl logs $pod -n spc--delivery--be --tail=10
done

# Restart all replicas
kubectl rollout restart deployment/spc--delivery--be--app--prod -n spc--delivery--be

Cron job failures:

# Check cron pod
kubectl get pods -n spc--delivery--be | grep cron

# Check cron logs
kubectl logs -f deployment/spc--delivery--be--cron--prod -n spc--delivery--be

# Check for errors
kubectl logs deployment/spc--delivery--be--cron--prod -n spc--delivery--be --tail=100 | grep -i "error\|fail"

# Restart cron
kubectl rollout restart deployment/spc--delivery--be--cron--prod -n spc--delivery--be

Tracing issues:

# Check OTEL collector
kubectl logs -f deployment/spc--delivery--be-otel-collector -n spc--delivery--be

# Check collector metrics
kubectl port-forward -n spc--delivery--be deployment/spc--delivery--be-otel-collector 8888:8888
# Access http://localhost:8888/metrics

# Restart OTEL collector
kubectl rollout restart deployment/spc--delivery--be-otel-collector -n spc--delivery--be

Performance Metrics

Current Scale

  • Main API: 3 replicas (good HA)
  • Cron: 1 replica
  • OTEL Collector: 1 replica
  • Total Active Pods: ~5 pods

Stability

  • Namespace Age: 232 days (~7-8 months) - relatively new
  • Recent Updates: 20 days ago
  • HA Configuration: 3 replicas for main API (good)