Understanding Spinnaker Pipeline Architecture

Microservices Breakdown

Spinnaker is composed of several microservices (Orca, Clouddriver, Echo, Fiat, Front50, Gate, Igor). Issues in any one of these can propagate and break pipelines. For instance, Orca handles orchestration; if it's misconfigured or overloaded, stages may queue indefinitely or fail without traceable logs.

Pipeline Flow and Execution Stages

Pipelines are declarative JSON workflows. Execution stages communicate via Redis and persistent storage. Understanding stage dependencies and execution plans is crucial for diagnosing slow or failed executions.

{
  "stages": [
    {"type": "bake", "refId": "1", "requisiteStageRefIds": []},
    {"type": "deploy", "refId": "2", "requisiteStageRefIds": ["1"]}
  ]
}

Common Root Causes of Pipeline Failures

1. Orca Queue Congestion

Spinnaker queues executions in Redis. High concurrency or long-running tasks can cause backlog and starvation of new executions.

2. Clouddriver Latency

Clouddriver queries cloud providers (e.g., AWS, GCP, Kubernetes). Rate-limited or unresponsive cloud APIs cause stage delays or timeouts.

3. Misconfigured or Expired Credentials

Credentials stored in the Spinnaker configuration may expire or lack sufficient IAM permissions, leading to 403 or authentication errors during deploy/bake stages.

4. Artifact Resolution Failures

Igor fetches build artifacts from Jenkins, GitLab, or other sources. Network failures, expired tokens, or misaligned triggers result in silent failures or missing artifacts.

Diagnostics and Monitoring

Analyzing Orca Logs

Look for ExecutionRepositoryException or Task timeout in Orca logs. These often indicate blocked pipeline queues or missing service dependencies.

Using the Spinnaker UI Debug Mode

Append ?debug=true to any pipeline execution URL to reveal stage-level metadata, inputs, and error context.

Monitor with Prometheus/Grafana

Spinnaker exposes metrics from each microservice. Use metrics like orca.queue.depth and clouddriver.cache.requests to detect lag and cache churn.

Redis State Inspection

Check Redis for orphaned or stuck pipeline messages using CLI tools like redis-cli keys '*executions*'. Overloaded Redis may require TTL tuning or clustering.

Step-by-Step Remediation Plan

1. Scale Orca and Redis

Ensure Orca pods are horizontally scaled. If queue latency persists, Redis throughput may be the bottleneck. Consider using Redis Sentinel or Redis Cluster.

2. Audit Clouddriver Permissions

Use cloud provider logs and audit trails to verify Clouddriver's service accounts are valid and have necessary roles. Update kubeconfig contexts or IAM roles as needed.

3. Validate Artifact Delivery Chains

Ensure Jenkins/Git integrations are healthy. Use the Igor logs and `/artifacts/` endpoint to trace missing versions.

4. Use Manual Execution JSON

Export a failing pipeline's JSON and re-run it via `gate` API. This isolates UI and trigger-level issues.

curl -X POST \
  -H "Content-Type: application/json" \
  -d @pipeline.json \
  http://spinnaker-api/gate/pipelines

5. Enable Retries and Timeouts

In pipeline JSON, configure timeoutSeconds and retries per stage to avoid indefinite hangs.

Preventive Best Practices

  • Set circuit breakers on cloud API calls to avoid Clouddriver overload
  • Isolate long-running pipelines with dedicated Orca queues
  • Use Canary analysis and automated rollbacks to limit blast radius
  • Centralize artifact management using Spinnaker's Artifacts v2
  • Automate validation tests using pipeline preconditions

Conclusion

Spinnaker's flexibility comes at the cost of complexity. Pipeline delays and failures often stem from deeper systemic issues like Redis saturation, cloud API slowness, or configuration drift. Teams must adopt a layered approach to diagnostics—starting from logs and metrics, then moving to architectural scalability. Proactive monitoring, decoupled stages, and precise permission management are key to maintaining healthy Spinnaker deployments at scale.

FAQs

1. How do I debug a stuck Spinnaker pipeline?

Enable debug view via ?debug=true in the UI and check Orca logs for task timeouts or message queue delays.

2. Why is Clouddriver taking too long to fetch server groups?

This often results from expired credentials or cloud provider rate limits. Audit the cloud account and reduce caching pressure.

3. Can Redis be a bottleneck in Spinnaker?

Yes, especially if Orca queue depth is high. Consider scaling Redis or sharding via Redis Cluster for better performance.

4. How do I identify misconfigured artifact sources?

Check Igor logs for artifact resolution errors and use the `/artifacts/` endpoint to verify builds and commit versions.

5. What's the best way to isolate long-running pipelines?

Use dedicated Orca queues or instance pools and separate triggers or webhooks to minimize impact on the global pipeline flow.