A GitOps-managed Kubernetes lab for testing Backstage plugins.
Used to test the following Backstage plugins:
This repository installs and manages the following services through ArgoCD:
- Jenkins
- ArgoCD
- Tekton Pipelines
- Ollama, Open WebUI, and various LLM models
These manifests run on any Kubernetes cluster with a load balancer.
I personally use K3s, but this setup also works with Minikube or other distros.
It also provides Github and Gitlab workflows with test data.
βββ apps
β βββ applicationset.yaml
βββ manifests
β βββ argocd
β β βββ base
β β β βββ argocd-apps.yaml
β β β βββ kustomization.yaml
β β β βββ namespace.yaml
β β β βββ roles.yaml
β β β βββ secrets.yaml
β β β βββ service-accounts.yaml
β β βββ overlays
β β βββ defaults
β β βββ kustomization.yaml
β βββ jenkins
β β βββ base
β β β βββ deployment.yaml
β β β βββ kustomization.yaml
β β β βββ namespace.yaml
β β β βββ pvc.yaml
β β β βββ service.yaml
β β βββ docker
β β β βββ casc
β β β β βββ base.yaml
β β β β βββ jobs.yml
β β β βββ compose.yml
β β β βββ Dockerfile
β β β βββ plugins.txt
β β βββ overlays
β β βββ defaults
β β βββ kustomization.yaml
β βββ llms
β β βββ base
β β β βββ deployment.yaml
β β β βββ kustomization.yaml
β β β βββ namespace.yaml
β β β βββ pvc.yaml
β β β βββ service.yaml
β β βββ overlays
β β βββ defaults
β β βββ kustomization.yaml
β βββ tekton
β βββ base
β β βββ kustomization.yaml
β β βββ namespace.yaml
β β βββ roles.yaml
β β βββ secrets.yaml
β β βββ service-account.yaml
β β βββ tekton.yaml
β βββ overlays
β βββ defaults
β βββ kustomization.yaml
βββ README.md
βββ test-artifacts
βββ Jenkinsfile
βββ sbom-logsEach service folder contains a base manifest and environment overlays managed by ArgoCD ApplicationSets.
These manifests are designed for Kubernetes clusters with a LoadBalancer available.
Note: If you're using Minikube, you may need to run the tunnel command to expose LoadBalancer services.
ArgoCD is used as the GitOps delivery tool.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yamlWait for ArgoCD to finish installing:
kubectl wait --for=condition=Ready pods --all -n argocd --timeout=300sExpose the ArgoCD server:
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'Note: Remove the default port at the end of the URL if present. The cluster server may not be the first one listed β adjust the
.clusters[index]value as needed.
kubectl config view -o jsonpath='{.clusters[0].cluster.server}'kubectl get svc argocd-server -n argocd -o jsonpath='{.spec.ports[0].nodePort}'kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -dDefault username: admin
Access the ArgoCD UI at:
https://<k8s-server-url>:<argocd-svc-port>
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yamlkubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yamlOnce ArgoCD is running, apply the ApplicationSet that manages all environments:
kubectl apply -f apps/applicationset.yamlCheck the ArgoCD applications:
kubectl get applications -n argocdOnce synced, ArgoCD will deploy all services defined under manifests/.
You can run the after-setup.sh script to get information on:
- ArgoCD Serve port
- ArgoCD Admin creds
- ArgoCD Service Account token
- Tekton Service Account Token
- Service Ports
------------------------------
Backstage Lab π§ͺ - After Setup
------------------------------
π₯οΈ ArgoCD Server port 30314
π ArgoCD Admin creds
Username: admin
Password: <password>
π ArgoCD Service Account
Name: backstage-rollouts
πͺ Token
<token>
β Service Ports
jenkins 8080:31862/TCP,50000:30806/TCP
ollama 11434:31861/TCP
open-webui 3000:31343/TCP
βοΈ Tekton Service Account:
Name: backstage-tekton
πͺ Token
<token>
------------------------------After all pods are live, view service endpoints:
kubectl get svc -A -o wide| Service | Port |
|---|---|
| Jenkins | 8080 |
| Open WebUI | 3000 |
| Ollama | 11434 |
graph TD
GitRepo[(GitOps Repo)]
ArgoCD -->|Syncs manifests| K8sCluster[(Kubernetes Cluster)]
K8sCluster --> Jenkins
K8sCluster --> ArgoCD
K8sCluster --> Tekton
K8sCluster --> Ollama
K8sCluster --> OpenWebUI
To remove all GitOps-managed resources:
kubectl delete -f manifests/applicationset.yaml -n argocd
kubectl delete ns backstage-jenkins backstage-llms backstage-tekton