Skip to main content
πŸŽ“ Claude Code Masterclass Learn AI-assisted development on Udemy β€” plus the companion book on Leanpub & Amazon. Start Learning
Backstage: Build an Internal Developer Portal on Kubernetes
Platform Engineering

Backstage: Build an Internal Developer Portal on Kubernetes

Deploy Spotify's Backstage on Kubernetes β€” service catalog, software templates, TechDocs, and plugin ecosystem for platform engineering.

LB
Luca Berton
Β· 1 min read

What Is Backstage?

Backstage is Spotify’s open-source developer portal β€” now a CNCF Incubating project. It provides a single pane of glass for all your services, documentation, APIs, and infrastructure. 29K+ GitHub stars.

Core Features

1. Software Catalog

Every service, library, and resource in one searchable catalog:

# catalog-info.yaml (lives in each repo)
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: payment-service
  description: Handles all payment processing
  annotations:
    github.com/project-slug: myorg/payment-service
    backstage.io/techdocs-ref: dir:.
  tags:
    - python
    - payments
spec:
  type: service
  lifecycle: production
  owner: team-payments
  system: checkout
  dependsOn:
    - resource:payments-db
    - component:auth-service
  providesApis:
    - payments-api

2. Software Templates (Scaffolding)

Create new services from templates:

apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: python-fastapi-service
  title: Python FastAPI Service
spec:
  owner: platform-team
  type: service
  parameters:
    - title: Service Info
      properties:
        name:
          title: Service Name
          type: string
        owner:
          title: Owner Team
          type: string
          ui:field: OwnerPicker
    - title: Infrastructure
      properties:
        database:
          title: Database
          type: string
          enum: [postgres, mysql, none]
  steps:
    - id: fetch-template
      action: fetch:template
      input:
        url: ./skeleton
        values:
          name: ${{ parameters.name }}
    - id: publish
      action: publish:github
      input:
        repoUrl: github.com?owner=myorg&repo=${{ parameters.name }}
    - id: register
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}

3. TechDocs (Documentation)

Auto-publish MkDocs from every repo:

# mkdocs.yml in your service repo
site_name: Payment Service
nav:
  - Home: index.md
  - Architecture: architecture.md
  - API Reference: api.md
  - Runbook: runbook.md

plugins:
  - techdocs-core

4. Kubernetes Plugin

See pod status, deployments, and logs for every service:

# catalog-info.yaml annotation
metadata:
  annotations:
    backstage.io/kubernetes-id: payment-service
    backstage.io/kubernetes-namespace: payments

Kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backstage
  namespace: backstage
spec:
  replicas: 2
  template:
    spec:
      containers:
        - name: backstage
          image: myregistry/backstage:latest
          ports:
            - containerPort: 7007
          env:
            - name: POSTGRES_HOST
              value: "postgres.backstage.svc"
            - name: POSTGRES_PORT
              value: "5432"
            - name: GITHUB_TOKEN
              valueFrom:
                secretKeyRef:
                  name: backstage-secrets
                  key: github-token
          resources:
            requests:
              memory: "512Mi"
              cpu: "500m"

Plugin Ecosystem

CategoryPlugins
CI/CDGitHub Actions, Jenkins, Argo CD, Tekton
CloudAWS, GCP, Azure
MonitoringPrometheus, Grafana, Datadog, PagerDuty
SecuritySnyk, SonarQube, Trivy
InfrastructureTerraform, Crossplane, Kubernetes
CostKubecost, CloudBilling

Who Needs Backstage?

Team SizeNeed Backstage?
under 10 devs❌ Overkill
10-50 devs⚠️ Maybe (if many services)
50-200 devsβœ… Strongly recommended
200+ devsβœ… Essential

The value scales with complexity β€” more services, more teams, more value.

Free 30-min AI & Cloud consultation

Book Now